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

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 <

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 <

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 wner='&owner' order by OBJECT_TYPE, OBJECT_NAME, SUBOBJECT_NAME;

对象数量检查

SQL> select owner,OBJECT_TYPE,count(*) from dba_objects where wner='&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;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15115188/viewspace-743661/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15115188/viewspace-743661/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值