原文鏈接:
https://dohdatabase.com/2021/04/22/datapump-export-from-data-guard/
從生產(chǎn)數(shù)據(jù)庫(kù)中導(dǎo)出數(shù)據(jù)可能會(huì)很痛苦,原因如下:
你可能想要一個(gè)一致的導(dǎo)出,因此設(shè)置了數(shù)據(jù)泵參數(shù)FLASHBACK_TIME。這需要很大的undo空間。 如果數(shù)據(jù)庫(kù)上有大量活動(dòng),那可能會(huì)遇到ORA-01555。
您希望使用 Data Pump 中的并行選項(xiàng)快速導(dǎo)出數(shù)據(jù)。導(dǎo)出得越快,對(duì) ORA-01555 的影響就越小。但是并行使用更多的資源。
如果您有 Active Data Guard,則可以從備庫(kù)中導(dǎo)出數(shù)據(jù)。這應(yīng)該很簡(jiǎn)單,對(duì)吧? 導(dǎo)出畢竟只是讀取據(jù)…
但 Data Pump 不僅僅是一個(gè)簡(jiǎn)單的導(dǎo)出工具。它是相當(dāng)高級(jí)的,為了支持所有這些功能,它需要?jiǎng)?chuàng)建一個(gè)主表,用于協(xié)調(diào)操作。此外,它使用Advanced Queueing (AQ)來(lái)進(jìn)行進(jìn)程間的通信。 AQ還需要一個(gè)可寫(xiě)數(shù)據(jù)庫(kù)。
但是Oracle Database 19c 中引入的DML重定向又如何呢?它可以用來(lái)處理少量 DML 嗎?不能,因?yàn)橹鞅淼膭?chuàng)建是 DDL,而不是 DML。如果你嘗試,你會(huì)失敗:
$ 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
解決方案:
我打開(kāi)了我的bat 信號(hào),并從我的產(chǎn)品經(jīng)理 Pieter Van Puymbroeck那里得到了幫助。
他說(shuō),使用快照備庫(kù)。Snapshot Standby是 Enterprise Edition 的一部分,所以如果您有 Data Guard,那么您也有 Snapshot Standby。如果您需要快速回顧一下什么是快照備庫(kù),您應(yīng)該看看這個(gè)視頻。
首先,我將我的物理備用數(shù)據(jù)庫(kù)(CDB19_fra3zt)轉(zhuǎn)換為快照備庫(kù):
DGMGRL> convert database 'CDB19_fra3zt' to snapshot standby;
接下來(lái),創(chuàng)建一個(gè)可以與 Data Pump 使用的目錄對(duì)象:
SQL> create directory mydir as '/tmp';
最后,開(kāi)始導(dǎo)出。請(qǐng)注意,我沒(méi)有設(shè)置FLASHBACK_TIME。從快照備庫(kù)導(dǎo)出時(shí),數(shù)據(jù)庫(kù)上可能沒(méi)有其他用戶,因此無(wú)需擔(dān)心導(dǎo)出的一致性:
$ expdp system schemas=sales directory=mydir
我的數(shù)據(jù)現(xiàn)在已經(jīng)導(dǎo)出,是時(shí)候?qū)⑽业目煺諅鋷?kù)轉(zhuǎn)回物理備據(jù)庫(kù),適當(dāng)?shù)乇Wo(hù)我寶貴的數(shù)據(jù)庫(kù):
DGMGRL> convert database 'CDB19_fra3zt' to physical standby;
這會(huì)危及我的主數(shù)據(jù)庫(kù)嗎?不會(huì),但…
您的主數(shù)據(jù)庫(kù)仍然受到保護(hù),因?yàn)槿罩疚募匀话l(fā)送到備用數(shù)據(jù)庫(kù),但未應(yīng)用。如果我需要切換或故障轉(zhuǎn)移會(huì)發(fā)生什么?
1.將快照備用數(shù)據(jù)庫(kù)轉(zhuǎn)換回物理備用數(shù)據(jù)庫(kù)
2.這將隱式發(fā)出閃回?cái)?shù)據(jù)庫(kù)并恢復(fù)所做的所有更改
3.然后通過(guò)應(yīng)用所有日志文件趕上主節(jié)點(diǎn)
4.最后,完成切換或故障轉(zhuǎn)移
歸根結(jié)底,這將需要更長(zhǎng)的時(shí)間!閃回操作非常快,應(yīng)該在幾分鐘內(nèi)完成。畢竟,Data Pump 并沒(méi)有改變很多。只有主表和一些 AQ 的東西。那么應(yīng)用日志需要多少時(shí)間?這完全取決于應(yīng)用延遲的大小。
因此,如果您選擇這方式,請(qǐng)做好準(zhǔn)備,以防萬(wàn)一發(fā)生切換或故障轉(zhuǎn)移,備庫(kù)將需要更長(zhǎng)的時(shí)間才能開(kāi)始啟用。除非您有兩個(gè)備庫(kù),那樣你仍然可以立即準(zhǔn)備運(yùn)行。
GoldenGate:
如果您需要Data Pump導(dǎo)出為GoldenGate執(zhí)行初始化,那么您可能需要控制正在進(jìn)行導(dǎo)出的SCN。如果是這樣,取消備庫(kù)上的redo應(yīng)用,并前滾到所需的SCN:
alter database recover managed standby database cancel;
alter database recover managed standby database until change n;
轉(zhuǎn)換備庫(kù)為快照備庫(kù)前:
alter database convert to snapshot standby;
稍后,當(dāng)你需要在GoldenGate中開(kāi)始復(fù)制時(shí),你可以使用以下選項(xiàng):
START REPLICAT ATCSN n
結(jié)論:
如果您將備庫(kù)臨時(shí)轉(zhuǎn)換為快照備庫(kù),你可以從 Data Guard 導(dǎo)出。準(zhǔn)備好切換或故障轉(zhuǎn)移操作將花費(fèi)更長(zhǎng)的時(shí)間。
如果你想了解更多關(guān)于Data Pump的信息,你應(yīng)該查看我們的網(wǎng)絡(luò)研討會(huì)遷移策略-見(jiàn)解,提示和秘密。
最后,說(shuō)到數(shù)據(jù)泵,記得獲取數(shù)據(jù)泵包補(bǔ)丁(bug 32551008),正如Roy在Twitter上提到的。




