原文作者:阿蘭·富勒
原文鏈接:
https://blog.dbi-services.com/important-dbca-parameter-if-you-plan-to-use-storage-snapshot-cloning-in-asm/
我目前正在處理一個客戶項目是使用存儲快照創建數據庫克隆。優點是顯而易見的,因為使用存儲快照克隆不僅節省空間,而且與完整克隆相比速度也非常快。
這篇文章不是要詳細解釋怎么實現快照克隆技術,它指出在使用 DBCA 創建源數據庫時要考慮的重要一點。
簡要概述如何使用 ASM 完成快照克隆:
設置源數據庫為備份模式
在存儲級別創建整個 ASM 磁盤組的快照
取消源數據庫的備份模式
測試服務器上存在lun的快照
使用重命名實用程序重命名磁盤組
ASM 以新名稱掛載磁盤組
在 ASM 中調整 db_unique_name
為數據庫創建新的控制文件
使用open resetlogs打開數據庫
我想在這里重點是“在 ASM 中調整 db_unique_name”。例如,如果您在磁盤組+DATA上創建一個新DB,這個DB 的 ASM 中的目錄結構如下所示:
+DATA/PROD_SITE1
+DATA/PROD_SITE1/CONTROLFILE
+DATA/PROD_SITE1/DATAFILE
+DATA/PROD_SITE1/ONLINELOG
+DATA/PROD_SITE1/TEMPFILE
如果我們假設我們克隆的數據庫應該命名為 TEST01,且我們已將 ASM 中的磁盤組從+DATA重命名為 +DATA_TEST,那么在掛載新磁盤組后,該磁盤組上的目錄結構如下所示:
+DATA_TEST/PROD_SITE1
+DATA_TEST/PROD_SITE1/CONTROLFILE
+DATA_TEST/PROD_SITE1/DATAFILE
+DATA_TEST/PROD_SITE1/ONLINELOG
+DATA_TEST/PROD_SITE1/TEMPFILE
在我們用數據庫名TEST01創建新的控制文件之前,我們必須在ASM中將db_unique_name目錄從PROD_SITE1重命名為TEST01_SITE1。
在ASM中沒有mv命令,所以目錄必須在ASM實例上用SQL語句進行調整。工作原理如下:
SQL>
alter diskgroup DATA_TEST rename directory '+DATA_TEST/PROD_SITE1' to '+DATA_TEST/TEST01_SITE1';
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15177: cannot operate on system aliases
在這里有一個問題,在 ASM 中有兩種類型的目錄。“系統生成(Y)”和“手動創建(N)”。
如果我在 asmcmd 中查詢目錄,我會看到,我使用 dbca 創建的數據庫具有“系統生成”名稱。
ASMCMD> ls -la
Type Redund Striped Time Sys Name
Y ASM/
Y PROD_SITE1/
當 Oracle 創建目錄時,它始終是系統生成的,而當在 asm 中使用 mkdir 手動創建時,它是“非系統生成的”。
您必須知道“系統生成的目錄”永遠不能重命名。這在 ASM 中是不可能的,并且沒有解決方法。
因為我們使用 DBCA 創建了源數據庫,所以目錄 PROD_SITE1 “系統生成”的,因此我們無法將數據文件的路徑更改為我們的新名稱 TEST01_SITE1。
一種可能性是添加新的控制文件并仍然用舊的 db_unique_name 作為路徑。這樣數據庫可以被啟動,如果您之后查詢 v$datafile,仍然會在那里看到錯誤的db_unique_name。
為了糾正這個問題,我們可以強制在線移動數據文件,但缺點是我們在 ASM 中復制了整個數據庫,這正是我們想要通過快照克隆來防止的。
alter database move datafile {DATAFILE_PATH} to '+DATA_TEST';
那么這個問題的解決方案是什么?
在創建源DB (PROD)時,我們必須確保DBCA不會將目錄創建為“系統生成的”,這樣在克隆之后,我們就有可能在新的磁盤組上重命名它。
在DBCA中有一個參數
-datafileDestination
如果在 DBCA create database 語句期間顯式設置此參數,在ASM中創建的目錄是“手動生成的”,因此可以稍后重命名。




