控制檔案是非常重要的檔案,執行個體讀取控制檔案才能到mount狀態。DBA的一個原則就是多路控制檔案,今天我就做了個實驗,學習了一下這個。
代碼如下:
alter system set control_files='D:\app\wings\oradata\testdb\CONTROL03.CTL','D:\app\wings\oradata\testdb\CONTROL04.CTL' scope=spfile;
查看一下 :
select value from v$spparameter where name = 'control_files';
這個時候就會看到兩條資料了。
然後正常的關掉資料庫:
shutdown immediate;
之後複製一份控制檔案,改成上面的名字。啟動資料庫,再查看控制檔案:
sho parameter control_files;
這時看到的就是兩個控制檔案了。
剛才犯了一個很白癡的錯誤,不妨寫出來,讓大家也笑一個。
step1
alter system set control_files='D:\app\wings\oradata\testdb\CONTROL04.CTL' scope=spfile;
這樣就更改了系統,啟動的話會以04這個檔案啟動。
之後我關掉了資料庫,複製了03這個檔案,命名為04,啟動資料庫一切正常。之後我很2的做了下一步:
step 2
alter system set control_files='D:\app\wings\oradata\testdb\CONTROL03.CTL','D:\app\wings\oradata\testdb\CONTROL04.CTL' scope=spfile;
之後重啟資料庫,很不幸的報錯了:ora-01219。也沒有任何說明,後來百度了一下,這個錯誤說的是我只能查特定的視圖和表。在EM上看了一下,我的資料庫處於nomount,也就是說我的控制檔案在載入的時候出了問題。處理方案也很簡單:
alter system set control_files='D:\app\wings\oradata\testdb\CONTROL04.CTL' scope=spfile;
然後重啟一下就可以了。
當時我百思不得其解,為什麼呢?後來,我做了這麼一步,我又執行了一下step1,不過是把控制檔案換成了03。重啟,之後報錯,提示我控制檔案舊。這個時候我就頓悟了。我忽略了很重要的一點,那就是控制檔案在資料庫啟動之後在不停的被更新著,03這個檔案在幾分鐘沒有被載入的時間裡已經舊了。希望大家不要犯我這個低級錯誤。