您的位置:首页 > 其它

生产数据迁移EXPDP/IMPDP全过程技术步骤记录

2013-08-28 12:42 141 查看
oracle数据库数据迁移方式有多种,重要的是要根据实际的条件和需求选择一种最合适的迁移方式,一味追求技术并非最佳的解决方案,在完成实际需求内容时也要避免将问题复杂化。
此次生产数据迁移情况描述:由于硬件平台的更新,并伴随着操作系统、数据库版本的更新升级,数据库数据量约1TB,允许停机时间8小时。迁移方式选择了EXPDP/IMPDP方式。在测试过程中,发现IMPDP虽然加上parallel参数,在做table数据导入时确实速度提高了不少,但是在create index和statistics时,依旧采用单线程的方式,故在迁移过程中这两步操作选择生产DDL脚本增加parallel参数后手工执行,以最大化缩减迁移时间。

数据导出:
(导出前停应用并检查数据库连接、建立directory)
settledb01:/oracle >sqlplus /nolog
SQL> conn /as sysdba
SQL> select count(*) from v$session where username='SETTLE';
预期0
SQL> create or replace directory dmp_dir as '/dmptempfs';
SQL> grant read,write on directory dmp_dir to settle;
$ nohup expdp settle/settle directory=settledmp dumpfile=settle_%U.dmp logfile=expsettle0825.log parallel=16 SCHEMAS=SETTLE &

数据迁移:
如果存在SAN网络,则可以选择建立临时lun,将导出数据放在临时lun上进行数据转移

数据导入:
(禁用数据库自动维护任务,oracle11g中存在)
SQL> execute DBMS_AUTO_TASK_ADMIN.DISABLE;
(建立directory)
SQL> create or replace directory settledmp as '/dmptempfs';
SQL> grant read,write on directory settledmp to settle;
生成index、CONSTRAINT的ddl语句
impdp settle/settle directory= settledmp dumpfile=settle_01.dmp,settle_02.dmp,settle_03.dmp,settle_04.dmp,settle_05.dmp,settle_06.dmp,settle_07.dmp,settle_08.dmp,settle_09.dmp,settle_10.dmp,settle_11.dmp,settle_12.dmp,settle_13.dmp,settle_14.dmp,settle_15.dmp,settle_16.dmp logfile=impsettle.log parallel=16 SQLFILE=indconddl.sql INCLUDE=index,CONSTRAINT SCHEMAS=settle REMAP_TABLESPACE=settle:ts_settle
编辑ddl语句脚本
sed 's/NOLOGGING/ /g;s/LOGGING/ /g' indconddl.sql>indconddl.sql.nologin
sed '/TABLESPACE/ s/TS_SETTLE/TS_SETTLE_INDEX/g;/TABLESPACE/ s/1/32 NOLOGGING/g' indconddl.sql.nologin>indconddl.sql.new
执行导入语句
nohup impdp settle/settle directory=settledmp dumpfile=settle_01.dmp,settle_02.dmp,settle_03.dmp,settle_04.dmp,settle_05.dmp,settle_06.dmp,settle_07.dmp,settle_08.dmp,settle_09.dmp,settle_10.dmp,settle_11.dmp,settle_12.dmp,settle_13.dmp,settle_14.dmp,settle_15.dmp,settle_16.dmp logfile=impsettle0825.log parallel=16 EXCLUDE=index,CONSTRAINT,statistics SCHEMAS=settle REMAP_TABLESPACE=settle:ts_settle &
检查job,延后迁移时间内发起的job任务
SELECT JOB, LOG_USER,SCHEMA_USER,what,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC, FAILURES, BROKEN FROM DBA_JOBS;
执行ddl语句脚本,建立索引、约束,手工发起统计分析
建立索引、约束
settledb01:/dmptempfs > chmod +x indconddl.sql.new
settledb01:/dmptempfs > more createindcon.sh
sqlplus -s /nolog <<EOS
connect settle/settle
spool /tmp/indconcreate.log
@/dmptempfs/indconddl.sql.new;
spool off
exit
EOS
settledb01:/dmptempfs > nohup sh createindcon.sh &

手工发起统计信息
settledb01:/oracle > cd /dmptempfs/statdir
settledb01:/dmptempfs/statdir > more stat.sh
date
sqlplus -s /nolog <<EOS
connect /as sysdba
spool /tmp/stat.log
exec dbms_stats.gather_schema_stats( -
ownname => 'SETTLE', -
options => 'GATHER AUTO', -
estimate_percent => dbms_stats.auto_sample_size, -
method_opt => 'for all columns size repeat', -
degree => 16 -
)
/
spool off
exit
EOS
date
settledb01:/dmptempfs/statdir > nohup sh stat.sh &

检查对象状态
SQL> select OWNER,OBJECT_NAME,SUBOBJECT_NAME,STATUS,OBJECT_TYPE from dba_objects where owner='&owner' order by OBJECT_TYPE, OBJECT_NAME, SUBOBJECT_NAME;

对象数量检查
SQL> select owner,OBJECT_TYPE,count(*) from dba_objects where owner='&owner' group by owner,OBJECT_TYPE order by OBJECT_TYPE;

启用数据库自动维护任务
SQL> execute DBMS_AUTO_TASK_ADMIN.ENABLE;

检查并更正job运行时间
SELECT JOB, LOG_USER,SCHEMA_USER,what,LAST_DATE,LAST_SEC,NEXT_DATE, NEXT_SEC, FAILURES, BROKEN FROM DBA_JOBS;
本文出自 “DBA的随笔记录” 博客,请务必保留此出处http://ck1985.blog.51cto.com/4539614/1284299
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐