ORACLE导入导出实验

导出导入实验:

生产上 导出操作 一定要单独去记录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

相关推荐
执笔为剑2 小时前
利用逻辑备份修复误操作的库
数据库·kingbase
程序员夏末2 小时前
【MySQL | 第三篇】 MySQL索引详解
数据库·mysql
leoZ2312 小时前
innodb理解
数据库
NaMM CHIN3 小时前
SQL sever数据导入导出实验
数据库·sql·oracle
山峰哥3 小时前
告别“点点点”:AI 如何重构我们的测试体系与质量防线
服务器·汇编·数据库·人工智能·性能优化·重构
shark22222224 小时前
MySQL 与 Redis 的数据一致性问题
数据库·redis·mysql
Elastic 中国社区官方博客4 小时前
LINQ 到 ES|QL:使用 C# 查询 Elasticsearch
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索·linq
Code-Porter4 小时前
记录关于Flutter ObjectBox数据库使用ObjectBoxBrowser插件,在同一个局域网内电脑无法访问查看数据问题
android·数据库·flutter·dart
AI精钢4 小时前
什么是面向 Agent 的 LLM?从 Qwen3.6-Plus 看大模型的新分水岭
网络·数据库·人工智能·云原生·aigc