利用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢資料庫資料檔案遷移過程資料庫
- 使用dbeaver 用csv 檔案進行資料遷移
- FastDFS檔案系統遷移和資料恢復AST資料恢復
- Azure Storage 利用 azCopy 複製遷移資料
- 遷移資料庫的檔案到不同路徑(轉)資料庫
- 利用rman copy的方法實現儲存上裸裝置資料檔案的遷移ITPUB
- 用begin backup的方式遷移資料庫資料庫
- mongodb資料遷移2種方式比較MongoDB
- Sqlserver移動檔案路徑move datafile的三種方法SQLServer
- Oracle單個資料檔案損壞,在Rman命令裡設定表空間、資料檔案offline方式來恢復最方便Oracle
- 資料表結構更新後,遷移檔案怎麼使用?
- ORACLE RAC ASM資料檔案遷移OMF檔案報錯ORA-01276解決OracleASM
- 1.0 ORACLE到MYSQL資料遷移方式選型OracleMySql
- mysql檔案複製遷移MySql
- Laravel 遷移檔案生成包Laravel
- 表空間與資料檔案的offline和online操作
- 資料庫課程作業筆記 - 編寫資料庫遷移檔案資料庫筆記
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- OMF管理自動新增資料檔案指令碼add_datafile.sh指令碼
- 按檔案或扇區方式遷移資料到另一儲存,完成恢復工作
- Oracle官方推薦的資料遷移方式評估Oracle
- 【BBED】使用BBED修改資料檔案SCN,使該檔案從offline轉變為online
- 【北亞資料恢復】MongoDB資料遷移檔案丟失的MongoDB資料恢復案例資料恢復MongoDB
- SQLServer移動資料檔案SQLServer
- Kafka資料遷移Kafka
- Harbor資料遷移
- gitlab資料遷移Gitlab
- 資料庫遷移資料庫
- 資料檔案遷移至其他磁碟組
- 杉巖資料:如何在7天內跨資料中心遷移1 PB檔案?
- 阿里雲NAS檔案遷移專案實踐阿里
- 資料遷移(1)——通過資料泵表結構批量遷移
- 利用java建立檔案或者資料夾Java
- Mysql資料遷移方法MySql
- 【Hive】hive資料遷移Hive
- 【Redis】 redis資料遷移Redis
- redis資料庫遷移Redis資料庫
- congregate遷移gitlab資料Gitlab