移動控制文件

控制文件一個數據庫一個就行,但一般不止一個,因爲若那一個不慎壞了丟了那數據庫裏的數據也就差不多沒了,所以一般數據庫要有多個控制文件,他們都是一樣的,分別放在不同的地方

查看控制文件相關信息:

SQL> conn sys/orcl as sysdba
已連接。
SQL> select type,record_size,records_total,records_used from
  2  v$controlfile_record_section
  3  where type in('datafile','tablespace','redo log');

未選定行

record_size:每記錄字節數,records_total:記錄總數,records_used:使用的記錄個數
這裏未選定行是因爲後面where子句限制了,可能那些沒有任何東東,下面演示一個不限制的。

有錯誤,待會。暫定問題4.


用數據字典V$parameter或v$controlfile獲取控制文件的名字:

SQL> select value from v$parameter
  2  where name='control_files';

VALUE
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL, C:\ORACLE\PRODUCT\10.2.0\OR
ADATA\ORCL\CONTROL02.CTL, C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL

SQL> col name for a55
SQL> select * from v$controlfile;

STATUS  NAME                                                    IS_ BLOCK_SIZE
------- ------------------------------------------------------- --- ----------
FILE_SIZE_BLKS
--------------
        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL     NO       16384
           430

        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL     NO       16384
           430

        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL     NO       16384
           430
第一個僅僅是給出了控制文件的名字和位置,第二個明顯要詳細得多,大小一樣,存儲方式都不是BLOCK。
而且兩種方法都可以看的出控制文件都存在同一個目錄下,這是不必要也是非常危險的。

不過這個430是神馬東東?求指導!


下面開始複製控制文件:
準備工作在cmd中:
切換到控制文件所在的目錄:
C:\>cd c:\oracle\product\10.2.0\oradata\orcl

C:\oracle\product\10.2.0\oradata\orcl>dir *.ctl
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\oracle\product\10.2.0\oradata\orcl 的目錄

2012-04-25  14:07         7,061,504 CONTROL01.CTL
2012-04-25  14:07         7,061,504 CONTROL02.CTL
2012-04-25  14:07         7,061,504 CONTROL03.CTL
               3 個文件     21,184,512 字節
               0 個目錄  6,681,051,136 可用字節

C:\oracle\product\10.2.0\oradata\orcl>cd c:\

新建三個目錄:
C:\>mkdir disk3\orcl

C:\>mkdir disk6\orcl

C:\>mkdir disk9\orcl

查看:
C:\>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\ 的目錄

2012-04-20  20:10                 0 AUTOEXEC.BAT
2012-04-20  20:10                 0 CONFIG.SYS
2012-04-25  14:53    <DIR>          disk3
2012-04-25  14:53    <DIR>          disk6
2012-04-25  14:53    <DIR>          disk9
2012-04-20  20:15    <DIR>          Documents and Settings
2012-04-20  21:43    <DIR>          oracle
2012-04-23  22:45    <DIR>          PerfLog
2012-04-25  14:05    <DIR>          Program Files
2012-04-25  14:51    <DIR>          TEMP
2012-04-20  20:20    <DIR>          WINDOWS
               2 個文件              0 字節
               9 個目錄  6,681,042,944 可用字節

切換sqlplus窗口:
首先查看自己的數據庫系統使用的是正文初始化參數文件(pfile)還是服務器初始化參數文件(spfile):

SQL> show parameter pfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      C:\ORACLE\PRODUCT\10.2.0\DB_1\
                                                 DBS\SPFILEORCL.ORA

是後者。

SQL> select * from v$controlfile;

STATUS  NAME                                                    IS_ BLOCK_SIZE
------- ------------------------------------------------------- --- ----------
FILE_SIZE_BLKS
--------------
        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL     NO       16384
           430

        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL     NO       16384
           430

        C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL     NO       16384
           430


SQL> alter system set control_files=
  2  'c:\disk3\orcl\control01.ctl',
  3  'c:\disk6\orcl\control02.ctl',
  4  'c:\disk9\orcl\control03.ctl'
  5  scope=spfile;

系統已更改。

SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。

SQL> host copy c:\oracle\product\10.2.0\oradata\orcl\control01.ctl c:\disk3\control01.ctl;(複製成功時會閃過一個命令提示符窗口)

SQL> host copy c:\oracle\product\10.2.0\oradata\orcl\control02.ctl c:\disk6\control02.ctl

SQL> host copy c:\oracle\product\10.2.0\oradata\orcl\control03.ctl c:\disk9\control03.ctl;

切換cmd查看:
C:\>dir disk3 disk6 disk9
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk3 的目錄

2012-04-25  15:01    <DIR>          .
2012-04-25  15:01    <DIR>          ..
2012-04-25  14:56         7,061,504 control01.ctl
2012-04-25  14:53    <DIR>          orcl
               1 個文件      7,061,504 字節

 C:\disk6 的目錄

2012-04-25  15:02    <DIR>          .
2012-04-25  15:02    <DIR>          ..
2012-04-25  14:56         7,061,504 control02.ctl
2012-04-25  14:53    <DIR>          orcl
               1 個文件      7,061,504 字節

 C:\disk9 的目錄

2012-04-25  15:02    <DIR>          .
2012-04-25  15:02    <DIR>          ..
2012-04-25  14:56         7,061,504 control03.ctl
2012-04-25  14:53    <DIR>          orcl
               1 個文件      7,061,504 字節
               3 個目錄  6,637,502,464 可用字節

切回:
SQL> startup
ORACLE 例程已經啓動。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              88081764 bytes
Database Buffers           75497472 bytes
Redo Buffers                2945024 bytes
ORA-00205: ?????????, ??????, ???????

 

這裏出現了一個問題3,我就怕這個問題,上回就是這個練習折騰了好久說。。。這次不知會怎樣了又。。

好了,是因爲將新的控制文件名添加到參數文件的control_file參數中時出錯了,導致數據庫啓動時找不到控制文件而失敗。現改正如下:

啓用DOS窗口(我前面都是說cmd窗口,我說的是一個意思,只是忘了專有名詞了。。。)先登錄sqlplus /nolog
SQL> host copy c:\disk3\control01.ctl c:\disk3\orcl\control01.ctl
已複製         1 個文件。

SQL> host copy c:\disk6\control02.ctl c:\disk6\orcl\control02.ctl
已複製         1 個文件。

SQL> host copy c:\disk9\control03.ctl c:\disk9\orcl\control03.ctl
已複製         1 個文件。

再調用一個DOS窗口或先退出sql,查看一下:
C:\>dir disk3\orcl disk6\orcl disk9\orcl
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk3\orcl 的目錄

2012-04-25  19:50    <DIR>          .
2012-04-25  19:50    <DIR>          ..
2012-04-25  14:56         7,061,504 control01.ctl
               1 個文件      7,061,504 字節

 C:\disk6\orcl 的目錄

2012-04-25  19:51    <DIR>          .
2012-04-25  19:51    <DIR>          ..
2012-04-25  14:56         7,061,504 control02.ctl
               1 個文件      7,061,504 字節

 C:\disk9\orcl 的目錄

2012-04-25  19:51    <DIR>          .
2012-04-25  19:51    <DIR>          ..
2012-04-25  14:56         7,061,504 control03.ctl
               1 個文件      7,061,504 字節
               2 個目錄  6,603,849,728 可用字節

好了,正常。直接在硬盤上也可以找到的。

SQL> conn sys/ as sysdba
輸入口令:
已連接到空閒例程。
SQL> startup
ORACLE 例程已經啓動。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              88081764 bytes
Database Buffers           75497472 bytes
Redo Buffers                2945024 bytes
數據庫裝載完畢。
數據庫已經打開。

檢查一下:
SQL> col name for a55
SQL> select * from v$controlfile;

STATUS  NAME                                                    IS_ BLOCK_SIZE
------- ------------------------------------------------------- --- ----------
FILE_SIZE_BLKS
--------------
        C:\DISK3\ORCL\CONTROL01.CTL                             NO       16384
           430

        C:\DISK6\ORCL\CONTROL02.CTL                             NO       16384
           430

        C:\DISK9\ORCL\CONTROL03.CTL                             NO       16384
           430

一切正常。

最後一步,把原來的、搞錯的控制文件刪除。可以手動,可以代碼。

代碼:
切換目錄:C:\Documents and Settings\Administrator>cd c:\oracle\product\10.2.0\oradata\or


查看:C:\oracle\product\10.2.0\oradata\orcl>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\oracle\product\10.2.0\oradata\orcl 的目錄

2012-04-20  21:50    <DIR>          .
2012-04-20  21:50    <DIR>          ..
2012-04-25  14:56         7,061,504 CONTROL01.CTL
2012-04-25  14:56         7,061,504 CONTROL02.CTL
2012-04-25  14:56         7,061,504 CONTROL03.CTL
2012-04-25  20:09       104,865,792 EXAMPLE01.DBF
2012-04-25  20:09        52,429,312 REDO01.LOG
2012-04-25  20:09        52,429,312 REDO02.LOG
2012-04-25  20:09        52,429,312 REDO03.LOG
2012-04-25  20:09       251,666,432 SYSAUX01.DBF
2012-04-25  20:09       503,324,672 SYSTEM01.DBF
2012-04-23  22:20        22,028,288 TEMP01.DBF
2012-04-25  20:09        41,951,232 UNDOTBS01.DBF
2012-04-25  20:09         5,251,072 USERS01.DBF
              12 個文件  1,107,559,936 字節
               2 個目錄  6,601,113,600 可用字節

3個控制文件。刪除:

C:\oracle\product\10.2.0\oradata\orcl>del contro*

查看:
C:\oracle\product\10.2.0\oradata\orcl>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\oracle\product\10.2.0\oradata\orcl 的目錄

2012-04-25  20:19    <DIR>          .
2012-04-25  20:19    <DIR>          ..
2012-04-25  20:09       104,865,792 EXAMPLE01.DBF
2012-04-25  20:09        52,429,312 REDO01.LOG
2012-04-25  20:09        52,429,312 REDO02.LOG
2012-04-25  20:09        52,429,312 REDO03.LOG
2012-04-25  20:09       251,666,432 SYSAUX01.DBF
2012-04-25  20:09       503,324,672 SYSTEM01.DBF
2012-04-23  22:20        22,028,288 TEMP01.DBF
2012-04-25  20:09        41,951,232 UNDOTBS01.DBF
2012-04-25  20:09         5,251,072 USERS01.DBF
               9 個文件  1,086,375,424 字節
               2 個目錄  6,622,322,688 可用字節

沒了
切換目錄,這回是搞錯的。。。:
C:\oracle\product\10.2.0\oradata\orcl>cd c:\disk3

C:\disk3>del contro*

C:\disk3>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk3 的目錄

2012-04-25  20:20    <DIR>          .
2012-04-25  20:20    <DIR>          ..
2012-04-25  19:50    <DIR>          orcl
               0 個文件              0 字節
               3 個目錄  6,629,384,192 可用字節

C:\disk3>cd orcl

C:\disk3\orcl>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk3\orcl 的目錄

2012-04-25  19:50    <DIR>          .
2012-04-25  19:50    <DIR>          ..
2012-04-25  20:09         7,061,504 control01.ctl
               1 個文件      7,061,504 字節
               2 個目錄  6,629,384,192 可用字節

C:\disk3\orcl>cd disk6
系統找不到指定的路徑。

C:\disk3\orcl>del control*

手賤刪錯了。。。暫定問題5。。。

C:\disk3\orcl>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk3\orcl 的目錄

2012-04-25  20:20    <DIR>          .
2012-04-25  20:20    <DIR>          ..
               0 個文件              0 字節
               2 個目錄  6,636,445,696 可用字節

C:\disk3\orcl>cd disk9
系統找不到指定的路徑。

C:\disk3\orcl>cd disk9
系統找不到指定的路徑。

C:\disk3\orcl>cd c:\disk9

C:\disk9>del contro*

C:\disk9>cd c:\disk6

C:\disk6>del contro*

C:\disk6>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk6 的目錄

2012-04-25  20:29    <DIR>          .
2012-04-25  20:29    <DIR>          ..
2012-04-25  19:51    <DIR>          orcl
               0 個文件              0 字節
               3 個目錄  6,649,733,120 可用字節

C:\disk6>cd orcl

C:\disk6\orcl>dir
 驅動器 C 中的卷沒有標籤。
 卷的序列號是 F858-0D2D

 C:\disk6\orcl 的目錄

2012-04-25  19:51    <DIR>          .
2012-04-25  19:51    <DIR>          ..
2012-04-25  20:09         7,061,504 control02.ctl
               1 個文件      7,061,504 字節
               2 個目錄  6,649,667,584 可用字節


氣死我啦!!!

所以啊,手動吧親!!!

還有啊,備份啊備份啊親,很重要!!我居然漏了這一步。。。。我恨啊!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章