控制文件的移动
在印象中移动控制文件是一件非常简单的事情,但是实际操作中远非书中讲的那么简单,就是半页就完了,今天下午小弟就碰到了一个关于移动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
无法修改,就不能正常启动啊,强行试过,会造成控制文件丢失。
烦请高手予以帮助
在印象中移动控制文件是一件非常简单的事情,但是实际操作中远非书中讲的那么简单,就是半页就完了,今天下午小弟就碰到了一个关于移动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
无法修改,就不能正常启动啊,强行试过,会造成控制文件丢失。
烦请高手予以帮助
-- 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;
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;
'/u01/app/oracle/oradata/saigon/control02.ctl',
'/u01/app/oracle/oradata/saigon/control03.ctl' scope=spfile
每一个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;通过以上几个步骤就可以轻松的将控制文件进行转移备份。
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
数据库装载完毕。
数据库已经打开。
-- 打开成功!