SQL> create directory dump_dir as '/home/oracle/oradata2/bak/dump';
SQL> grant read,write on directory dump_dir to scott;
# 查看 DIRECTORY 对象
SQL> col OWNER for a15
SQL> col DIRECTORY_NAME for a50
SQL> col DIRECTORY_PATH for a60
SQL> select * from dba_directories;
$ expdp scott/test2021 directory=dump_dir dumpfile=guo1.dmp tables=guo1
$ impdp scott/test2021 directory=dump_dir dumpfile=guo1.dmp tables=guo1
$ impdp system/test2021 directory=dump_dir dumpfile=guo1.dmp tables=scott.guo1 remap_schema=scott:test
$ expdp system/test2021 dumpfile=dump_dir:users_tbs_%u.dmp tablespaces=users filesize=50m parallel=2 logfile=user_tbs.log job_name=exp_user_tbs
# 恢复表空间(TABLE_EXITS_ACTION参数,它的默认值为SKIP即如果表已经存在则跳过。我们建议使用REPLACE或TRUNCATE,前者表示重建表,后者表示删除掉当前表中的数据,然后使用备份文件中的表数据进行加载,但是会跳过所有相关元数据)
$ impdp system/test2021 dumpfile=dump_dir:users_tbs_%u.dmp logfile=impdp_tab.log tablespaces=users table_exists_action=replace
$ expdp system/test2021 directory=dump_dir dumpfile=scott.dmp schemas=scott
$ impdp system/test2021 directory=dump_dir dumpfile=scott.dmp schemas=scott remap_schema=scott:test
$ expdp system/test2021 dumpfile=dump_dir:orcl_%u.dat filesize=50m nologfile=y job_name=test_expdp_orcl_db full=y
$ impdp system/test2021 dumpfile=dump_dir:orcl_%u.dat nologfile=y job_name=test_impdp_orcl_db full=y
$ expdp scott/test2021@//192.168.136.150:1521/orcl dumpfile=dump_dir:scott_table.dat tables=scott.emp,scott.dept nologfile=y job_name=scott_table
$ expdp scott/test2021@//192.168.136.150:1521/orcl directory=dump_dir dumpfile=scottschema.dmp logfile=scottschema.log
$ expdp system/test2021 dumpfile =dump_dir:mydb_dataonly_%u.dat filesize=100m job_name=expdp_data_only full=y content=data_only logfile =dump_dir:mydb_exp_dataonly_log
$ expdp system/test2021 full=y estimate_only=y estimate=statistics nologfile=y
$ expdp system/test2021 full=y estimate_only=y estimate=BLOCKS nologfile=y
# 导出
vi expdp.par
userid='/ as sysdba'
directory=dump_dir
dumpfile=ORCL_%U.dmp
filesize=5000M
compression=all
job_name=expdp_wc
parallel=4
full=y
expdp parfile=expdp.par
# 导入
vi impdp.par
userid='/ as sysdba'
directory=dump_dir
dumpfile=ORCL_%U.dmp
parallel=4
table_exists_action=replace
schemas=SCOTT
impdp parfile=impdp.par
vi expdp_backup.sh
#!/bin/sh
PATH=$PATH:$HOME/bin
myDate=$(date +%Y%m%d)
myDate2=`date -d "15 day ago" +%Y%m%d`
myDate3=`date -d "30 day ago" +%Y%m%d`
export PATH
export ORACLE_BASE=/u01/app
export ORACLE_HOME=$ORACLE_BASE/oracle
export ORACLE_SID=OA
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
export NLS_LANG=American_America.ZHS16GBK
expdp \"/as sysdba\" directory=data_pump_dir dumpfile=scott_${myDate}.dmp compression=all schemas=SCOTT
cd /u01/app/admin/ORCL/dpdump
rm -f /u01/app/admin/ORCL/dpdump/scott_${myDate2}.dmp
数据泵备份
# ATTACH:说明EXPDP附加到一个正在运行的现有的EXPDP作业。方式为ATTACH = JOB_NAME;
# CONTENT:说明要导出的数据是元数据还是数据,或者包括元数据和数据,选项包括ALL、DATA_ONLY和METADATA_ONLY。
# DIRECTORY:说明要导出的备份文件,日志文件和SQL文件的存储目录,此时必须事先创建该目录对象,当然可以将其他用户创建的目录对象赋予该当前用户。否则无法启动EXPDP程序。
# DUMPFILE:导出的备份文件的文件名,格式为FILENAME.DMP。
# ESTIMATE:计算EXPDP导出作业的导出文件的大小,选项包括基于BLOCKS或者基于STATISTICS,其中BLOCKS基于数据库块大小的倍数计算备份文件大小,而基于STATISTICS使用当前对象的统计量来计算到导出的备份文件的大小。
# ESTIMATE_ONLY:在EXPDP没有实际地导出作业时估计导出文件的大小,该参数的值为Y或N。
# EXCLUDE:排除不需要导出的特定对象类型,如EXCLUDE=TABLE:DEPT,对于任何不导出的对象,也不会导出与它有依赖关系的对象,如不导出表,也不会导出和表相关的任何索引、过程和约束等。
# FLASHBACK_SCN:允许在导出数据库时使用数据库闪回特性,此时EXPDP使用规定的SCN进行闪回。
# FULL:说明是否导出整个数据库对象,如果该参数为Y,说明导出数据库的所有对象。
# INCLUDE:说明要导出的特定对象类型,此时会导出该参数指定的对象和与它们有依赖关系的对象。
# JOB_NAME:为了便于管理运行的EXPDP作业设置当前作业的名字。系统默认的命名格式为sys_operation_mode_nn。如导出SCOTT用户的元数据,此时的作业名字为"SCOTT"."SYS_EXPORT_SCHEMA_01"。
# LOGFILE:说明在导出操作时记录导出过程的日志文件名,其默认名为export.log,和导出文件保存在相同的目录下,即directory参数指定的目录。
# PARALLEL:说明在导出作业时最大的线程数,实现导出作业的并行处理。也可以在作业运行总使用ATTACH改变并行度,PARALLEL参数的默认值为1,表示使用单线程导出单独个备份文件,如果设置多个工作线程,则要指定相同数量的备份文件,这样多个线程可以同时写多个备份文件。给出一个例子,设置并行度为2。
# QUERY:允许使用SQL语句程序过滤导出的数据,在Oracle11g中,允许使用表名限定SQL语句,使得SQL语句适用于特定的表,如下所示。QUERY=SCOTT.EMP:”WHERE SAL>3000”。说明表EMP中工资SAL大于3000的表被导出。
# SCHEMAS:说明要导出数据的模式,该模式列表可以有多个,使用逗号隔开,如果登录的用户不是导出数据的模式,则登录用户必须拥有exp_full_database的权限。
# STATUS:该参数在给定的时间间隔内给出作业的状态,该参数以秒为单位,默认值为0。
# TABLES:说明要导出数据库表的列表,此时也会导出与表有依赖关系的对象。
# TABLESPACES:说明要导出的数据库表空间的列表,同时会导出其他表空间中这些表空间中的表有依赖关系的所有对象。
# VERSION:说明要导出的数据库对象到特定版本的数据库。该参数很好的解决了数据库的对象从高版本迁移到低版本的数据库过程中的版本兼容问题。
# 交互式参数
# ADD_FILE:向导出备份文件集中增加文件以增加目录空间。如在一个作业运行期间输入CTRL+C组合键切换到交互式导出提示EXPORT>。如果该作业因为备份文件的空间不足导致停止,可以使用ADD_FILE命令增加文件到导出目录中。Export>add_file = data_dump_dir:expdata02.dmp;
# STOP_JOB:停止运行的数据泵作业,数据库服务器端的导出数据服务器进程终止。
# START_JOB:重新恢复由于某种意外导致停止的数据泵作业。
# KILL_JOB:杀死客户机进程和数据泵作业(服务器进程)。
# CONTINUE_CLIENT:退出交互方式(EXPORT方式)恢复正在运行地导出数据泵作业,实际的数据泵作业不受影响。
# EXIT_CLIENT:停止交互式会话并终止客户机会话,但是实际的数据泵作业不受影响,此时用户可以在当前窗口中继续其他操作
数据泵恢复参数
#(1)目录和文件相关参数
# DIRECTORY:说明备份文件、日志文件和SQL文件的目录对象,如果没有定义目录,则会使用PUMP_DIR的默认值。
# DUMPFILE:说明备份文件名,如导入数据时需要多个备份文件,则用逗号分隔这些文件名,在DUMPFILE参数后可以使用包括目录,如DUMFILE=PUMP_DIR:BACKUP.DMP,也可以使用替换变量(%U)告诉IMPDP可以使用多个备份文件。如DUMPFILE=PUMP_DIR:BACKUP_%U.DMP。
# PARFILE:说明参数文件,IMPDP使用外部定义一个参数文件执行导入行为,该参数文件是本地的,使用时需要告诉IMPDP参数文件的绝对位置。如 D:\IMPDP SYSTEM/ORACLE@ORCL PARFILE=D:\PAR\EXP.PAR
# LOGFILE:说明使用日志文件保存导入过程的信息,该参数的值是日志文件的名字名,如LOGFILE=MYLOG.LOG。
# NOLOGFILE:说明不使用日志文件记录导入过程,如NOLOGFILE=Y。
# SQLFILE:说明从备份文件中提取SQL的DDL语句,并写入该参数设置的文件中,如SQLFILE=PUMP_DIR:MYSQLFILE.SQL。该文件默认保存在DIRECTORY参数设置的目录对象中。
#(2)过滤参数
# INCLUDE:说明要导入的特定对象,如只导入表,此时会导入和导入特定对象有依赖关系的对象如索引、触发器等。使用INCLUDE参数的例子,说明只允许导入表对象,INCLUDE=TABLE: "IN (‘EMP’,’DEPT’)" ;也可以使用QUERY参数过滤要导入的表数据,此时数据泵导入作业使用外部表数据方法访问数据,而不是采用直接路径方法。如:INCLUDE=TABLE: "IN (‘EMP’,’DEPT’)" QUERY=EMP: "WHERE sal>3000 ORDER BY sal"
# TABLE_EXISTS_ACTION:该参数说明当导入的表已经存在时,IMPDP导入程序的行为,参数TABLE_EXISTS_ACTION有四个值,SKIP表示如果该表存在则跳过该表,它是默认值;APPEND将导入的数据行附加到当前存在的表中;TRUNCATE截断表并从导入数据文件中重新装载数据;REPLACE删除存在的表然后重建该表并导入数据。
# EXCLUDE:在导入操作中排除特定的元数据,如不导入特定的表,此时也不会导入和排除对象有依赖关系的其他对象。如下所示告诉IMPDP程序不导入表EMP和DEPT。
# (3)导入作业参数
# JOB_NAME:说明导入作业名,IMPDP提供了很多可管理性如停止作业和恢复作业,附加(ATTACH)到特定的作业,都需要作业名来关联导入作业。
# PRALLEL:说明当前导入作业的线程数。该值的默认值为1。
# STATUS:监视导入作业的状态频率,该参数的默认值为0
# (4)导入方式参数
# TABLES:说明允许导入指定的表,如果有多个表使用逗号分隔开,同时也导入与这些表有依赖关系的对象,如索引、触发器和函数等。
# SCHEMAS:说明要导入的模式列表,要使用该参数登录数据库的用户必须拥有imp_full_database的权限。
# TABLESPACES:说明要导入的表空间的列表,在导入这些表空间的同时也要求导入与表空间有依赖关系的所有数据库对象。
# FULL:说明要导入整个数据库。该参数的默认值为n。
# (5)重新映射参数,重新映射使得在数据导入过程中将数据从一个数据库对象移动到另一个数据库对象,可以映射模式,映射数据文件和映射表空间,映射可以理解为“数据对象移动”。
# REMAP_SCHEMA:重新映射模式,可以将对象从一个模式移动到另一个模式,D:\>impdp system/oracle@orcl dumpfile =pump_dir:SHCEMA_SCOTT.DMP remap_schema=scott:linzi 。将SCOTT模式下的所有数据库对象移动到LINZI模式下,这样使用LINZI模式登录数据库,就可以使用SCOTT用户的所有数据库对象。
# REMAP_DATAFILE:在导入数据时,重新定义数据文件的名称和目录。如下所示。D:\impdp system/oracle@orcl directory=pump_dir dumpfile=backup_full.dmp remap_datafile='c:\mydb.dbf':'d:\mydb\newdb.dbf
# REMAP_TABLESPACE:重映射表空间使得将数据对象从一个表空间移动到另一个表空间。如 D:\impdp system/oracle@orcl remap_tablespace='users':'mynewusers' directory=pump_dir dumpfile=backup_full.dmp
# (6)转换参数
# TRANSFORM:该参数说明在导入数据泵作业时可以选择导入某个对象的存储参数或其他属性值,如导入表时,不导入该表的存储属性等。TRANSFORM参数的语法如所示:TRANSFORM= transform_name:value[:object_type]
# 下面我们介绍各个部分
# 1、transform_name:转换名由四个选项组成,代表四种基本的对象特征。其中SEGMENT_ATTRIBUTES段属性包括物理属性、存储参数、表空间等,该参数的值为Y或N,如果选择SETMENT_ATTRIBUTES=Y则说明导入作业包括对象的这些属性;STORAGE存储属性说明是否导入对象的存储属性,如果STORAGE=Y说明对象的存储属性作为导入作业的一部分。OID说明是否分配新的OID给对象表。PCTSPACE:提供一个正数值,可以增加对象的分配尺寸。
# 2、value:转换名的值中前三个值即SEGMENT_ATTRIBUTES、STORAGE和OID默认值为Y,说明默认数据泵导入对象的存储属性,和段属性。而PCTSPACE取一个正数值。
# 3、object_type:对象类型说明需要转换那些类型的对象,这些类型包括表、索引、表空间以及约束等。
#(7)闪回参数
# FLASHBACK_SCN:使用Oracle的闪回特性,允许导入和闪回SCN接近的数据。
# FLASHBACK_TIME:使用Oracle的闪回特性,允许导入和指定闪回时间接近的数据。
#(8)与可移植表空间有关的参数
# Oracle的可移植表空间使得将数据从一个数据库移动到另一个数据库非常容易,可以方便的将一个数据库表空间中的数据迁移到其他数据库中的表空间中。
# TRANSPORT_TABLESPACES:说明要迁移的表空间列表。
# TRANSPORT_FULL_CHECK:迁移表空间时,检查迁移表空间内的对象与迁移表空间外的对象是否有依赖性,该参数只有在使用NETWORK_LINK参数时才有效。
# TRANSPORT_DATAFILES:在执行表空间导入时,目标数据库将使用源数据库中拷贝过来的数据文件作为可以移植表空间的数据文件。该参数说明数据文件名。
#(9)交互模式参数
# 数据泵导入的交互参数和数据泵导出的交互参数功能是一样的,在数据泵导入参数中没有ADD_FILE参数,它只对数据泵导出程序有效,而其他参数以及切换到交互模式数据泵导入与导出是一样的。
# PARALLEL:说明当前作业的活跃WORKER数量。
# CONTINUE_CLIENT:在切换到交互模式后,返回记录模式。
# EXIT_CLIENT:退出客户登录模式,但是不终止导入作业。
# KILL_JOB:分离或删除当前导入作业。
# START_JOB:在导入作业被意外终止后,可以重启或恢复当前作业。
# STATUS:监视当前导入作业的状态,该参数是一个整数值,默认值为0,如果设置STATUS=5,说明每5秒钟刷新一次导入作业的状态信息。
# STOP_JOB:关闭当前执行的作业并退出客户端,如果有多个导入作业,则顺序关闭这些作业。如果设置STOP_JOB=IMMEDIATE将立即关闭数据泵作业。