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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修正織夢CMS的RSS檔案的URL錯誤
- Linux 時間錯誤的修正Linux
- python如何將資料寫入本地txt文字檔案Python
- 如何將資料庫中的資料導成 excel 檔案資料庫Excel
- Git pull「合併將覆蓋對以下檔案的本地更改」的錯誤Git
- 修正memcache.php中的錯誤示例PHP
- Oracle資料檔案和臨時檔案的管理Oracle
- 將本地檔案傳輸到GitHubGithub
- python——將excel檔案寫入mysql資料庫中PythonExcelMySql資料庫
- 將DBF檔案(dBase, FoxPro等)中的資料轉換到SQLiteSQLite
- 桌面檔案在c盤哪個資料夾 c盤桌面檔案路徑
- 一次將資料匯出為 CSV 格式檔案時遇到的坑
- ORACLE RAC ASM資料檔案遷移OMF檔案報錯ORA-01276解決OracleASM
- 如何將資料熱匯出到檔案
- RAC開啟資料庫歸檔資料庫
- linux下恢復誤刪除oracle的資料檔案LinuxOracle
- C# 將資料夾中檔案複製到另一個資料夾C#
- [20190410]dg建立臨時表檔案資料檔案.txt
- 定時將系統時間更新在日誌檔案中
- 12c複製 RAC ASM中的密碼檔案到檔案系統ASM密碼
- 資料檔案誤刪除(DM_單機)
- 使用scp將linux伺服器中的檔案傳到windows本地主機上Linux伺服器Windows
- 如何將本地資料同步到 shopify 或 shopify 資料同步到本地
- 2.5.10.3 指定資料庫時區檔案資料庫
- 如何對U盤檔案資料加密,U盤加密方法教程分享加密
- 修正FIREFOX下批量上傳的錯誤Firefox
- golang寫入檔案時,覆蓋前檔案(將前檔案清空)Golang
- rac歸檔模式/非歸檔模式下檔案建至本地儲存修復方法-ORA-01157模式
- Mysql中備份資料檔案中/*!*/的含義MySql
- u盤檔案損壞怎麼恢復資料 u盤恢復損壞資料的有效方法
- u盤東西誤刪怎麼恢復 恢復u盤檔案的方法
- 【Azure Developer】瀏覽器檢視本地資料檔案時遇見跨域問題(CORS)Developer瀏覽器跨域CORS
- 如何將Azure SQL 資料庫還原到本地資料庫例項中SQL資料庫
- 2.5.10 指定資料庫時區和時區檔案資料庫
- 網站檔案修改資料庫,安全高效地修改網站資料庫中的檔案資訊網站資料庫
- Oracle RAC引數檔案管理Oracle
- 2.5.10.2 關於資料庫時區檔案資料庫
- python中按照資料夾中檔案的排列順序讀取檔案內容Python
- 使用CloudDrive 將網盤掛載本地(網盤本地化,超簡單)Cloud