原文链接:
https://dohdatabase.com/2021/04/22/datapump-export-from-data-guard/
从生产数据库中导出数据可能会很痛苦,原因如下:
你可能想要一个一致的导出,因此设置了数据泵参数FLASHBACK_TIME。这需要很大的undo空间。 如果数据库上有大量活动,那可能会遇到ORA-01555。
您希望使用 Data Pump 中的并行选项快速导出数据。导出得越快,对 ORA-01555 的影响就越小。但是并行使用更多的资源。
如果您有 Active Data Guard,则可以从备库中导出数据。这应该很简单,对吧? 导出毕竟只是读取据…
但 Data Pump 不仅仅是一个简单的导出工具。它是相当高级的,为了支持所有这些功能,它需要创建一个主表,用于协调操作。此外,它使用Advanced Queueing (AQ)来进行进程间的通信。 AQ还需要一个可写数据库。
但是Oracle Database 19c 中引入的DML重定向又如何呢?它可以用来处理少量 DML 吗?不能,因为主表的创建是 DDL,而不是 DML。如果你尝试,你会失败:
$ expdp system@localhost:1521/pdb1 schemas=SH directory=mydir
Export: Release 19.0.0.0.0 - Production on Mon Apr 12 18:19:22 2021
Version 19.10.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Password:
Connected to: Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
ORA-31626: job does not exist
ORA-31633: unable to create master table "SYSTEM.SYS_EXPORT_SCHEMA_05"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT", line 1163
ORA-16000: database or pluggable database open for read-only access
ORA-06512: at "SYS.KUPV$FT", line 1056
ORA-06512: at "SYS.KUPV$FT", line 1044
解决方案:
我打开了我的bat 信号,并从我的产品经理 Pieter Van Puymbroeck那里得到了帮助。
他说,使用快照备库。Snapshot Standby是 Enterprise Edition 的一部分,所以如果您有 Data Guard,那么您也有 Snapshot Standby。如果您需要快速回顾一下什么是快照备库,您应该看看这个视频。
首先,我将我的物理备用数据库(CDB19_fra3zt)转换为快照备库:
DGMGRL> convert database 'CDB19_fra3zt' to snapshot standby;
接下来,创建一个可以与 Data Pump 使用的目录对象:
SQL> create directory mydir as '/tmp';
最后,开始导出。请注意,我没有设置FLASHBACK_TIME。从快照备库导出时,数据库上可能没有其他用户,因此无需担心导出的一致性:
$ expdp system schemas=sales directory=mydir
我的数据现在已经导出,是时候将我的快照备库转回物理备据库,适当地保护我宝贵的数据库:
DGMGRL> convert database 'CDB19_fra3zt' to physical standby;
这会危及我的主数据库吗?不会,但…
您的主数据库仍然受到保护,因为日志文件仍然发送到备用数据库,但未应用。如果我需要切换或故障转移会发生什么?
1.将快照备用数据库转换回物理备用数据库
2.这将隐式发出闪回数据库并恢复所做的所有更改
3.然后通过应用所有日志文件赶上主节点
4.最后,完成切换或故障转移
归根结底,这将需要更长的时间!闪回操作非常快,应该在几分钟内完成。毕竟,Data Pump 并没有改变很多。只有主表和一些 AQ 的东西。那么应用日志需要多少时间?这完全取决于应用延迟的大小。
因此,如果您选择这方式,请做好准备,以防万一发生切换或故障转移,备库将需要更长的时间才能开始启用。除非您有两个备库,那样你仍然可以立即准备运行。
GoldenGate:
如果您需要Data Pump导出为GoldenGate执行初始化,那么您可能需要控制正在进行导出的SCN。如果是这样,取消备库上的redo应用,并前滚到所需的SCN:
alter database recover managed standby database cancel;
alter database recover managed standby database until change n;
转换备库为快照备库前:
alter database convert to snapshot standby;
稍后,当你需要在GoldenGate中开始复制时,你可以使用以下选项:
START REPLICAT ATCSN n
结论:
如果您将备库临时转换为快照备库,你可以从 Data Guard 导出。准备好切换或故障转移操作将花费更长的时间。
如果你想了解更多关于Data Pump的信息,你应该查看我们的网络研讨会迁移策略-见解,提示和秘密。
最后,说到数据泵,记得获取数据泵包补丁(bug 32551008),正如Roy在Twitter上提到的。