利用offline datafile檔案方式遷移資料
我們可能經常遇到這樣的情況:
1. 因為儲存需要調整,所以需要暫時把部分資料檔案從一個儲存遷移到另一個儲存上
2. 隨時時間的轉移,原來的熱點資料變成歷史資料,需要這部分資料從好的裝置轉移到歸檔裝置上
我們的選擇有多種:
1. move table
這種方法的優點是對業務影響較小,幾乎可以聯機做。但如果物件很多,會比較麻煩,而且還需要重建索引。
2. 直接把資料檔案轉移
如果資料庫可以停機,則是最簡單的,但使用者一般難以承受完全的停機操作。所以需要找一個折中的辦法。
如果這部分資料比較獨立、或者不太重要,使用者願意承受操作期間的部分業務的不可用,則可以考慮用offline datafile然後移動的方法去操作。
[@more@]----------------------------
此種方法的具體步驟是:
1) 資料檔案offline
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' offline;
資料庫已更改。
2) 複製資料檔案到新路徑
可以cp/dd/rman都可以,步驟不再贅述
3) 重新命名資料檔案
SQL> alter database rename file 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' to 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
資料庫已更改。
--資料檔案必須是offline的狀態才可以在資料庫開啟狀態下rename名稱
4) 恢復資料檔案
SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介質恢復。
5) 重新online資料檔案
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;
資料庫已更改。
此時,所有步驟完成!
----------------------------
用這種方法有兩個疑慮:
1. 如果有會話一直在資料檔案上的物件進行查詢,是否可以offline?
可以。證明步驟如下:
create table T(a int);
insert into T values(1);
commit;
DECLARE
I INTEGER;
BEGIN
WHILE 1 = 1 LOOP
SELECT A INTO I FROM T;
END LOOP;
END;
/
上面的語句可以模擬一直有活動查詢,我來試試是否可以offline:
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;
資料庫已更改。
資料庫offline後,上面的查詢會報錯:
ORA-00376: 此時無法讀取檔案 7
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
可以看到,在這種情況下,資料檔案可以被offline。
2. 如果一直有活動事物,是否可以offline?
可以。證明步驟如下:
SQL> delete from T;
1 row deleted
資料刪除後一直不提交,則表示一直有活動事物。嘗試offline成功!
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;
資料庫已更改。
SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介質恢復。
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;
資料庫已更改。
此時因為事物沒有提交,所以資料檔案online後表中的資料仍然存在。
需要注意的是:
1. datafile offline會觸發dbwn把buffer中相關的資料重新整理到資料檔案中,重新整理完成後,資料檔案才能被offline
2. 資料檔案被offline後,資料庫內任何對這些檔案的讀寫操作都會失敗
3. 一個事務可以在offline前執行,在offline後再提交,前提是操作都發生在同一個會話中。
4. 被offline的資料檔案被online前,必須做recover操作,如果對應的歸檔不存在導致recover失敗,則無法online這個資料檔案。
1. 因為儲存需要調整,所以需要暫時把部分資料檔案從一個儲存遷移到另一個儲存上
2. 隨時時間的轉移,原來的熱點資料變成歷史資料,需要這部分資料從好的裝置轉移到歸檔裝置上
我們的選擇有多種:
1. move table
這種方法的優點是對業務影響較小,幾乎可以聯機做。但如果物件很多,會比較麻煩,而且還需要重建索引。
2. 直接把資料檔案轉移
如果資料庫可以停機,則是最簡單的,但使用者一般難以承受完全的停機操作。所以需要找一個折中的辦法。
如果這部分資料比較獨立、或者不太重要,使用者願意承受操作期間的部分業務的不可用,則可以考慮用offline datafile然後移動的方法去操作。
[@more@]----------------------------
此種方法的具體步驟是:
1) 資料檔案offline
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' offline;
資料庫已更改。
2) 複製資料檔案到新路徑
可以cp/dd/rman都可以,步驟不再贅述
3) 重新命名資料檔案
SQL> alter database rename file 'E:ORACLEPRODUCT10.2.0ORADATAORA10GSUK.DBF' to 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
資料庫已更改。
--資料檔案必須是offline的狀態才可以在資料庫開啟狀態下rename名稱
4) 恢復資料檔案
SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介質恢復。
5) 重新online資料檔案
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;
資料庫已更改。
此時,所有步驟完成!
----------------------------
用這種方法有兩個疑慮:
1. 如果有會話一直在資料檔案上的物件進行查詢,是否可以offline?
可以。證明步驟如下:
create table T(a int);
insert into T values(1);
commit;
DECLARE
I INTEGER;
BEGIN
WHILE 1 = 1 LOOP
SELECT A INTO I FROM T;
END LOOP;
END;
/
上面的語句可以模擬一直有活動查詢,我來試試是否可以offline:
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;
資料庫已更改。
資料庫offline後,上面的查詢會報錯:
ORA-00376: 此時無法讀取檔案 7
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
可以看到,在這種情況下,資料檔案可以被offline。
2. 如果一直有活動事物,是否可以offline?
可以。證明步驟如下:
SQL> delete from T;
1 row deleted
資料刪除後一直不提交,則表示一直有活動事物。嘗試offline成功!
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' offline;
資料庫已更改。
SQL> recover datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF';
完成介質恢復。
SQL> alter database datafile 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF' online;
資料庫已更改。
此時因為事物沒有提交,所以資料檔案online後表中的資料仍然存在。
需要注意的是:
1. datafile offline會觸發dbwn把buffer中相關的資料重新整理到資料檔案中,重新整理完成後,資料檔案才能被offline
2. 資料檔案被offline後,資料庫內任何對這些檔案的讀寫操作都會失敗
3. 一個事務可以在offline前執行,在offline後再提交,前提是操作都發生在同一個會話中。
4. 被offline的資料檔案被online前,必須做recover操作,如果對應的歸檔不存在導致recover失敗,則無法online這個資料檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-1036170/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用拷貝data目錄檔案的方式遷移mysql資料庫MySql資料庫
- 資料檔案遷移
- 利用rman遷移裸裝置資料檔案到檔案系統
- oracle檔案遷移之datafile,relog file,tempfileOracle
- 資料檔案的遷移
- oracle 資料檔案遷移Oracle
- oracle資料檔案遷移Oracle
- Oracle_遷移資料檔案Oracle
- 資料庫檔案的遷移資料庫
- 資料檔案實驗操作datafile的create/offline/drop/rename等操作
- 遷移資料庫檔案到ASM資料庫ASM
- 利用RMAN在檔案系統與ASM之間遷移資料庫ASM資料庫
- 如何遷移ASM資料檔案到檔案系統ASM
- 【資料遷移】RMAN遷移資料庫到ASM(二)切換資料檔案到ASM資料庫ASM
- 線上遷移表空間資料檔案
- Oracle 表空間資料檔案遷移Oracle
- oracle 資料檔案offlineOracle
- Oracle 利用RMAN 完成資料遷移Oracle
- 使用資料庫冷備份方式進行資料庫遷移,資料庫檔案遷移到不同的目錄資料庫
- 利用rman將本地資料檔案遷移到asmASM
- 重建控制檔案與 datafile offline,tablespace read only
- 達夢資料庫資料檔案遷移過程資料庫
- 使用prebuilt table 方式遷移資料UI
- 利用php實現檔案遷移重新命名PHP
- dataguard備庫的資料檔案的遷移
- InnoDB資料表空間檔案平滑遷移
- 資料庫遷移的幾個方式資料庫
- BIEE 目錄遷移(資料夾)方式
- FastDFS檔案系統遷移和資料恢復AST資料恢復
- 使用dbeaver 用csv 檔案進行資料遷移
- 重新命名與遷移聯機資料檔案
- SQL SEVER 2008 資料檔案遷移SQL
- (個人)Oracle 表空間資料檔案遷移(轉)Oracle
- Azure Storage 利用 azCopy 複製遷移資料
- 利用RMAN跨平臺遷移資料庫資料庫
- 模擬利用MV進行資料遷移
- oracle 資料檔案(Datafile ) 大小 限制 說明Oracle
- datafile.sql 檢視資料檔案和臨時檔案SQL