您好,登錄后才能下訂單哦!
本篇內容介紹了“數據庫重命名和遷移日志文件、數據文件的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
目的:在某些情況下,數據文件或者日志文件必須被重新命名或遷移到新的位置上,然而想要讓這些文件仍然有效,那么就需要為這些文件定義一個物理的名字或者物理位置,例如,在以下情況發生時,就需要重新命名數據文件或者日志文件:
1.出于性能或者維護原因,需要將一個數據庫文件移動到一個不同的磁盤上
2.從備份中恢復一個數據文件,但是這個以前存放數據文件的磁盤已經崩潰,那么就需要將這個數據文件重新分配到一個新的磁盤上
3.在操作系統級別,已經移動或者重命名一個數據文件,但是在數據庫層即數據庫內卻沒有進行重命名,在數據庫啟動的過程中得到 ORA-01157 和 ORA-01110 報錯信息。如果數據庫處于打開狀態下,在操作系統級別重命名了數據文件或者移動了數據文件到其他的位置,當通過normal 或者 immediate 方式關閉數據庫的時候,會得到 ORA-01116 和 ORA-01110 報錯;
以下將通過三個方面來對本主題進行相關的討論:
I 數據庫打開的狀態下,重命名或者移動數據文件
II 數據庫關閉的狀態下,重命名或者移動數據文件
III 重命名或者移動日志文件
【注意】
如果要重命名或者移動的數據文件是 SYSTEM 表空間中的文件,那么,必須用第 II 種方法來達到最終的目的即“數據庫關閉的狀態下,重命名或者移動數據文件”,因為在數據庫打開的狀態下,不能夠讓 SYSTEM 表空間出于 OFFLINE 即離線的狀態;
下面分別來對不同的情景進行說明:
I 數據庫打開的狀態下,重命名或者移動數據文件
在數據庫出于打開的狀態下,可以對數據文件進行重新命名或者移動,但是,表空間必須被置于READ-ONLY狀態。在 READ-ONLY 狀態下,用戶可以對這個表空間進行SELECT操作,但不能對表空間進行INSERTS UPDATES 和 DELETES 操作。表空間READ-ONLY狀態需要的總時間,取決于數據文件的大小和將一個數據文件從一個位置拷貝到一個新位置的時間消耗
將表空間置于READ-ONLY狀態,凍結文件頭,從而阻止數據文件頭被更新。只有在數據文件處于 READ-ONLY狀態下,才有可能在數據庫出于打開的狀態下,對文件進行拷貝。
通過以下的步驟來達到重命名或者移動數據文件的目的,本例中,以 USERS 表空間為數據文件所在的表空間:
1. 查看 USERS表空間中有多少數據文件
SQL>select file_name, status from dba_data_files where tablespace_name = 'USERS';
FILE_NAME STATUS
------------------------------------------------------
/u01/oradata/test/users01.dbf AVAILABLE
2. 確保,在返回的查詢結果中,所有數據文件的狀態即STATUS的值都是 AVAILABLE
3. 將 USERS表空間置為 READ ONLY狀態
altertablespace users read only;
4. 確保 USERS表空間在數據字典中已經被置于 READ ONLY狀態
SQL>select tablespace_name, status from dba_tablespaces where tablespace_name ='USERS';
TABLESPACE_NAME STATUS
---------------------------------------
USERS READ ONLY
5. 使用操作系統命令,將數據文件拷貝到一個新的位置。當數據文件被拷貝到一個新的位置之后,需要做的也是最重要的就是要比較兩個數據文件的大小是否一致,因為可能在復制的過程中出現數據丟失的情況
ORACLE> cp /u01/oradata/test/users01.dbf /jiachunyun/test/users01.dbf
注意哦:同樣,可以利用上面的方法,進行數據文件的重命名,也改變數據文件的位置。(我只改變了位置/jiachunyun/test)
6. 當數據文件已經拷貝到新的位置之后,將USERS表空間置于 OFFLINE狀態
altertablespace users offline;
7. 當表空間被置于 OFFLINE狀態時,需要做的是在數據庫層重新命名數據文件到新的位置上,這個操作會更新控制文件中的數據文件的位置信息
alter database rename file '/u01/oradata/test/users01.dbf' to '/jiachunyun/test/users01.dbf';
8. 當確認所有的 rename操作完成之后,將 USERS表空間上線即 ONLINE
alter tablespace users online;
9. 當將表空間重新置為 ONLINE狀態,需要將表空間重新置為 READ WRITE即讀寫狀態
alter tablespace users read write;
10. 檢查表空間的狀態是否為READ WRITE狀態
SQL>select tablespace_name, status from dba_tablespaces where tablespace_name ='USERS';
TABLESPACE_NAME STATUS
---------------------------------------
USERS ONLINE
11. 查看修改后的數據文件的位置
SQL>select file_name, status from dba_data_files where tablespace_name = 'USERS';
FILE_NAME STATUS
------------------------------------------------------
/jiachunyun/test/users01.dbf AVAILABLE
13. 在操作系統級別,在原來的舊的目錄中,將舊的數據文件刪除
ORACLE> rm -rf /u01/oradata/test/users01.dbf
II 數據庫關閉的狀態下,重命名或者移動數據文件
1. 查看 USERS表空間中,數據文件的位置
SQL>select file_name,tablespace_name,file_id from dba_data_files wheretablespace_name = 'USERS';
FILE_NAME TABLESPACE_NAME FILE_ID
--------------------------------------------------------------------------- -------
/u01/oradata/users01.dbf USERS 4
2. 關閉數據庫
shutdown immediate
3. 在操作系統級別將數據文件重命名或者移動到新的位置上,或者移動新的位置上并且重命名
ORACLE> cp /u01/oradata/test/users01.dbf /jiachunyun/test/users01.dbf 等
4. 啟動數據庫到 mount狀態
startup mount;
【說明】:這個操作會讀取控制文件,但是不會將數據文件 mount
5. 在數據庫內重新命名數據文件
alter database rename file '/u01/oradata/users01.dbf' to '/jiachunyun/test/users01.dbf';
alter database rename file '/u01/oradata/sysaux01.dbf' to '/jiachunyun/test/sysaux01.dbf';
alter database rename file '/u01/oradata/undotbs01.dbf' to '/jiachunyun/test/undotbs01.dbf';
alter database rename file '/u01/oradata/users01.dbf' to '/jiachunyun/test/users01.dbf';
6. 打開數據庫
alter database open;
7. 查詢 v$dbfile視圖,來確認修改已經成功
SQL>select name from v$datafile ;
NAME
------------------------------------------------
/jiachunyun/test/users01.dbf
/jiachunyun/test/sysaux01.dbf
/jiachunyun/test/undotbs01.dbf
/jiachunyun/test/users01.dbf
/jiachunyun/test/undotb1.dbf
8. 在操作系統級別,將舊的數據文件從舊的目錄位置中刪除
ORACLE>rm -rf /u01/oradata/users01.dbf 等
數據庫關閉的狀態下,重命名或者移動控制文件 【注意】最好分3個不同的磁盤 ,以便壞了一塊磁盤
1. 查看 USERS表空間中,控制文件的位置
SQL>select name from v$controlfile;
NAME
--------------------------------------------------------------------------- -------
/u01/oradata/control01.ctl
/u01/oradata/control02.ctl
2 改變第二個控制文件路徑,并且告訴spfile,(文件有幾個寫幾個,02的原/u01/oradata/test,新/jiachunyun/test)
SQL> alter system set control_files='/u01/oradata/test/control01.ctl','/jiachunyun/test/control02.ctl' scope=spfile;
2. 關閉數據庫
shutdown immediate
3.在操作系統級別將控制文件重命名或者移動到新的位置上,或者移動新的位置上并且重命名
ORACLE> cp /u01/oradata/test/control01.ctl /jiachunyun/test/control02.ctl --02路徑一定要對應上面的alter路徑
4. 啟動數據庫,并驗證
SQL>startup
SQL> select name from v$controlfile;
5.添加第三條控制文件03
SQL>alter system set control_file='/u01/oradata/test/control01.ctl','/jiachunyun/test/control02.ctl','/u01/oradata/test/control03.ctl' scope=spfile;
6. 關閉數據庫
shutdown immediate
7.在操作系統級別將控制文件重命名或者移動到新的位置上,
ORACLE> cp /u01/oradata/test/control01.ctl /jiachunyun/test/control03.ctl
8. 啟動數據庫,并驗證
SQL>startup
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/oradata/test/control01.ctl
/jiachunyun/test/control02.ctl
/u01/oradata/test/control03.ctl
III 重命名或者移動日志文件
1. 關閉數據庫
2. 在操作系統級別,將日志文件重命名或者移動到新的位置上,或者移動新的位置上并且重命名
ORACLE> cp /u01/oradata/test/redo01.log /jiachunyun/test/redo01.log 等
3. 將數據庫啟動到 mount狀態
startup mount
4. 在數據庫級別,重命名日志文件
alter database rename file
'/u01/oradata/test/redo01.log'
to'/jiachunyun/test/redo01.log'; 等
5. 打開數據庫
alter database open;
6. 在操作系統級別,將舊的數據文件從舊的目錄位置中刪除
ORACLE> rm -rf /u01/oradata/test/redo01.log
7.驗證
ORACLE>select mane from v$logfile;
“數據庫重命名和遷移日志文件、數據文件的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。