oracle expdp exclude 导出导入整个库

2025-10-24 00:32:28

1、1、创建导入导出对象专用用户(用哪个用户来导出导入sa用户的数据)

create user  zxx identified by  zxx default tablespace REMOTE320DB;

grant connect,dba to zxx;

创建用户zxx并对zxx用户赋予连接和dba权限。这样zxx用户就有权限导出sa用户数据了。

注意:zxx用户使用的非表空间、默认临时表空间、默认profile文件,也就是说zxx用户的默认表空间为REMOTE320DB、默认临时表空间为TEMP、默认profile文件为DEFAULT。

那么导入用户zxx也必须使用这样的配置。

2、2、创建dump文件存放目录

SQL> create directory dump_dir as '/backup/zxx_dump';

SQL> grant read,write on directory dump_dir to zxx;

第一句是创建dump目录为虚拟dump_dir,这个目录其实指向/backup/zxx_dump路径

第二句是赋予zxx用户对这个虚拟目录的读写权限

oracle expdp exclude 导出导入整个库

3、3、排除哪些大表不导,哪些大表导出的数据量

select * from ( select sum(bytes)/1024/1024/1024 sizem,segment_name from dba_segments where owner='SA' and segment_type like 'TABLE%' group by segment_name ) a where a.sizem > 1

找出sa用户对象大小大于1G的表,经过和开发人员确认:

不需要的表有:

TXSBZT SPSBZT YJXX T_CLXX

单独导出部分数据的表:

CLWFXX CLXSGJ TPXZXX GJXX

最终确认expdp时需要过滤的表有:

TPXZXX TXSBZT CLWFXX SPSBZT YJXX CLXSGJ GJXX T_CLXX

oracle expdp exclude 导出导入整个库

4、4、开始导出sa用户数据

注意转义字符:

expdp zxx/zxx DIRECTORY=dump_dir  DUMPFILE=sa.dmp LOGFILE=sa.log SCHEMAS=sa EXCLUDE=TABLE:\"IN \(\'TPXZXX\',\'TXSBZT\',\'CLWFXX\',\'SPSBZT\', \'YJXX\',\'CLXSGJ\',\'GJXX\',\'T_CLXX\'\)\" ;

exclude表示过滤哪些对象,TABLE:表示过滤哪些表

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

5、5、开始导出表之分区表

需要导出至少一个月的,采用parfile方便

[dbadmin@DB01 zxx_dump]$ cat exp_clxsgj.txt

userid=sa/wiscom

directory=dump_dir

dumpfile=clxsgj.dmp

LOGFILE=clxsgj.log

TABLES=CLXSGJ:CLXSGJ20150401,CLXSGJ:CLXSGJ20150402,CLXSGJ:CLXSGJ20150403,CLXSGJ:CLXSGJ20150404,CLXSGJ:CLXSGJ20150405,CLXSGJ:CLXSGJ20150406,CLXSGJ:CLXSGJ20150407,CLXSGJ:CLXSGJ20150408,CLXSGJ:CLXSGJ20150409,CLXSGJ:CLXSGJ20150410,CLXSGJ:CLXSGJ20150411,CLXSGJ:CLXSGJ20150412,CLXSGJ:CLXSGJ20150413,CLXSGJ:CLXSGJ20150414,CLXSGJ:CLXSGJ20150415,CLXSGJ:CLXSGJ20150416,CLXSGJ:CLXSGJ20150417,CLXSGJ:CLXSGJ20150418,CLXSGJ:CLXSGJ20150419,CLXSGJ:CLXSGJ20150420,CLXSGJ:CLXSGJ20150421,CLXSGJ:CLXSGJ20150422,CLXSGJ:CLXSGJ20150423,CLXSGJ:CLXSGJ20150424,CLXSGJ:CLXSGJ20150425,CLXSGJ:CLXSGJ20150426,CLXSGJ:CLXSGJ20150427,CLXSGJ:CLXSGJ20150428,CLXSGJ:CLXSGJ20150429,CLXSGJ:CLXSGJ20150430,CLXSGJ:CLXSGJ20150501,CLXSGJ:CLXSGJ20150502,CLXSGJ:CLXSGJ20150503,CLXSGJ:CLXSGJ20150504,CLXSGJ:CLXSGJ20150505,CLXSGJ:CLXSGJ20150506

[dbadmin@DB01 zxx_dump]$ expdp parfile=exp_clxsgj.txt

注意:tables不能用括号括起来

oracle expdp exclude 导出导入整个库

6、6、开始导出表之非分区表

expdp sa/wiscom directory=dump_dir dumpfile=clwfxx.dmp LOGFILE=clwfxx.log tables=clwfxx query=clwfxx:\" where jgsj between to_date\(\'2014-04-01\',\'yyyy-mm-dd\'\) and to_date\(\'2015-05-6\',\'yyyy-mm-dd\'\)\";

expdp sa/wiscom directory=dump_dir dumpfile=TPXZXX.dmp LOGFILE=TPXZXX.log tables=TPXZXX query=TPXZXX:\" where XZSJ between to_date\(\'2014-04-01\',\'yyyy-mm-dd\'\) and to_date\(\'2015-05-6\',\'yyyy-mm-dd\'\)\";

expdp sa/wiscom directory=dump_dir dumpfile=GJXX.dmp LOGFILE=GJXX.log tables=GJXX query=GJXX:\" where JGSJ between to_date\(\'2014-04-01\',\'yyyy-mm-dd\'\) and to_date\(\'2015-05-6\',\'yyyy-mm-dd\'\)\";

注意:

刚开始使用:

expdp zxx/zxx directory=dump_dir dumpfile=sa_clwfxx.dmp LOGFILE=sa_clwfxx.log TABLES=SA.CLWFXX QUERY=SA.CLWFXX:\"WHERE jgsj \>= TO_DATE\(\'2015-04-20 00:00:00',\'yyyy-mm-dd hh24:mi:ss\'\) AND jgsj \< TO_DATE\(\'2015-05-11 00:00:00\',\'yyyy-mm-dd hh24:mi:ss\'\)\" exclude=statistics parallel=2;

想导出SA.CLWFXX 表,但始终报错:

ORA-01861: literal does not match format string(字符串格式不匹配)

那么将query中的单引号换成双引号之后:

expdp zxx/zxx directory=dump_dir dumpfile=sa_clwfxx.dmp LOGFILE=sa_clwfxx.log TABLES=SA.CLWFXX QUERY=SA.CLWFXX:\"WHERE jgsj \>= TO_DATE\(\"2015-04-20 00:00:00",\"yyyy-mm-dd hh24:mi:ss\"\) AND jgsj \< TO_DATE\(\"2015-05-11 00:00:00\",\"yyyy-mm-dd hh24:mi:ss\"\)\" exclude=statistics parallel=2;

还是报错:ORA-01861: literal does not match format string

最后观察发现,在命令行中执行:

select sysdate from dual; 发现只有年月日

最后定位出来,query中有时间的话,最好不要加上时分秒。

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

1、

1、创建表空间

由于sa用户的默认表空间和sa用户的所有对象都在REMOTE320DB表空间上,所以对于impdp 用户模式必须要创建:导出专有用户zxx的默认表空间、sa用户的默认表空间和sa用户的所有对象都在REMOTE320DB表空间

create tablespace remote320db  datafile '/u01/app/oracle/oradata/orclone/data01.dbf' size 30G;

alter tablespace remote320db add datafile '/u01/app/oracle/oradata/orclone/data02.dbf' size 30G;

2、

2、创建导入对象专用用户(用哪个用户来导出导入sa用户的数据,与导出用户一致)

1、创建导入导出对象专用用户(用哪个用户来导出导入sa用户的数据)

create user  zxx identified by  zxx default tablespace REMOTE320DB;

grant connect,dba to zxx;

和前面的导出用户对象一致,zxx用户的默认表空间为REMOTE320DB、默认临时表空间为TEMP、默认profile文件为DEFAULT。

3、3、创建dump文件存放目录

SQL> create directory dump_dir as '/zxx_software/dump';

SQL> grant read,write on directory dump_dir to zxx;

创建完之后,将之前导出的4个*.dmp 文件拷贝到/zxx_software/dump目录,并对改用修改成oracle软件安装用户。

虽然导出的时候oracle软件安装用户是dbadmin,但是对于dump文件没有影响,测试数据的oracle软件安装用户是oracle,所以拷贝完所有文件之后,需要修改用户权限:

chown -R oracle:oinstall /zxx_software/dump

4、4、创建profile文件

create profile MONITORING_PROFILE limit failed_login_attempts unlimited;

创建profile的语句最好从导出库中拷贝来创建

注意:如果没有创建sa用户的默认profile就会impdp失败。

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

5、5、开始导入用户sa的dump文件

impdp zxx/zxx directory=dump_dir dumpfile=sa.dmp schemas=sa logfile=sa.log;

导入的时候忽略 角色创建失败。因为角色创建失败对数据对象的导入没有影响!从下图中就可以看出!

注意:用户模式导入,导入库一定不能存在sa用户

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

oracle expdp exclude 导出导入整个库

6、6、逐个导入各个大表的dump文件

impdp sa/wiscom directory=dump_dir dumpfile=clxsgj.dmp LOGFILE=clxsgj.log tables=clxsgj

表导出用什么用户,导入就用什么用户

oracle expdp exclude 导出导入整个库

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢