导出导入实验:
生产上 导出操作 一定要单独去记录logfile
1.导出最常使用的方式是导出用户
expdp system/oracle directory=my_dir dumpfile=exp%U.dmp schemas=hr,scott
system/oracle 使用帐户SYSTEM 因为导出时 需要拥有导出对象的权限 而SYSTEM用户权限比较高 有时也会使用具体的用户
directory 目录 一定到提前在数据库中创建 并且注意导出使用的用户是否有权限
dumpfile 转储文件 生产上 一般会产生多个转储文件 在文件命中使用%U(从01开始计数)
schemas 导出用户 可以一次性导出多个用户 用逗号隔开
导出用户 也支持 只导出用户的部分对象
--只导出制定类型的对象
导出结尾是S的对象
expdp system/oracle directory=my_dir dumpfile=exp03%U parfile=exp_par
参数文件
vi exp_par
include=function
include=procedure
include=package
include=table:"like '%S'"
schemas=hr
2.导出表
生产上 很少只导出单表 因为在只导出单表的情况下 如果这个表被别的表引用 那么在导入时 会报创建约束失败的报错
什么时候会单独导出某张表? 会在导出某张表的某些行时 使用单表导出
expdp system/oracle directory=my_dir dumpfile=hrt%U.dmp tables=hr.employees,hr.departments
推荐使用参数文件的方式
根据where条件只导出相关行:
vi partable
userid=system/oracle
directory=my_dir
dumpfile=emp.dmp
tables=hr.employees
QUERY=hr.employees:"WHERE department_id > 10"
expdp parfile=par3
3.全库导出
full=y 如果用system用户 后面写full=y 表示全库导出(不包含sys用户)
如果用户不是system 并且用户没有exp_full_database权限 也可使用full=y 表示导出该用户下所有拥有权限的对象内容
全库导出的几个重要参数
并发参数一定要有 parallel
一定要限制文件大小 filesize
expdp system/oracle directory=my_dir dumpfile=expdp%U.dmp full=y parallel=4 filesize=100M
一般 除非创建测试环境 不然很少考虑使用全库导出操作 因为全库导出 再导入到某个空库中 导入后 数据无法利用归档进行追加
在迁移中 除非及特殊条件 不然一律使用RMAN进行全库数据操作
4.传输表空间导出
将一个数据库的表空间 复制一份 给另外一个数据库使用
例如:PROD4数据库的BSR用户的默认表空间TBS3 这个表空间 包含了很多HR用户的数据
可以使用传输表空间技术把TBS3这个表空间复制一份后
让EMREP用户使用
这样EMREP也有了BSR用户的数据
实现传输表空间的限制
1.传输的表空间必须是自包含的
自包含:表空间中的数据如果有约束关系 必须在自己的表空间中完成
2.传输表空间的使用用户 必须在目标数据库也有
传输表空间
create tablespace tbs1 datafile '/u01/app/oracle/oradata/PROD4/PROD4/TBS1.DBF' size 10m;
create tablespace tbs2 datafile '/u01/app/oracle/oradata/PROD4/PROD4/TBS2.DBF' size 10m;
create user bsr identified by oracle; --创建生产用户建表
grant dba to bsr;
conn bsr/oracle
创建T1表,并给表加主键
create table T1 tablespace TBS1 as select object_id,object_name from dba_objects;
alter table t1 add constraint pk_t1 primary key(object_id);
创建T2表并给表加外键,并加创建索引
create table T2 tablespace TBS2 as select object_id,object_name from dba_objects where 1=2;
alter table T2 add constraint fk_t2 foreign key(object_id) references T1(object_id);
create index idx_t2_tb2 on T2(object_id) tablespace TBS1;
--检查是否自包含
SQL> exec dbms_tts.transport_set_check('TBS2',INCL_CONSTRAINTS=>TRUE);
select * from transport_set_violations;
SQL> exec dbms_tts.transport_set_check('TBS1',INCL_CONSTRAINTS=>TRUE);
select * from transport_set_violations;
SQL> EXEC DBMS_TTS.TRANSPORT_SET_CHECK('TBS1,TBS2',INCL_CONSTRAINTS=>TRUE);
select * from transport_set_violations;
正式开始实施传输表空间:
create TABLESPACE TBS3 datafile '/u01/app/oracle/oradata/PROD4/PROD4/TBS3.DBF' size 10m;
SQL> conn bsr/oracle
SQL> create table t3 tablespace tbs3 as select * from user_objects;
create table t4 tablespace tbs3 as select * from user_objects;
SQL> exec dbms_tts.transport_set_check('TBS3',INCL_CONSTRAINTS=>TRUE);
select * from transport_set_violations;
alter tablespace TBS3 read only; --把表空间置为read only
--表空间传输必须以sysdba权限登录数据库
$ expdp \'/ as sysdba\' directory=my_dir dumpfile=tbs3.dmp transport_tablespace=y tablespaces=tbs3;
cp /u01/app/oracle/oradata/PROD4/PROD4/TBS3.DBF /u01/app/oracle/oradata/EMREP/EMREP/
create user bsr identified by oracle;
grant dba to bsr;
--导入元数据,需要为表空间制定新的数据文件位置
impdp \'/ as sysdba\' directory=d1 dumpfile=tbs3.dmp transport_datafiles='/u01/app/oracle/oradata/EMREP/EMREP/TBS3.DBF'
导入操作
impdp
如果希望导入不报错 一定在导出的时候 把导出内容写详细 导入时 直接full=y
1、 REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选
项.
REMAP_DATAFIEL=source_datafie:target_datafile
2、 REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中.
REMAP_SCHEMA=source_schema:target_schema
3、 REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE=source_tablespace:target:tablespace
4、 REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件.默认为 N
REUSE_DATAFIELS={Y | N}
5、 SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引,默认为 N
6、 SQLFILE
指定将导入要指定的索引 DDL 操作写入到 SQL 脚本中
SQLFILE=[directory_object:]file_name
Impdp scott/tiger DIRECTORY=dump DUMPFILE=tab.dmp SQLFILE=a.sql
7、 STREAMS_CONFIGURATION
指定是否导入流元数据(Stream Matadata),默认值为 Y.
8、 TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作,默认为 SKIPTABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
当设置该选项为 SKIP 时,导入作业会跳过已存在表处理下一个对象;当设置为 APPEND 时,会
追加数据,为 TRUNCATE 时,导入作业会截断表,然后为其追加新数据;当设置为 REPLACE 时,
导入作业会删除已存在表,重建表病追加数据,注意,TRUNCATE 选项不适用与簇表和
NETWORK_LINK 选项
9、 TRANSFORM
该选项用于指定是否修改建立对象的 DDL 语句
TRANSFORM=transform_name:value[:object_type]
Transform_name 用于指定转换名,其中 SEGMENT_ATTRIBUTES 用于标识段属性(物理属
性,存储属性,表空间,日志等信息),STORAGE 用于标识段存储属性,VALUE 用于指定是否包含
段属性或段存储属性,object_type 用于指定对象类型.
Impdp scott/tiger directory=dump dumpfile=tab.dmp
Transform=segment_attributes:n:table
10、 TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件
TRANSPORT_DATAFILE=datafile_name
Datafile_name 用于指定被复制到目标数据库的数据文件
Impdp system/manager DIRECTORY=dump DUMPFILE=tts.dmp
TRANSPORT_DATAFILES='/user01/data/tbs1.f'调用 IMPDP
导入操作
remap_datafile remap_tablespace=users:example rempa_schema=hr:xkj
导入用户
PROD4
expdp system/oracle directory=my_dir dumpfile=exphr.dmp schemas=hr
EMREP
impdp system/oracle directory=d1 dumpfile=exphr.dmp
如果没有用户 会自动创建用户 并且用户各项属性与原数据库用户一致
impdp system/oracle directory=d1 dumpfile=exphr.dmp remap_schema=hr:bsr remap_tablespace=example:users
导入表
一定要注意 各项约束问题 主外键约束 唯一性约束等等
expdp system/oracle directory=my_dir dumpfile=hremp.dmp tables=hr.employees
impdp system/oracle directory=d1 dumpfile=hremp.dmp 表存在报错
impdp system/oracle directory=d1 dumpfile=hremp.dmp content=data_only 唯一性冲突
导入部分数据
vi imp.txt
userid=system/oracle
directory=d1
dumpfile=hremp.dmp
tables=hr.employees
content=data_only
QUERY=hr.employees:"WHERE department_id = 10"
impdp parfile=imp.txt
expdp
userid=system/oracle
directory=d1
dumpfile=hremp.dmp
tables=hr.sales
content=data_only
QUERY=hr.employees:"WHERE create_date = to_date('YYYY-MM-DD','2019-04-23')"
全库导入
impdp system/sys directory=my_dir dumpfile=exp01.dmp,exp02.dmp,exp03.dmp full=y
利用network_link参数实现网络导入导出
不产生转储文件 直接将一个数据库中的对象 导入到另一个数据库中
1.源端开启监听
2.目标端配置别名
3.目标端在数据库中配置db_link
create public database link p4_link connect to system identified by oracle using 'PROD4';
4.目标端进行导入
impdp system/oracle network_link=p4_link schemas=hr
将产生的转储文件 直接生成在客户端
1.源端开启监听
2.目标端配置别名
3.目标端在数据库中配置db_link
create public database link p4_link connect to system identified by oracle using 'PROD4';
4.目标端进行导出
expdp system/oracle network_link=p4_link directory=d11 dumpfile=hr.dmp tables=hr.employees,hr.departments
expdp system/oracle@prod4 directory=d1 dumpfile=hr.dmp tables=hr.employees,hr.departments