下載 Oracle 官方網站上的 Oracle 11g Database Pre-Built 的 VirtualBox 虛擬機器來玩,結果硬碟空間不足。
OPEN_MODE
--------------------
READ WRITE
Pre-Built預設將資料庫安裝在 /home/oracle 底下,而 /home 的硬碟空間有12 G,玩到後來空間已滿。
此時有兩個想法:第一,用 export/import 或 rman;第二,重建 control file
因為只是自己測試用的虛擬機,不想花太久的時間做設定移轉,所以選擇重建 control file
0、在 VirtualBox上新建一個大小為80G的SATA虛擬硬碟後開機,分割及格式化虛擬硬碟
# fdisk /dev/sda
# mek2fs -j /dev/sda1
# vi /etc/fstab --增加新硬碟的mount設定
# mount -a
1、匯出 Control File Trace
SQL> alter database backup controlfile to trace as '/home/oracle/control_trace;
關閉資料庫 shutdown immediate;
2、到 /home/oracle/control_trace 選擇 Set #1 NORESETLOGS case ,
並將 Set #1 的程式碼複製到 /home/oracle/rb_control.sql ,修改內容的路徑。
3、刪除原本所有的 Control file (為了失敗可以還原,所以備份了一個 Control01.ctl)
4、將原本的 data file、redo file 、archive ifle 複製到新建的虛擬硬碟上
5、執行 SQL
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> @/home/oracle/rb_control.sql
6、完成後,查一下現在的模式
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
資料庫已經 OPEN
7、更改 Control file 的路徑(使用 init.ora)
SQL> create pfile from spfile;
SQL> shutdown immediate;
找到 init.ora後,用文字編輯器修改 Control file的路徑
將原本的 Control file 搬移到新路徑上
SQL> startup pfile=init.ora
SQL> create spfile from pfile;
重開資料庫,完成。