控制文件一个数据库一个就行,但一般不止一个,因为若那一个不慎坏了丢了那数据库里的数据也就差不多没了,所以一般数据库要有多个控制文件,他们都是一样的,分别放在不同的地方
查看控制文件相关信息:
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 可用字节
气死我啦!!!
所以啊,手动吧亲!!!
还有啊,备份啊备份啊亲,很重要!!我居然漏了这一步。。。。我恨啊!!