將資料搬移到新硬碟,使用重建 control file


下載 Oracle 官方網站上的 Oracle 11g Database Pre-Built 的 VirtualBox 虛擬機器來玩,結果硬碟空間不足。

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;

   重開資料庫,完成。