SkyWorld

Just do what you want
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Oracle 10g 的控制文件(2)——添加控制文件

Posted on 2012-04-08 01:38  SkyWorld  阅读(2682)  评论(0编辑  收藏  举报

  在oracle 10g中,创建好一个数据库,默认会有3个控制文件,control01.ctl,control02.ctl,control03.ctl,我们可以为数据库手动添加一些控制文件。

  在数据打开的情况下,我们可以在sqlplus中通过show parameter control来查看当前所使用的控制文件的情况。

SQL> show parameter control

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
oradata/orcl/control02.ctl, /u
01/app/oracle/oradata/orcl/con
trol03.ctl

  那么接下来的实验,我们将要添加一个控制文件control04.ctl。

  首先,我们通过shutdown immediate关闭当前的数据库。

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

  进到控制文件的目录(/u01/app/oracle/oradata/orcl)中,复制一个控制文件control04.ctl。

[oracle@www orcl]$ cp control01.ctl control04.ctl
[oracle@www orcl]$ ll
total 1448720
-rw-r----- 1 oracle oinstall 7389184 Apr 8 01:08 control01.ctl
-rw-r----- 1 oracle oinstall 7389184 Apr 8 01:08 control02.ctl
-rw-r----- 1 oracle oinstall 7389184 Apr 8 01:08 control03.ctl
-rw-r----- 1 oracle oinstall 7389184 Apr 8 01:10 control04.ctl
...................................

  由于control file的指定信息是在pfile或者spfile中,所以我们需要修改pfile和spfile,通过以下方式修改。

  在sqlplus中执行以下命令,使用当前的spfile文件创建pfile:

SQL> create pfile='/home/oracle/init.ora' from spfile;

File created.

  在oracle用户家目录中会生产一个 init.ora,使用vi命令修改该文件,红色部分为我们新添加的控制文件文件名和路径,修改好之后保持修改,如下所示。

TSH1.__db_cache_size=104857600
TSH1.__java_pool_size=4194304
TSH1.__large_pool_size=4194304
TSH1.__shared_pool_size=121634816
TSH1.__streams_pool_size=8388608
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='DB','EXTENDED'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl','/u01/app/oracle/oradata/orcl/control04.ctl'#Restore Controlfile
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest_size=31457280000
*.db_recovery_file_dest='/home/oracle/area/'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='location=/u01/arch'
*.log_archive_dest_2='location=/u01/arch2'
*.log_archive_dest_state_2='DEFER'
*.open_cursors=300
*.pga_aggregate_target=81788928
*.processes=150


  使用我们修改过的pfile创建一个spfile,如下所示。

SQL> create spfile from pfile='/home/oracle/init.ora';

File created.

  spfile创建成功之后,我们就可以开始打开我们数据库了,如下所示。

SQL> startup 
ORACLE instance started.

Total System Global Area 247463936 bytes
Fixed Size 1218772 bytes
Variable Size 138413868 bytes
Database Buffers 104857600 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.

  我们再来通过show parameter control命令查看我们的控制文件是否添加成功了,如下所示。

SQL> show parameter control;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
oradata/orcl/control02.ctl, /u
01/app/oracle/oradata/orcl/con
trol03.ctl, /u01/app/oracle/or
adata/orcl/control04.ctl

  由上面的结果可知,我们的control04.ctl 已经添加成功了。

  思考:通过以上的方法我们成功地添加了一个控制文件,同样的,我们用这种方法也可以删除一个控制文件。那么在文章《Oracle 10g 的控制文件(1)》中提到的控制文件部分缺失的问题,我们是否可以通过此方法将缺失的控制文件从spfile中去除呢?显然是可以的,但是这也显然不是一个好的方法,第一是太复杂,第二是不安全。