RAC中誤將資料檔案建立在本地盤時的修正
使用者建立表空間時誤將資料檔案放到了本地盤,重啟資料庫時一個例項啟動不了,只能offline該表空間後啟動資料庫。
現使用者想知道怎樣能把這個表空間資料檔案中的資料恢復出來。
測試目的:驗證RAC中誤將資料檔案建立在本地盤時的修復辦法
環境說明:
兩節點RAC,資料庫名為db10g 版本10.2.0.5
使用了ASM作為共享儲存解決方案。
1,場景準備
1)節點2:建立表空間test1,資料檔案不放到ASM,而是放到本地盤:
SQL> create tablespace test1 datafile '/home/oracle/test1.dbf' size 10m;
Tablespace created.
SQL> select name,status from v$datafile;
NAME STATUS
----------------------------------------------------------- -----------------------
+DG/db10g/datafile/system.256.821723567 SYSTEM
+DG/db10g/datafile/undotbs1.258.821723569 ONLINE
+DG/db10g/datafile/sysaux.257.821723569 ONLINE
+DG/db10g/datafile/users.259.821723569 ONLINE
+DG/db10g/datafile/undotbs2.264.821723755 ONLINE
/home/oracle/test1.dbf ONLINE
6 rows selected.
2)節點2:在表空間test1中建立表沒問題
SQL> create table test1 (id int) tablespace test1;
Table created.
SQL> create table test2 tablespace test1 as select * from dba_tables;
Table created.
3)節點1:能查到表空間test1,但建立表報錯
SQL> select name ,status from v$datafile;
NAME STATUS
--------------------------------------------------------- ------------------
+DG/db10g/datafile/system.256.821723567 SYSTEM
+DG/db10g/datafile/undotbs1.258.821723569 ONLINE
+DG/db10g/datafile/sysaux.257.821723569 ONLINE
+DG/db10g/datafile/users.259.821723569 ONLINE
+DG/db10g/datafile/undotbs2.264.821723755 ONLINE
/home/oracle/test1.dbf ONLINE
6 rows selected.
SQL> create table test1 (id int) tablespace test1;
create table test1 (id int) tablespace test1
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/home/oracle/test1.dbf'
4)重啟資料庫,會發現節點1例項起不來,因為節點1無法讀取節點2本地盤上的/home/oracle/test1.dbf
[oracle@rac10g2 ~]$ srvctl stop database -d db10g
[oracle@rac10g2 ~]$ srvctl start database -d db10g
PRKP-1001 : Error starting instance db10g1 on node rac10g1
CRS-0215: Could not start resource 'ora.db10g.db10g1.inst'.
[oracle@rac10g2 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.db10g.db application ONLINE ONLINE rac10g1
ora....g1.inst application ONLINE OFFLINE
ora....g2.inst application ONLINE ONLINE rac10g2
ora....SM1.asm application ONLINE ONLINE rac10g1
ora....G1.lsnr application ONLINE ONLINE rac10g1
ora....0g1.gsd application ONLINE ONLINE rac10g1
ora....0g1.ons application ONLINE ONLINE rac10g1
ora....0g1.vip application ONLINE ONLINE rac10g1
ora....SM2.asm application ONLINE ONLINE rac10g2
ora....G2.lsnr application ONLINE ONLINE rac10g2
ora....0g2.gsd application ONLINE ONLINE rac10g2
ora....0g2.ons application ONLINE ONLINE rac10g2
ora....0g2.vip application ONLINE ONLINE rac10g2
2,處理過程
由於該過程中需要從本地盤把資料檔案遷移到ASM共享儲存,ASM檔案的訪問無法透過作業系統級別直接進行。
在10gR2中,我們可以使用RMAN命令備份和恢復ASM檔案,使用ASMCMD命令可以瀏覽和操縱目錄結構。不過,
Oracle 10g包中的DBMS_FILE_TRANSFER是處理ASM的另一種方式。 DBMS_FILE_TRANSFER可以在同一臺Oracle
伺服器上或兩臺Oracle 伺服器之間複製檔案。它使用目錄物件來指定源目錄和目的目錄,因為目錄物件支援ASM路徑
名稱,所以DBMS_FILE_TRANSFER也支援ASM路徑名。這使得從常規檔案系統的ASM儲存區移入和移出檔案變得十分
簡單,使用它可以完成如下的遷移:
ASM->ASM、ASM->OS
Flie、OS File->ASM、OS
File->OS File。
建錯的表空間test1資料檔案在節點2,所以只能從節點2上開啟。可在節點2上將表空間offline之後使用dbms_file_transfer將資料
檔案移到ASM共享儲存(如使用的是叢集檔案系統,直接複製資料檔案即可)。
1)為兩個資料檔案路徑建立目錄
節點2:建立兩個directory,一個指向本地盤該資料檔案目錄;一個指向ASM資料檔案目錄。
SQL> create directory test1 as '/home/oracle';
Directory created.
SQL> create directory test2 as '+DG/db10g/datafile';
Directory created.
2)offline表空間
節點2:offline表空間test1
SQL> alter tablespace test1 offline;
Tablespace altered.
3)複製資料檔案到ASM
節點2:使用dbms_file_transfer複製該資料檔案到ASM
SQL> exec
dbms_file_transfer.copy_file('TEST1','test1.dbf','TEST2','test1.dbf');
PL/SQL procedure successfully completed.
4)修改控制檔案中的資料檔案路徑
節點2:
SQL> alter database rename file '/home/oracle/test1.dbf' to
'+DG/db10g/datafile/test1.dbf'
SQL> /
Database altered.
5)online表空間test1
節點2:online表空間test1
SQL> alter tablespace test1 online;
Tablespace altered.
6)啟動例項1
[oracle@rac10g2 ~]$ srvctl start instance -d db10g -i db10g1
[oracle@rac10g2 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.db10g.db application ONLINE ONLINE rac10g1
ora....g1.inst application ONLINE ONLINE rac10g1
ora....g2.inst application ONLINE ONLINE rac10g2
ora....SM1.asm application ONLINE ONLINE rac10g1
ora....G1.lsnr application ONLINE ONLINE rac10g1
ora....0g1.gsd application ONLINE ONLINE rac10g1
ora....0g1.ons application ONLINE ONLINE rac10g1
ora....0g1.vip application ONLINE ONLINE rac10g1
ora....SM2.asm application ONLINE ONLINE rac10g2
ora....G2.lsnr application ONLINE ONLINE rac10g2
ora....0g2.gsd application ONLINE ONLINE rac10g2
ora....0g2.ons application ONLINE ONLINE rac10g2
ora....0g2.vip application ONLINE ONLINE rac10g2
7)節點1:檢查資料檔案狀態和表空間內資料
SQL> select name ,status from v$datafile;
NAME STATUS
---------------------------------------------------- ------------------
+DG/db10g/datafile/system.256.821723567 SYSTEM
+DG/db10g/datafile/undotbs1.258.821723569 ONLINE
+DG/db10g/datafile/sysaux.257.821723569 ONLINE
+DG/db10g/datafile/users.259.821723569 ONLINE
+DG/db10g/datafile/undotbs2.264.821723755 ONLINE
+DG/db10g/datafile/test1.dbf ONLINE
6 rows selected.
SQL> select count(*) from test2;
COUNT(*)
----------
1522
3、備註
以上遷移資料檔案時是採用 dbms_file_transfer.copy_file遷移資料檔案的方法,也可以使用RMAN來做:
SQL>select tablespace_name,file_name,status,online_status from
dba_data_files;
需要對錶空間進行OFFLINE
登入RMAN,
RMAN> sql "alter tablespace test1 offline";
RMAN> copy datafile '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';
SQL> alter database rename file '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';
SQL> alter tablespace test1 online;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-1360627/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC資料庫將資料檔案建立在本地磁碟資料庫
- 11G Oracle RAC新增新表空間時資料檔案誤放置到本地檔案系統的修正Oracle
- 【RAC】RAC本地資料檔案遷移至ASM的方法(3)ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(2)ASM
- 【RAC】RAC本地資料檔案遷移至ASM的方法(1)ASM
- oracle之 RAC本地資料檔案遷移至ASMOracleASM
- oracle RAC中表空間資料檔案錯誤建立到了節點本地位置Oracle
- 利用rman將本地資料檔案遷移到asmASM
- RAC環境下建立本地資料檔案的解決方法
- python如何將資料寫入本地txt文字檔案Python
- Linux 時間錯誤的修正Linux
- ORACLE RAC 裸裝置資料庫一節點表空間擴容錯誤新增資料檔案到本地的處理Oracle資料庫
- 如何將資料庫中的資料導成 excel 檔案資料庫Excel
- 資料檔案誤刪--但有資料檔案的copy恢復
- Git pull「合併將覆蓋對以下檔案的本地更改」的錯誤Git
- 起泡法按照時間排列檔案(FSO)(修正) (轉)
- BEFORE觸發器修正資料錯誤觸發器
- rac 環境新增資料檔案誤新增到檔案系統,正確解決方法
- 修正memcache.php中的錯誤示例PHP
- rac中的密碼檔案密碼
- 將本地檔案傳輸到GitHubGithub
- javascript如何將檔案儲存到本地JavaScript
- 臨時資料檔案
- Oracle資料檔案和臨時檔案的管理Oracle
- 為rac資料庫增加控制檔案資料庫
- 誤刪資料庫資料檔案的處理方法資料庫
- linux中誤刪除oracle資料檔案的恢復操作LinuxOracle
- MySQL資料庫中的日誌檔案---(1)錯誤日誌MySql資料庫
- 使用中undo表空間資料檔案被誤刪
- RAC環境中的TNSNAMES檔案
- 在.Net中將MailMessage儲存為本地eml檔案(轉)AI
- oracle rac在加錯asm盤時,變成了檔案系統處理OracleASM
- 桌面檔案在c盤哪個資料夾 c盤桌面檔案路徑
- python——將excel檔案寫入mysql資料庫中PythonExcelMySql資料庫
- 將RAC資料庫更改為不歸檔日誌的模式資料庫模式
- 資料檔案拷貝檔案頭驗證錯誤
- linux中誤刪除oracle資料檔案的恢復操作(轉)LinuxOracle
- Oracle恢復誤刪除的資料檔案Oracle