Oracle Data File 為資料庫的實體結構,針對 Data File 可以將其 Resize 或是搬移,如果 Tablespace 空間不足時, DBA 可以選擇為其新增 Data File 或是將原本的 Data File 放大。更改 Data File 大小只需簡單的使用 resize 命令,例如將 users01.dbf 更改大小為 100M :
這邊要注意的是,將 Data File 放大只要作業系統空間足夠,或是沒超過 Small File 的上限 32G 都沒問題,但是 Data File 要縮小的話就不一定能夠成功,要視此 Data File 裡面是否已經分配給資料庫所使用,如果已經被分配的空間就無法回收縮小,此時如果執行 resize 命令就會出現 ORA-03297 錯誤:
Data File 除了可以更改大小外,當 filesystem 空間不足時, Data File 也可以搬移至其他可用空間,搬移 Data File 需要注意的是, Data File 的實體檔案是存放在作業系統上,這個實體的位置我們可以透過作業系統的命令得知,而資料庫所認為的 Data File 位置是紀錄在 Control File 裡,也就是要透過資料庫的 view (v$datafile 或是 dba_data_files) 來得知資料庫所認為的位置,當我們搬移 Data File 時必須要注意實體位置與資料庫認為的位置要相符,否則會造成此 Data File 無法使用。
搬移 Data File 的方式取決於資料庫是否處於 Archive Log Mode,只有在資料庫為 Archive Log Mode 之下才可以線上搬移 Data File,否則就必須把資料庫 shutdown 之後開啟至 mount 模式才能夠搬移 Data File。
在 No Archive Log Mode 搬移 Data File 的步驟如下:
1. Shutdown 資料庫並開啟至 mount (startup mount)
2. 複製或搬移 Data File 實體位置,例如將 user01.dbf 從 /u01 換到 /u02: (mv 或 cp)
3. 使用 sqlplus 進入資料庫更改 control file 裡面的紀錄:
4. 將資料庫開啟 (alter database open) 便完成 Data File 的搬移
在 Archive Log Mode 搬移 Data File 的步驟如下:
1. 將 Data File Offline
2. 複製或搬移 Data File 實體位置,例如將 user01.dbf 從 /u01 換到 /u02: (mv 或 cp)
3. 使用 sqlplus 進入資料庫更改 control file 裡面的紀錄:
4. Recover Data File
5. 將 Data File Online
雖然在 Archive Log 模式之下搬移 Data File 不必關閉資料庫,但是將 Data File Offline 的時候,表示此 Data File 為靜止狀態,暫時脫離資料庫的控管,而此 Data File 相關的資料也就無法讀取,直到再次 Online 的時候才可以使用。由於資料庫是一直處於運行的狀態,所以要將 Data File 再次 Online 的時候必須做 Recover 的動作,目的就是要追上資料庫這段的時間差,否則資料庫會提示 ORA-01113 錯誤:
搬移 Data File 除了使用 sqlplus 之外,另外也可以使用 RMAN 來做搬移更為方便,同樣的是以線上搬移 user01.dbf 為例:
1. 將 Data File Offline
2. 複製 user01.dbf 至 /u02 底下
3. 使用 switch 命令更改 control file 裡面的紀錄
4. Recover Data File
5. 將 Data File Online
與 sqlplus 的差別在於,RMAN 的 copy 命令會於作業系統上複製檔案,我們不需要在另外執行作業系統命令去搬移 Data File。
到了 Oracle 12c ,推出了 Online Move Data File 的新功能,只需執行 move datafile 命令便自動幫我們搬移了,過程中無須將 Data File Offline、Online,也無須於作業系統上搬移實體檔,所有的動作都簡化由一個命令自動完成:
經由同樣的方式,我們也可以用來搬移 Redo Log File,但差別在於 Redo Log File 的搬移必須將資料庫啟動在 mount 模式,不可以線上搬移,而且只能透過 sqlplus 來進行:
1. Shutdown 資料庫並開啟至 mount (startup mount)
2. 複製或搬移 Redo Log 實體位置,例如將 redo01.log 從 /u01 換到 /u02: (mv 或 cp)
3. 使用 sqlplus 進入資料庫更改 control file 裡面的紀錄:
4. 將資料庫開啟 (alter database open) 便完成 Redo Log File 的搬移
最後來談一下實體結構的最後一部分,Control File 的搬移。由於 Control File 的位置是記錄在參數檔裡面,因此我們只需要更改參數 control_files 之後將資料庫重啟,就可以搬移 Control Files。例如將 Control Files 搬至 /u02:
1. 更改參數檔
2. 關閉資料庫 (shutdown immediate)
3. 複製或搬移 Control File 實體位置
4. 啟動資料庫 (startup)
不論我們要搬移資料庫的哪一種檔案,都要注意必須與資料庫所記錄的位置相符,因此必須要不斷的透過查詢來確認檔案位置無誤, Data File 相關的 view 為 v$datafile 、 dba_data_files; Redo Log 相關的 view 為 v$log 、 v$logfile,而 Control File 則是直接確認參數檔的內容,使用 show parameter control_files 或是查詢 v$parameter,DBA 必須熟悉這些 view ,有助於 Oracle 資料庫的管理。
沒有留言:
張貼留言