我生之初,尚无为;我生之后,逢此百罹。

Oracle数据泵不同用户导入导出(表级)

就数据泵而言,个人知道的导入导出方式有三种,分别是table、schema、以及full。

明显table<schema<full

 数据泵就是一个工具,那么使用工具时,只需要写一个文本文件来说明:

谁来使用这个工具(userid),

指定泵的位置(directory),

指定泵文件(dumpfile), 

保留使用数据泵过程的信息(logfile),

指定是full or schema or table;

 

大概就是这样,可以看到,并没有指定是导入还是导出。

假设写的文本文件名为:table.par,那么导出就是expdp parfile=table.par,导入就是impdp parfile=table.par

导出:指将数据库的信息导出到数据泵文件中。

导入:指将数据泵文件的信息导入到数据库中。

 

先认识一个单词,schema:模式。

再来了解一个概念。

当创建一个用户的时候,会同时创建一个与用户同名的schema,这个schema的官方解释是对象的集合。

举个例子,比如说我就是一个用户,叫A,住在某个公寓里,假如我住在4-404,那么这个4-404这个房间就是schema,房间名也叫A(意思是用户A的房间,在oracle里的意思是用户A的schema)。那么房间里面的东西就是对象了,比如说桌子,冰箱,床之类的。所以说schema是对象的集合。(个人理解,不对之处,还请指教)

 就一个集合,整这些,理解为一个包就行了,例如select * from 包名.对象名;

正如不同的包可能有同名的函数,不同的schema也可能有同名的对象名,也就是说,导出表时要指定schema(包名)。

同理,导入时也要指定数据泵文件的schema和指定导入用户的schema

指定数据泵文件的schema是在tables属性里指定的,在表前加上schema名即可,而导入用户的schema则是用remap_schema属性指定,比如说要将数据泵里scott的表导到sys里就是remap_schema=scott:sys

 

在使用数据泵前设定一个directory,就是存放数据泵文件的目录。

create directory data_dump as '/data_dump';

当然,也可以查看有哪些目录

select directory_name,directory_path from dba_directories;

 

下面来记一些参数

userid    说明使用的是哪个用户进行操作
directory     说明使用的是哪个逻辑目录(就是上面创建的那个)
dumpfile        导出后的文件名字
logfile            导出过程中的日志文件
tables            导出的表

 

下面是导出脚本及expdp

cat >exp_table.par<<EOF
userid=' / as sysdba'
directory=data_dump
dumpfile=exp_table_%u.dmp
logfile=exp_table.log
tables=(scott.temp,scott.tjy_test)
cluster=n
parallel=4
exclude=STATISTICS
compression=ALL
EOF

nohup expdp parfile=exp_table.par>exp_table.par.out &
tail -100f exp_table.par.out

对上面参数进行解释说明:

userid=' / as sydba'    说明用的是sys用户执行的数据泵操作

directory=data_dump    说明操作路径是data_dump(也就是上面创建的那个目录)

dumpfile=exp_table_%u.dmp  这里仅仅是说明导出后的文件命名,exp_表示这是导出的文件,table_表示表级操作,%u表示01-99的自动增长的整数,.dmp表示文件后缀

logfile=exp_table.log    跟上面的解释差不多。

tables=(scott.temp,scott.test)    说明要导出的是scott里的temp表和test表,注意这里的scott指的是schema,而不是username

其他的没什么好说的,想学自己百度。

 

 

下面是导入脚本及impdp

cat >imp_table.par<<EOF
userid=' / as sysdba'
directory=DATA_DUMP
dumpfile=exp_table_%u.dmp
logfile=imp_table.log
TABLE_EXISTS_ACTION=append
tables=(scott.temp,scott.test)
remap_schema=scott:sys
cluster=n
parallel=8
EOF

nohup impdp parfile=imp_table.par>imp_table.par.out &
tail -100f imp_table.par.out

 

导入跟导出的其实没多大改变,目录还是那个目录。

需要注意的是多了一行table_exists_action=append  这行表示在原有表的基础上添加要导入的数据。

还有一行是remap_schema=scott:sys    这里冒号左边指定数据泵文件的schema,冒号右边指定导入用户的schema。

 

posted @ 2022-07-18 20:36  舍旃  阅读(1200)  评论(0编辑  收藏  举报
我生之初,尚无造;我生之后,逢此百忧。