相对于exp/imp方式,数据泵(expdp/impdp)更快,且能导出空表;相对于rman、dg等方式,数据泵操做更加简单。此外,在数据量不大、可停库的状况下,数据泵方式是能够保证数据的完整性的。php
备注:exp/imp与expdp/impdp的区别html
1、exp和imp是客户端工具程序,它们既能够在客户端使用,也能够在服务端使用。 2、expdp和impdp是服务端的工具程序,他们只能在Oracle服务端使用,不能在客户端使用。 3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。 4、对于10g以上的服务器,使用exp一般不能导出0行数据的空表,而此时必须使用expdp导出。
如有必要,须要在新库上创建必要的表空间、用户(并赋权)、数据备份目录,源库上建立数据备份目录等。linux
(1)建立临时表空间sql
create temporary tablespace 用户临时表空间名称 tempfile '/u01/tablespaces/user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
备注:根据实际状况调整表空间大小等参数以及规划临时表空间、回滚表空间等相关规划。数据库
(2)建立数据表空间bash
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 用户名;
注意:赋权给多个用户的状况下,各个用户名称间用,分隔便可。oracle
(5)登陆须要建立dblink的用户,建立dblinkapp
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
备份目录须要使用操做系统用户建立一个真实的目录,而后登陆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;
五、用sys管理员给指定用户赋予在该目录的操做权限
SQL> grant read,write on directory data_dir to user; SQL> grant read,write on directory data_dir to user1,user2;
确保已经建立数据备份路径,若没有则按照准备工做中的说明进行建立。(注意:若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;
注意:
(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.将表空间TBS0一、TBS0二、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
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 或任何有效的数据库版本。
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 将当即关闭数据泵做业。
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 有效。
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 将当即关闭数据泵做业。
导出正常,导入数据时,只成功导入部分记录等数据,另外的部分提数ora 39112错误,经查是由于导出的用户数据中,有部分记录的表用的索引在另外一表空间中,该空间还未建立,因此致使该失败。
解决方法:在导入时,添加参数:RANSFORM=segment_attributes:n ,配合table_exists_action=replace参数,从新导入便可。
RANSFORM=segment_attributes:n 在导入时,会将数据导入默认的表空间中。
补充,形成该问题的可能缘由:
一、在原来测试库中,目标schema和别的用户相互受权了,但是你导出的dmp中没有包含全部的用户,导入时对应用户没有建立。 二、再就是,表空间问题,测试库中的用户下的某个表的索引没有在他的默认表空间里,这样你要在目标端(这里就是生产环境),建立好对应的表空间, 就是说若是你在测试库把a用户的下的某个表的权限授给了b,那么你在把a用户用数据泵倒进生产库时,他会在生产库中检测有没有用户b。也要作相同的操做。
导入过程当中,遇到错误" 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.0/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 $0) | 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'` $1 | tee -a ${v_logfile} } #用户数据导出 exp_usrdata(){ v_exp_usr=$1 v_exp_pwd=$2 v_oradir_name=$3 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 0 ]]; then record_log "建立备份目录"$1"开始" 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 "建立备份目录"$1"结束" else record_log "建立备份目录"$1"已存在" return fi ##注意清理临时标志文件 [[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp } #建立表空间 create_space(){ v_space_name=$1 #判断表空间类型(临时表空间或普通表空间) if [[ `grep TMP $1` -eq 1 ]]; 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=$1 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 0 ]]; then record_log "建立表空间"$1"开始" create_space ${v_space_name} record_log "建立表空间"$1"结束" else record_log "表空间"$1"已存在" return fi ##注意清理临时标志文件 [[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp } #在目标库上建立用户并赋权 create_usrs(){ v_create_usr=$1 #参数1:用户名 v_create_pwd=$2 #参数2:密码 v_create_tmp_space=$3 #参数3:临时表空间名称 v_create_space=$4 #参数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=$1 v_imp_pwd=$2 v_oradir_name=$3 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=$1 #删除用户及用户下的全部数据,删除表空间及表空间下的全部数据 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=$1 #删除用户及用户下的全部数据,删除表空间及表空间下的全部数据 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=$1 v_clink_pwd=$2 #以管理员身份对建立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=$1 v_link_usr=$2 v_link_pwd=$3 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 0 ]]; then record_log "建立"$1"开始" create_dblink ${v_link_usr} ${v_link_pwd} record_log "建立"$1"结束" else record_log $1"已存在" return fi ##注意清理临时标志文件 [[ -f ./tmp_space_flag.tmp ]] && rm -rf tmp_space_flag.tmp } #主函数 main(){ v_start=`date +%s` if [[ $1 -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 [[ $1 -eq "pre" ]]; then #1、建立备份目录 create_bankup_dir #2、建立表空间 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 #3、建立用户、赋权 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 "建立用户结束..." #4、为hx库建立dblink record_log "建立dblink开始..." deal_dblink ${v_dblink} ${v_usr_2} ${v_pwd_2} record_log "建立dblink结束..." elif [[ $1 -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 [[ $1 -eq "clean" ]]; then read -t 5 -p "确认清除 0-否 1-是" v_num if [[ ${v_num} -eq 1 ]]; 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