12c 数据泵一致性导出

在OGG同步的项目中,总会遇到默写表同步失败需要重新表级初始化。这时候采用数据泵来导入导出就需要考虑数据一致性问题,确保我们导出的数据是基于某个scn或者某个时间戳,这样做才能让已经停止的复制进程(replicat)知道从哪里开始追加数据库变化。

12c中数据泵为我们提供了两种一致性导出的参数,一个是基于scn的FLASHBACK_SCN,另一个是基于时间戳的FLASHBACK_TIME

1, 取得当前的scn
这里可以采用两种方法,一种是通过函数取得的,能精确到当前的scn。另一种是向前滚动加1的scn。通常生产环境的数据库都在不停的产生数据变化,scn也随之飞快的变化,选择那种获取scn的方式都可以,能想起哪个就用哪个吧。

方法一, 获取当前的scn
SYS@ora12c >select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
2096931

方法二, 生成当前的scn,该生成动作会促使scn+1
SYS@ora12c >select current_scn from v$database;

CURRENT_SCN
-----------
2096937

2,使用FLASHBACK_SCN参数一致性导出数据
由于语句比较长,在employees 后面采用了换行符号\,注意employee与\之间有空格。下一行的>是回车后自动生成的,表示后面的内容和前面的是一行的。
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=20150226.dmp tables=hr.employees \
> flashback_scn=2096937

3,使用FLASHBACK_TIME参数一致性导出数据
在这里建议使用参数文件的方式,这样会省去很多转移符
[oracle@snow ~]$ date
Mon Feb 9 16:08:01 EST 2015
[oracle@snow ~]$ vi flashback.par
userid=dp/dp
directory=dp_dir
dumpfile=20150226_1.dmp
logfile=20150226_1.log
flashback_time="to_timestamp('2015-02-09 16:00:00','yyyy-mm-dd hh24:mi:ss')"

[oracle@snow ~]$ expdp parfile=flashback.par


这里有个小插曲,如果是在虚拟机上做这个实验,并且经常挂起虚拟机(暂停)导致时钟和宿主机时钟不一致,通常是比宿主机慢,会报错。
简单的说就是虚拟机时间慢,为其设置了一个将来的时间导出而报错。使用date看看虚拟机的时间,自然就明白了。
ORA-39001: invalid argument value
ORA-39150: bad flashback time
ORA-08186: invalid timestamp specified

全文完

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

转载于:http://blog.itpub.net/29047826/viewspace-1441904/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值