控制文件的移动
在印象中移动控制文件是一件非常简单的事情,但是实际操作中远非书中讲的那么简单,就是半页就完了,今天下午小弟就碰到了一个关于移动Oracle控制文件的问题,敬请各位大大给予帮助。
SQL> connect sys/sys as sysdba
Connected.
SQL> col name for a60
SQL> select * from v$controlfile;STATUS  NAME                                                         IS_        
------- ------------------------------------------------------------ ---        
        D:\ORADATA\TEST\CONTROL01.CTL                                NO         
        D:\ORADATA\TEST\CONTROL02.CTL                                NO         
        D:\ORADATA\TEST\CONTROL03.CTL                                NO         SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host copy d:\oradata\test\CONTROL03.CTL d:\oradata\cp\CONTROL03.CTL;SQL> create pfile from spfile;File created.SQL> alter system set control_file='d:\oradata\test\CONTROL01.CTL','d:\oradata\test\CONTROL02.CTL','d:\oradata\cp\CONTROL03.CTL'scope=spfile;
alter system set control_file='d:\oradata\test\CONTROL01.CTL','d:\oradata\test\CONTROL02.CTL','d:\oradata\cp\CONTROL03.CTL'scope=spfile
*
ERROR at line 1:
ORA-01034: ORACLE not available 
ORA-01034: ORACLE 不可用SQL> connect sys/sys as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.Total System Global Area  171966464 bytes                                       
Fixed Size                   787988 bytes                                       
Variable Size             145488364 bytes                                       
Database Buffers           25165824 bytes                                       
Redo Buffers                 524288 bytes                                       
Database mounted.
SQL> alter system set control_files='D:\oradata\test\CONTROL01.CTL',
  2  'D:\oradata\test\CONTROL02.CTL',
  3  'D:\oradata\cp\CONTROL03.CTL' scope=both;
alter system set control_files='D:\oradata\test\CONTROL01.CTL',
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified 
ORA-02095: 无法修改指定的初始化参数
SQL> spool off
无法修改,就不能正常启动啊,强行试过,会造成控制文件丢失。
烦请高手予以帮助

解决方案 »

  1.   

    -- Step 1: create pfile='D:\init.ora' from spfile;
    -- Step 2: 查看当前控制文件所在的路径:
    select name from v$controlfile;-- Step 2: 修改 pfile 文件中的控制文件,指向新的路径下-- Step 3: shutdown immediate;-- Step 4: 拷贝控制文件到新的 Step 2 指定的路径下-- Step 5: startup pfile='D:\init.ora';-- Step 6: create spfile from pfile='D:\init.ora';-- Step 7: shutdown immediate;-- Step 8: startup;-- Step 9: 查看修改后控制文件所在的路径:
    select name from v$controlfile;
      

  2.   

    -- Step 1: 创建 pfile 文件到指定路径,方便查看
    create pfile='D:\init.ora' from spfile;-- Step 2: 查看当前控制文件所在的路径:
    select name from v$controlfile;-- Step 3: 修改 pfile 文件中的控制文件,指向新的路径下-- Step 4: 
    shutdown immediate;-- Step 5: 拷贝控制文件到新的 Step 3 指定的路径下-- Step 6: 
    startup pfile='D:\init.ora';-- Step 7: 
    create spfile from pfile='D:\init.ora';-- Step 8: 
    shutdown immediate;-- Step 9: 
    startup;-- Step 10: 查看修改后控制文件所在的路径:
    select name from v$controlfile;
      

  3.   

    alter system set control_files='/u01/app/oracle/oradata/saigon/control01.ctl',
                                   '/u01/app/oracle/oradata/saigon/control02.ctl',
                                   '/u01/app/oracle/oradata/saigon/control03.ctl' scope=spfile
      

  4.   

    oracle控制文件的管理
    每一个Oracle数据库都有一个控制文件.这个控制文件是Oracle能够正常工作一个前提.控制文件一般有三个功能:一记录着物理磁盘上信息。二记录Oracle数据库本身逻辑结构.三:起到一个全局监管作用.它一般包括以下几个部分:
    数据库名称;
    Oracle数据文件与日志文件在磁盘上信息;
    数据库创建时间
    如果控制文件损失那么Oracle数据库就不能下常启动,理论上只能启动到MOUNT状态.因为控制文件如此重要,Oracle允许同时可以镜像多个控制文件.
    当数据库启动时候,控制文件中记录Oracle数据文件与日志文件必须要被Oracle进程所读取.数据库结构变化也随时记录在控制文件中.控制文件对Oracle恢复也启着非常大作用.
    第一步:首先准备好实验环境:创建虚拟的硬盘和对对应的硬盘文件进行授予权限 第二步:先查看数据字典中控制文件的信息,以方便后续的比对。
     第三步:将控制文件拷贝对应的磁盘中的文件夹里
     第四步:为了保险起见先对控制文件进行一次备份
    alter database backup controlfile to 'd:\back\control.bak' 第五步:在文件复制完毕运用操作系统命令查看文件是否复制完毕
       第六步:确认文件没有因为失误将控制文件移走select * from v$controlfile;
     第七步:设置控制文件的的新的位置alter system set control_files='d:\app\oracle\oradata\control01.ctl',
      'd:\app\oracle\oradata\control02.ctl',
      'd:\app\oracle\oradata\control03.ctll' scope=spfile 第八步:关闭数据库,然后启动数据库并根据启动信息查看是否加载控制文件出错与否。shutdown 
      第九步:重新启动数据库后查看控制文件相关视图确认控制文件的转移是否成功。
    select * from v$controlfile;通过以上几个步骤就可以轻松的将控制文件进行转移备份。
      

  5.   

    -- 6 楼的方法可行,但是存在一定的风险,操作示例如下:sys@SZTYORA> alter database backup controlfile to 'd:\back\control.bak'
      2  /数据库已更改。已用时间:  00: 00: 01.76
    sys@SZTYORA> select name from v$controlfiles;
    select name from v$controlfiles
                     *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    已用时间:  00: 00: 00.03
    sys@SZTYORA> select name from v$controlfile;NAME
    ------------------------------------------------------------------------------------------------------------------------
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL01.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL02.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL03.CTL已选择3行。已用时间:  00: 00: 00.03
    -- 拷贝 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA 目录下的3个控制文件到 D:\oracle\product\10.2.0\oradata\control_file 目录下
    sys@SZTYORA> alter system set control_files='D:\oracle\product\10.2.0\oradata\control_file\CONTROL01.CTL',
      2    'D:\oracle\product\10.2.0\oradata\control_file\CONTROL02.CTL',
      3    'D:\oracle\product\10.2.0\oradata\control_file\CONTROL03.CTL' scope=spfile;系统已更改。已用时间:  00: 00: 00.06
    sys@SZTYORA> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    sys@SZTYORA> startup
    ORACLE 例程已经启动。Total System Global Area  536870912 bytes
    Fixed Size                  1249992 bytes
    Variable Size             167775544 bytes
    Database Buffers          360710144 bytes
    Redo Buffers                7135232 bytes
    数据库装载完毕。
    数据库已经打开。
    -- 拷贝 D:\oracle\product\10.2.0\oradata\control_file 目录下的3个控制文件到 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA 目录下 (将原有的文件替换,当然可以先备份)sys@SZTYORA> alter system set control_files='D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL01.CTL',
      2    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL02.CTL',
      3    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\CONTROL03.CTL' scope=spfile;系统已更改。已用时间:  00: 00: 00.11
    sys@SZTYORA> create pfile from spfile;文件已创建。已用时间:  00: 00: 00.12
    sys@SZTYORA> select name from v$controlfile; -- 看到控制文件路径已经变更!NAME
    ------------------------------------------------------------------------------------------------------------------------
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\CONTROL_FILE\CONTROL01.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\CONTROL_FILE\CONTROL02.CTL
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\CONTROL_FILE\CONTROL03.CTL已选择3行。已用时间:  00: 00: 00.00
    sys@SZTYORA> select tablespace_name from dba_tablespaces;  -- 执行删除一个用户及其表空间的操作!TABLESPACE_NAME
    ------------------------------------------------------------
    SYSTEM
    SYSAUX
    TEMP
    USERS
    UNDOTBS2
    EYGLE
    OMF
    SCOTT2_TBS
    PERFSTAT已选择9行。已用时间:  00: 00: 00.03
    sys@SZTYORA> drop user eygle cascade;用户已删除。已用时间:  00: 00: 24.64
    sys@SZTYORA> drop tablespace eygle including contents and datafiles;表空间已删除。已用时间:  00: 00: 03.75
    sys@SZTYORA> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    sys@SZTYORA> startup;
    ORACLE 例程已经启动。Total System Global Area  536870912 bytes
    Fixed Size                  1249992 bytes
    Variable Size             171969848 bytes
    Database Buffers          356515840 bytes
    Redo Buffers                7135232 bytes
    数据库装载完毕。
    ORA-01122: 数据库文件 1 验证失败
    ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\SYSTEM01.DBF'
    ORA-01207: 文件比控制文件更新 - 旧的控制文件
    sys@SZTYORA> shutdown immediate;
    ORA-00600: 内部错误代码, 参数: [2141], [3360099376], [3360050080], [], [], [], [], []
    sys@SZTYORA> startup;
    ORA-03113: 通信通道的文件结束-- 此时再次:拷贝 D:\oracle\product\10.2.0\oradata\control_file 目录下的3个控制文件到 D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA 目录下,替换原有文件
    sys@SZTYORA> conn / as sysdba
    已连接到空闲例程。
    idle> startup;
    ORACLE 例程已经启动。Total System Global Area  536870912 bytes
    Fixed Size                  1249992 bytes
    Variable Size             171969848 bytes
    Database Buffers          356515840 bytes
    Redo Buffers                7135232 bytes
    数据库装载完毕。
    数据库已经打开。
    -- 打开成功!