一、为何选择数据泵方式

相对于exp/imp方式,数据泵(expdp/impdp)更快,且能导出空表;相对于rman、dg等方式,数据泵操作更加简单。此外,在数据量不大、可停库的情况下,数据泵方式是可以保证数据的完整性的。

备注:exp/imp与expdp/impdp的区别

1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在Oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
4、对于10g以上的服务器,使用exp通常不能导出0行数据的空表,而此时必须使用expdp导出。

二、准备工作

若有必要,需要在新库上建立必要的表空间、用户(并赋权)、数据备份目录,源库上创建数据备份目录等。

1、目标新库上的操作

(1)创建临时表空间

create temporary tablespace 用户临时表空间名称
tempfile '/u01/tablespaces/user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

备注:根据实际情况调整表空间大小等参数以及规划临时表空间、回滚表空间等相关规划。

(2)创建数据表空间

create tablespace 用户表空间名称
datafile '/u01/tablespaces/user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

(3)建立用户,并指定默认表空间

create user 用户名称 identified by 密码
default tablespace 用户表空间名称
temporary tablespace 用户临时表空间名称;

(4)给用户授予权限

grant connect,resource to 用户名1;
grant create database link to 用户名;

注意:赋权给多个用户的情况下,各个用户名称间用,分隔即可。

(5)登录需要创建dblink的用户,创建dblink

CREATE DATABASE LINK DBLink名称
CONNECT TO 用户 IDENTIFIED BY 密码
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 实例名)))';

注意:创建DBLINK默认是用户级别的,对当前用户有效。只有当需要对所有用户有效时,再建立公有的DBlink对象(pulic参数)。

关于DBlink的知识点,参考:Oracle--dblink使用 http://www.cnblogs.com/chinas/p/6973058.html

2、创建数据备份目录(源库和目标库)

备份目录需要使用操作系统用户创建一个真实的目录,然后登录oracle dba用户,创建逻辑目录,指向该路径。这样oracle才能识别这个备份目录。

(1)在操作系统上建立真实的目录

$ mkdir -p /u01/app/oracle/bankup

(2)登录oracle管理员用户

$ sqlplus /nolog
SQL> conn /as sysdba

(3)创建逻辑目录

SQL> create directory auto_bankup as '/u01/app/oracle/bankup';

查看目录是否已经创建成功:

SQL> select * from dba_directories;

5、用sys管理员给指定用户赋予在该目录的操作权限

SQL> grant read,write on directory data_dir to user;
SQL> grant read,write on directory data_dir to user1,user2;

三、导入导出

1、expdp导出

确保已经创建数据备份路径,若没有则按照准备工作中的说明进行创建。(注意:若CPU资源充足强烈推荐开启并行参数,可以大大节省导入、导出的时间)

第一种:“full=y”,全量导出数据库:

expdp user/passwd@orcl dumpfile=expdp.dmp directory=data_dir full=y logfile=expdp.log;

第二种:schemas按用户导出:

expdp user/passwd@orcl schemas=user dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第三种:按表空间导出:

expdp sys/passwd@orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第四种:导出表:

expdp user/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

第五种:按查询条件导:

expdp user/passwd@orcl tables=table1='where number=1234' dumpfile=expdp.dmp directory=data_dir logfile=expdp.log;

2、impdp导入

注意:

  (1)确保数据库软件安装正确,字符集、数据库版本等与源库一致,尽量此类因素引起的失败。

  (2)确保数据库备份目录已提前建好,若没有,参考前面的说明建立该目录。

  (3)提前将源库导出的数据文件传递到目标库的备份目录下,并确保导入时的数据库用户对该文件有操作权限。

第一种:“full=y”,全量导入数据库;

impdp user/passwd directory=data_dir dumpfile=expdp.dmp full=y;

第二种:同名用户导入,从用户A导入到用户A;

impdp A/passwd schemas=A directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;   

第三种:
a.从A用户中把表table1和table2导入到B用户中;

impdp B/passwdtables=A.table1,A.table2 remap_schema=A:B directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;

b.将表空间TBS01、TBS02、TBS03导入到表空间A_TBS,将用户B的数据导入到A,并生成新的oid防止冲突;

impdp A/passwdremap_tablespace=TBS01:A_TBS,TBS02:A_TBS,TBS03:A_TBS remap_schema=B:A FULL=Y transform=oid:n
directory=data_dir dumpfile=expdp.dmp logfile=impdp.log

第四种:导入表空间;

impdp sys/passwd tablespaces=tbs1 directory=data_dir dumpfile=expdp.dmp logfile=impdp.log;

第五种:追加数据;

impdp sys/passwd directory=data_dir dumpfile=expdp.dmp schemas=system table_exists_action=replace logfile=impdp.log; 

--table_exists_action:导入对象已存在时执行的操作。有效关键字:SKIP,APPEND,REPLACE和TRUNCATE

四、参数说明

1、expdb

(1)关键字及其说明

 ATTACH                连接到现有作业, 例如 ATTACH [=作业名]。

 COMPRESSION               减小转储文件内容的大小, 其中有效关键字  值为: ALL, (METADATA_ONLY), DATA_ONLY 和 NONE。

 CONTENT                指定要卸载的数据, 其中有效关键字  值为: (ALL), DATA_ONLY 和 METADATA_ONLY。

 DATA_OPTIONS             数据层标记, 其中唯一有效的值为: 使用CLOB格式的 XML_CLOBS-write XML 数据类型。

 DIRECTORY               供转储文件和日志文件使用的目录对象,即逻辑目录。

 DUMPFILE               目标转储文件 (expdp.dmp) 的列表,例如 DUMPFILE=expdp1.dmp, expdp2.dmp。

 ENCRYPTION               加密部分或全部转储文件, 其中有效关键字值为: ALL, DATA_ONLY, METADATA_ONLY,ENCRYPTED_COLUMNS_ONLY 或 NONE。

 ENCRYPTION_ALGORITHM        指定应如何完成加密, 其中有效关键字值为: (AES128), AES192 和 AES256。

 ENCRYPTION_MODE           生成加密密钥的方法, 其中有效关键字值为: DUAL, PASSWORD 和 (TRANSPARENT)。

 ENCRYPTION_PASSWORD         用于创建加密列数据的口令关键字。

 ESTIMATE               计算作业估计值, 其中有效关键字值为: (BLOCKS) 和 STATISTICS。

 ESTIMATE_ONLY            在不执行导出的情况下计算作业估计值。

 EXCLUDE                排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。例:EXCLUDE=[object_type]:[name_clause],[object_type]:[name_clause] 。

 FILESIZE               以字节为单位指定每个转储文件的大小。

 FLASHBACK_SCN            用于将会话快照设置回以前状态的 SCN。 -- 指定导出特定SCN时刻的表数据。

 FLASHBACK_TIME           用于获取最接近指定时间的 SCN 的时间。-- 定导出特定时间点的表数据,注意FLASHBACK_SCN和FLASHBACK_TIME不能同时使用。

  FULL                  导出整个数据库 (N)。  

 HELP                  显示帮助消息 (N)。

 INCLUDE                包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。

 JOB_NAME                 要创建的导出作业的名称。

 LOGFILE                日志文件名 (export.log)。

 NETWORK_LINK             链接到源系统的远程数据库的名称。

 NOLOGFILE              不写入日志文件 (N)。

 PARALLEL                更改当前作业的活动 worker 的数目。

 PARFILE                指定参数文件。

 QUERY                  用于导出表的子集的谓词子句。--QUERY = [schema.][table_name:] query_clause。

 REMAP_DATA               指定数据转换函数,例如 REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。

 REUSE_DUMPFILES           覆盖目标转储文件 (如果文件存在) (N)。

 SAMPLE                  要导出的数据的百分比。

 SCHEMAS                要导出的方案的列表 (登录方案)。  

 STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,要监视的频率 (以秒计) 作业状态。  

 TABLES                 标识要导出的表的列表 - 只有一个方案。--[schema_name.]table_name[:partition_name][,…]

 TABLESPACES              标识要导出的表空间的列表。

 TRANSPORTABLE             指定是否可以使用可传输方法, 其中有效关键字值为: ALWAYS, (NEVER)。

 TRANSPORT_FULL_CHECK         验证所有表的存储段 (N)。 

 TRANSPORT_TABLESPACES         要从中卸载元数据的表空间的列表。

 VERSION                要导出的对象的版本, 其中有效关键字为:(COMPATIBLE), LATEST 或任何有效的数据库版本。

(2)命令及说明

 ADD_FILE               向转储文件集中添加转储文件。

 CONTINUE_CLIENT           返回到记录模式。如果处于空闲状态, 将重新启动作业。

 EXIT_CLIENT             退出客户机会话并使作业处于运行状态。

 FILESIZE               后续 ADD_FILE 命令的默认文件大小 (字节)。

 HELP                 总结交互命令。

 KILL_JOB               分离和删除作业。

 PARALLEL                更改当前作业的活动 worker 的数目。PARALLEL=<worker 的数目>。

 _DUMPFILES               覆盖目标转储文件 (如果文件存在) (N)。

 START_JOB                启动/恢复当前作业。

 STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,要监视的频率 (以秒计) 作业状态。STATUS[=interval]。

 STOP_JOB                顺序关闭执行的作业并退出客户机。STOP_JOB=IMMEDIATE 将立即关闭数据泵作业。

2、impdb

(1)关键字及说明

ATTACH                         连接到现有作业, 例如 ATTACH [=作业名]。

CONTENT                     指定要卸载的数据, 其中有效关键字  值为: (ALL), DATA_ONLY 和 METADATA_ONLY。

DATA_OPTIONS                  数据层标记,其中唯一有效的值为:SKIP_CONSTRAINT_ERRORS-约束条件错误不严重。

DIRECTORY                  供转储文件,日志文件和sql文件使用的目录对象,即逻辑目录。

DUMPFILE                   要从(expdp.dmp)中导入的转储文件的列表,例如 DUMPFILE=expdp1.dmp, expdp2.dmp。

 ENCRYPTION_PASSWORD            用于访问加密列数据的口令关键字。此参数对网络导入作业无效。

 ESTIMATE                  计算作业估计值, 其中有效关键字为:(BLOCKS)和STATISTICS。

 EXCLUDE                   排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。

 FLASHBACK_SCN               用于将会话快照设置回以前状态的 SCN。

 FLASHBACK_TIME               用于获取最接近指定时间的 SCN 的时间。

 FULL                     从源导入全部对象(Y)。
  
HELP                     显示帮助消息(N)。 INCLUDE                   包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。 JOB_NAME                   要创建的导入作业的名称。 LOGFILE                   日志文件名(import.log)。 NETWORK_LINK                链接到源系统的远程数据库的名称。 NOLOGFILE                  不写入日志文件。   PARALLEL                  更改当前作业的活动worker的数目。 PARFILE                   指定参数文件。 PARTITION_OPTIONS             指定应如何转换分区,其中有效关键字为:DEPARTITION,MERGE和(NONE)。 QUERY                    用于导入表的子集的谓词子句。 REMAP_DATA                 指定数据转换函数,例如REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。 REMAP_DATAFILE              在所有DDL语句中重新定义数据文件引用。 REMAP_SCHEMA                将一个方案中的对象加载到另一个方案。 REMAP_TABLE                表名重新映射到另一个表,例如 REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。 REMAP_TABLESPACE             将表空间对象重新映射到另一个表空间。 REUSE_DATAFILES               如果表空间已存在, 则将其初始化 (N)。 SCHEMAS                  要导入的方案的列表。 SKIP_UNUSABLE_INDEXES          跳过设置为无用索引状态的索引。 SQLFILE                  将所有的 SQL DDL 写入指定的文件。 STATUS                   在默认值(0)将显示可用时的新状态的情况下,要监视的频率(以秒计)作业状态。   STREAMS_CONFIGURATION          启用流元数据的加载。 TABLE_EXISTS_ACTION            导入对象已存在时执行的操作。有效关键字:(SKIP),APPEND,REPLACE和TRUNCATE。 TABLES                   标识要导入的表的列表。 TABLESPACES                标识要导入的表空间的列表。  TRANSFORM                 要应用于适用对象的元数据转换。有效转换关键字为:SEGMENT_ATTRIBUTES,STORAGE,OID和PCTSPACE。 TRANSPORTABLE               用于选择可传输数据移动的选项。有效关键字为: ALWAYS 和 (NEVER)。仅在 NETWORK_LINK 模式导入操作中有效。 TRANSPORT_DATAFILES            按可传输模式导入的数据文件的列表。 TRANSPORT_FULL_CHECK           验证所有表的存储段 (N)。 TRANSPORT_TABLESPACES          要从中加载元数据的表空间的列表。仅在 NETWORK_LINK 模式导入操作中有效。 VERSION                  要导出的对象的版本, 其中有效关键字为:(COMPATIBLE), LATEST 或任何有效的数据库版本。仅对 NETWORK_LINK 和 SQLFILE 有效。

(2)命令及说明

 CONTINUE_CLIENT          返回到记录模式。如果处于空闲状态, 将重新启动作业。

 EXIT_CLIENT            退出客户机会话并使作业处于运行状态。

 HELP                 总结交互命令。

 KILL_JOB              分离和删除作业。

 PARALLEL              更改当前作业的活动 worker 的数目。PARALLEL=<worker 的数目>。

 START_JOB              启动/恢复当前作业。START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业停止时执行的任意操作。

 STATUS               在默认值 (0) 将显示可用时的新状态的情况下,要监视的频率 (以秒计) 作业状态。STATUS[=interval]。

 STOP_JOB              顺序关闭执行的作业并退出客户机。STOP_JOB=IMMEDIATE 将立即关闭数据泵作业。

五、错误及处理

1、ORA-39112

导出正常,导入数据时,只成功导入部分记录等数据,另外的部分提数ora 39112错误,经查是因为导出的用户数据中,有部分记录的表用的索引在另一表空间中,该空间还未创建,所以导致该失败。

解决方法:在导入时,添加参数:RANSFORM=segment_attributes:n ,配合table_exists_action=replace参数,重新导入即可。

RANSFORM=segment_attributes:n 在导入时,会将数据导入默认的表空间中。

补充,造成该问题的可能原因:

1、在原来测试库中,目标schema和别的用户相互授权了,可是你导出的dmp中没有包含所有的用户,导入时对应用户没有创建。
2、再就是,表空间问题,测试库中的用户下的某个表的索引没有在他的默认表空间里,这样你要在目标端(这里就是生产环境),创建好对应的表空间,
就是说如果你在测试库把a用户的下的某个表的权限授给了b,那么你在把a用户用数据泵倒进生产库时,他会在生产库中检测有没有用户b。也要做相同的操作。

2、ORA-39346

导入过程中,遇到错误"  ORA-39346: data loss in character set conversion for object SCHEMA_EXPORT/PROCEDURE/PROCEDURE  "

oracle官方的描述如下:

Description: data loss in character set conversion for object string
Cause: Oracle Data Pump import converted a metadata object from the export database character set into the target database character set prior to processing the object. Some characters could not be converted to the target database character set and so the default replacement character was used.
Action: No specific user action is required. This type of data loss can occur if the target database character set is not a superset of the export databases character set.

六、一键脚本

由于旧库和新库的网段不一样,所以不是一键迁移脚本,而是先导出、导入操作分开进行的。自己写了个脚本,减少重复劳动,有需要的同学可以参考下

#!/bin/bash
#############################################################################
#脚本功能:
#脚本路径:
#使用方法:脚本名称 操作类型参数
#############################################################################
export NLS_LANG=american_america.AL32UTF8
export ORACLE_HOME=/u01/app/oracle/product/12.1./db_1
export ORACLE_SID=cyrtestdb
export PATH=$PATH:$ORACLE_HOME/bin:/usr/bin:/usr/local/bin:/bin:/usr/bin/X11:/usr/local/bin:. v_date=`date +%Y%m%d`
v_logfile=`echo $(basename $) | awk -F "." '{print $1".log"}'` #日志文件名称:脚本所在目录下,脚本名称.log v_usr_1="" #Oracle用户名、密码
v_pwd_1=""
v_usr_2=""
v_pwd_2=""
v_db_instance="" #数据库实例名 v_backup_dir="" #Oracle备份目录(全局变量)
v_oradir_name="" #
v_tmp_space1="" #临时表空间、表空间、索引表空间
v_tmp_space2=""
v_space1=""
v_space2=""
v_idx_space1=""
v_idx_space2=""
v_max_size="5120m" #表空间数据文件最大值
v_dblink="" #dblink名称 #记录日志
record_log(){
echo -e `date '+%Y-%m-%d %H:%M:%S'` $ | tee -a ${v_logfile}
} #用户数据导出
exp_usrdata(){
v_exp_usr=$
v_exp_pwd=$
v_oradir_name=$
cd ${v_backup_dir}
[[ -f ${v_exp_usr}"_"${v_date}".dmp" ]] && rm -rf ${v_exp_usr}"_"${v_date}".dmp"
expdp ${v_exp_usr}/${v_exp_pwd} DIRECTORY=${v_oradir_name} DUMPFILE=${v_exp_usr}"_"${v_date}".dmp" SCHEMAS=${v_exp_usr} LOGFILE=${v_exp_usr}"_"${v_date}".log"
} #在目标库上创建数据库备份目录
create_bankup_dir(){
#创建操作系统物理路径
[[ -d ${v_backup_dir} ]] && mkdir -p ${v_backup_dir} sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
spool tmp_space_flag.tmp
grant read,write on directory '${v_oradir_name}' to '${v_usr_1}','${v_usr_2}';
spool off
exit;
EOF
##如果当前表空间不存在,则创建,否则退出当前函数
if [[ `grep ${v_oradir_name} tmp_space_flag.tmp | wc -l` -eq ]]; then
record_log "创建备份目录"$"开始"
sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
grant read,write on directory '${v_oradir_name}' to '${v_usr_1}','${v_usr_2}';
exit;
EOF
record_log "创建备份目录"$"结束"
else
record_log "创建备份目录"$"已存在"
return
fi
##注意清理临时标志文件
[[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp
} #创建表空间
create_space(){
v_space_name=$
#判断表空间类型(临时表空间或普通表空间)
if [[ `grep TMP $` -eq ]]; then
v_space_type="temporary"
else
v_space_type=""
fi
sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
create '${v_space_type}' tablespace '${v_space_name}' tempfile '${v_backup_dir}/${v_space_name}.dbf' size 50m autoextend on next 128k maxsize '${v_max_size}' extent management local;
exit;
EOF
} #判断表空间是否存在,若表空间不存在则创建
deal_spaces(){
v_space_name=$
sqlplus -S / as sysdba <<EOF
set heading off feedback off verify off
spool tmp_space_flag.tmp
select tablespace_name from dba_tablespaces where tablespace_name='${v_space_name}';
spool off
exit;
EOF
##如果当前表空间不存在,则创建,否则退出当前函数
if [[ `grep ${v_space_name} tmp_space_flag.tmp | wc -l` -eq ]]; then
record_log "创建表空间"$"开始"
create_space ${v_space_name}
record_log "创建表空间"$"结束"
else
record_log "表空间"$"已存在"
return
fi
##注意清理临时标志文件
[[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp } #在目标库上创建用户并赋权
create_usrs(){
v_create_usr=$ #参数1:用户名
v_create_pwd=$ #参数2:密码
v_create_tmp_space=$ #参数3:临时表空间名称
v_create_space=$ #参数4:表空间名称 sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
create user '${v_create_usr}' identified by '${v_create_pwd}' default tablespace '${v_create_space}' temporary tablespace '${v_create_tmp_space}';
grant connect,resource to '${v_create_usr}';
grant exp_full_database to '${v_create_usr}';
grant imp_full_database to '${v_create_usr}';
grant unlimited tablespace to '${v_create_usr}';
exit;
EOF
} #用户数据导入
imp_usrdata(){
v_imp_usr=$
v_imp_pwd=$
v_oradir_name=$
impdp ${v_imp_usr}/${v_imp_pwd} DIRECTORY=${v_oradir_name} DUMPFILE=${v_imp_usr}"_"${v_date}".dmp" SCHEMAS=${v_imp_usr} LOGFILE=${v_imp_usr}"_"${v_date}".log" table_exists_action=replace RANSFORM=segment_attributes:n
} #删除用户
drop_user(){
v_drop_usr=$
#删除用户及用户下的所有数据,删除表空间及表空间下的所有数据
sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
drop user '${v_drop_usr}' cascade;
exit
EOF
} #删除表空间并删除表空间下的数据文件
drop_tablespace(){
v_drop_space=$
#删除用户及用户下的所有数据,删除表空间及表空间下的所有数据
sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
drop tablespace '${v_drop_space}' including contents and datafiles;
exit
EOF
##操作系统上表空间下的数据文件
[[ -f ${v_backup_dir}/${v_drop_space}.dbf ]] && rm -rf ${v_backup_dir}/${v_drop_space}.dbf
} #创建dblink
create_dblink(){
v_clink_usr=$
v_clink_pwd=$ #以管理员身份对创建dblink赋权
sqlplus -S / as sysdba >> ${v_logfile} <<EOF
set heading off feedback off verify off
grant create database link to '${v_clink_usr}';
exit;
EOF
#以普通用户登录创建dblink
sqlplus -S ${v_clink_usr}/${v_clink_pwd}@${v_db_instance} >> ${v_logfile} <<EOF
set heading off feedback off verify off
CREATE DATABASE LINK ${v_dblink} CONNECT TO '${v_clink_usr}' IDENTIFIED BY '${v_clink_pwd}' USING '{v_db_instance}';
exit
EOF
} #判断dblink是否存在
deal_dblink(){
v_link=$
v_link_usr=$
v_link_pwd=$
sqlplus -S / as sysdba <<EOF
set heading off feedback off verify off
spool tmp_space_flag.tmp
select object_name from dba_objects where object_name = '${v_link}';
spool off
exit;
EOF
##如果当前dblink不存在,则创建,否则退出当前函数
if [[ `grep ${v_space_name} tmp_space_flag.tmp | wc -l` -eq ]]; then
record_log "创建"$"开始"
create_dblink ${v_link_usr} ${v_link_pwd}
record_log "创建"$"结束"
else
record_log $"已存在"
return
fi
##注意清理临时标志文件
[[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp
} #主函数
main(){
v_start=`date +%s`
if [[ $ -eq "exp" ]]; then
record_log "bl库导出开始..."
exp_usrdata ${v_usr_1} ${v_pwd_1} ${v_oradir_name}
record_log "bl库导出结束..." record_log "hx库导出开始..."
exp_usrdata ${v_usr_2} ${v_pwd_2} ${v_oradir_name}
record_log "hx库导出结束..."
elif [[ $ -eq "pre" ]]; then
#、创建备份目录
create_bankup_dir
#、创建表空间
for v_sp in ${v_tmp_space1} ${v_tmp_space2} ${v_space1} ${v_space2} ${v_idx_space1} ${v_idx_space2}; do
deal_spaces ${v_sp}
done
#、创建用户、赋权
record_log "创建用户开始..."
create_usrs ${v_usr_1} ${v_pwd_1} ${v_tmp_space1} ${v_space1}
create_usrs ${v_usr_2} ${v_pwd_2} ${v_tmp_space2} ${v_space2}
record_log "创建用户结束..."
#、为hx库创建dblink
record_log "创建dblink开始..."
deal_dblink ${v_dblink} ${v_usr_2} ${v_pwd_2}
record_log "创建dblink结束..." elif [[ $ -eq "imp" ]]; then
record_log "bl库导入开始..."
imp_usrdata ${v_usr_1} ${v_pwd_1} ${v_oradir_name}
record_log "bl库导入结束..." record_log "hx库导入开始..."
imp_usrdata ${v_usr_2} ${v_pwd_2} ${v_oradir_name}
record_log "hx库导入结束..."
elif [[ $ -eq "clean" ]]; then
read -t -p "确认清除 0-否 1-是" v_num
if [[ ${v_num} -eq ]]; then
record_log "清理数据文件开始..."
for m in ${} ${}; do
drop_user ${m}
done
for n in ${v_tmp_space1} ${v_tmp_space2} ${v_space1} ${v_space2} ${v_idx_space1} ${v_idx_space2}; do
drop_tablespace ${n}
done
record_log "清理数据文件结束..."
else
exit
fi
else
echo "Usage: sh script [exp|clean|pre|imp]"
exit
fi
v_end=`date +%s`
v_use_time=$[ v_end - v_start ]
record_log "本次脚本运行时间:"${v_use_time}"秒"
}
main

参考文档

Oracle使用EXPDP和IMPDP数据泵进行导出导入方法_数据库技术  http://www.linuxidc.com/Linux/2017-09/146764.htm

ORA-39112: dependent object type comment skipped - CSDN博客  http://blog.csdn.net/zhengwei125/article/details/53670656

Oracle 12cR1 ORA-39346 data loss in character set conversion for object string  https://www.oraexcel.com/oracle-12cR1-ORA-39346

从11.2.0.4倒入12c报错:ORA-39346 - Oracle 12c 重庆思庄Oracle论坛  http://bbs.cqsztech.com/forum.php?mod=viewthread&tid=17282

Oracle-数据泵使用的更多相关文章

  1. Oracle数据泵(Data Dump)错误汇集

    Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例,下面总结一些自己使用数据泵(Data Dump)过程当中遇到的问题以及解决方法.都是在使用过程中遇到的问题,以后陆 ...

  2. oracle表分区、表分析及oracle数据泵文件导入导出开心版

    1.先说oracle表分区是什么吧,这样吧我们来举个桃子,栗子太小,我们就不举了,我们来举个桃子. 你有500万份文件,你要把他存在磁盘上,好嘛,我们就一个文件夹,500万分文件在那儿杵着,我们想找到 ...

  3. Oracle 数据泵导入导出总结

    Oracle 数据泵(IMPDP/EXPDP)导入导出总结 Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常 ...

  4. oracle表分区、表分析及oracle数据泵文件导入导出

    1.先说oracle表分区是什么吧 你有500万份文件,你要把他存在磁盘上,好嘛,我们就一个文件夹,500万分文件在那儿杵着,我们想找到要的那个打开,嘿嘿,我们得找到什么时候. 这时候,有个人告诉你, ...

  5. Oracle 数据泵(IMPDP/EXPDP)导入导出总结

    Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常运维的数据库对象少则几千,多则几万甚至几十万,所以传统exp ...

  6. Oracle数据泵导出使用并行参数,单个表能否真正的并行?

    对于Oracle 数据泵expdp,impdp是一种逻辑导出导入迁移数据的一个工具,是服务端的工具,常见于DBA人员使用,用于数据迁移.从A库迁移至B库,或者从A用户迁移至B用户等. 那么有个疑问? ...

  7. ORACLE 数据泵 expdp/impdp

    ORACLE 数据泵 expdp/impdp 一.概念 Oracle Database 10g 引入了最新的数据泵(Data Dump)技术,数据泵导出导入 (EXPDP 和 IMPDP)的作用: 1 ...

  8. Oracle数据泵的导入和导出

    前言 今天王子要分享的内容是关于Oracle的一个实战内容,Oracle的数据泵. 网上有很多关于此的内容,但很多都是复制粘贴别人的,导致很多小伙伴想要使用的时候不能直接上手,所以这篇文章一定能让你更 ...

  9. Oracle数据泵导出数据库

    Oracle数据泵导出数据库 特别注意:如果后续要导入的数据库版本低,所有导出命令就需要在后面加一个version=指定版本. 例如从11g导出数据导入到10g,假设10g具体版本为10.2.0.1, ...

  10. Oracle数据泵导入的时候创建索引是否会使用并行?

    一.疑问,Oracle数据泵导入的时候创建索引是否会使用并行? 某客户需要使用数据泵进行迁移,客户咨询导入的时间能不能加快一点. 那么如何加快导入的速度呢? 多加一些并行,那么创建索引内部的索引并行度 ...

随机推荐

  1. Java之静态代码块

    有一些情况下,有些代码需要在项目启动的时候就执行,则需要使用静态代码块,这种代码是主动执行的.Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次.如果static代码块有多个,JV ...

  2. Lodop代码设置打印机等信息后 设置预览可重选

    Lodop打印控件默认在代码里指定了打印.纸张.纸张方向.份数等信息,在预览的界面的设置里是无法重新选择的,默认是禁止重选的,如果重选会提示,例如:“打印方向”已由程序控制,无法改变!“纸张大小”已由 ...

  3. dfs和bfs(链式前向星实现)

    dfs代码: #include<iostream>#include<Algorithm>#include<cstring>#include<cstdio> ...

  4. BZOJ3732Network——kruskal重构树+倍增+LCA/最小生成树+倍增

    题目描述 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 & ...

  5. BZOJ1014 JSOI2008火星人(splay+哈希)

    splay维护哈希值即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstd ...

  6. css修改input表单默认样式重置与自定义大全

    链接地址: 伪元素表单控件默认样式重置与自定义大全 http://www.zhangxinxu.com/wordpress/?p=3381 Chrome 现在不支持通过伪元素修改 meter 元素样式 ...

  7. Hibernate基本应用01

    一. Hibernate简介 1.1 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全 ...

  8. Java中字符串string的数据类型

    Java中字符串string的数据类型 时间:2017-07-03 08:01:47 YuanMxy 原文:https://blog.csdn.net/YuanMxy/article/details/ ...

  9. 获取外网出口ip

    curl ifconfig.me 或 curl cip.cc

  10. Hash碰撞 & 拒绝服务漏洞

    前段时间在网上看到的: http://www.baidu.com/s?wd=Hash%E7%A2%B0%E6%92%9E+++%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1% ...