设为首页 加入收藏

TOP

重建控制文件详解(三)
2014-11-24 08:11:53 来源: 作者: 【 】 浏览:7
Tags:重建 控制 文件 详解
ME FILE 'MISSING00030'
TO '/paic/drsh101/stg/ehis/data/oradata/gs01ehis/fwy01.dbf';

-- Online the files in read-only tablespaces.
ALTER TABLESPACE "FWY01" ONLINE;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/paic/drsh101/stg/ehis/data/oradata/gs01ehis/temp01.dbf' REUSE;
-- End of tempfile additions.

主要分为两部分,resetlogs也有noresetlogs的重建控制文件脚本。如果想单独要某部分,分别执行以下语句即可。 alter database backup controlfile to trace as '/tmp/ctl_1.sql' noresetlogs; alter database backup controlfile to trace as '/tmp/ctl_1.sql' resetlogs; \
下面分别来讲解,红框的几种选项。重建控制文件的时候会去数据文件头读db_name,reuse是会参考数据文件头的db_name,而set会将数据文件头的db_name都改成脚本中指定的database "ZXRRIN" 。
SET还是REUSE 假如我选reuse database "ZXRRIN2",而数据文件头是ZXRRIN2,那么会报如下错误。 ORA-01503: CREATE CONTROLFILE failed ORA-01161: database name ZXRRIN in file header does not match given name of ZXRRIN2 ORA-01110: data file 1: '/oradata/zxrrin/zxrrin/system01.dbf' 所以,只有数据文件头的database name与参数文件的db_name一致,才能在重建控制文件时用reuse。当然,用set也没关系。只是将数据文件头的db_name重写成相同的。就如update t set i=3 where i=3一样。如果想改变数据文件头的db_name使他们与起库参数的db_name一致,就当然得用set咯。
database "ZXRRIN" database "ZXRRIN"指定的db_name,要跟起库参数文件的db_name一致,重建控制文件才能成功。 这是必须的,而跟REUSE还是SET等没关系。所以不能用A1起库,然后重建控制文件成A2的db_name哦。
noresetlogs还是resetlogs 重建conrolfile时,假如用的是noresetlogs的选项。那么controlfile里面的系统scn号,以及controlfile里面记录的数据文件scn号,来自Online logs中的Current log头。 所以这个操作的前提是,在线日志完好没有损坏。并且,不会擦除redo log file中的内容与重置redo头的scn号。起库的时候,只能alter database open,而不能alter database open resetlogs。否则会报这个错。 SQL> alter database open noresetlogs; alter database open noresetlogs * ERROR at line 1: ORA-01139: RESETLOGS option only valid after an incomplete database recovery 所以,在重建控制文件时选择noresetlogs,oracle就会认为你想告诉他,“我很可能是不一致关闭的”,既然是不一致关闭,那怎么能alter database open resetlogs呢,所以会报上面的错。在执行”重建控制文件脚本“的时候如果不需要在线重做日志的话可以用resetlogs选项。选择resetlogs,会将redo log file中的内容清空,sequence#由1算起。重建过程中,控制文件中datafile Checkpoint来自各数据文件头。而controlfile中记录的系统scn,会被设为0.可以通过select checkpoint_change# from v$database;看出来。
NOARCHIVELOG还是ARCHIVELOG 重建控制文件脚本中,NOARCHIVELOG与ARCHIVELOG字段,选择重建的控制文件是使库不归档或者归档的。一个 数据库是否开启归档,是在控制文件里面辨析的。
几者之间的关系如果要用set,那么一定要跟resetlogs那一part。因为set会改数据文件头的db_name,那么redo log file中的日志已经没用了,因为应用日志时必须匹配db_name的。假如用set配noresetlogs会出现报错: ORA-01223: RESETLOGS must be specified to set a new database name
关于tempfile 重建的控制文件不包含temp文件,所以重建控制文件脚本中有如下语句, ALTER TABLESPACE TEMP ADD TEMPFILE '/paic/drsh101/stg/ehis/data/oradata/gs01ehis/temp01.dbf' REUSE; 我们也可以拷贝出来,等open库后再执行。 重建控制文件的时候,相应的redo与datafile文件必须已经存在,datafile文件必须是一致的。而tempfile是不必要存在的,起库后,要为temp表空间添加tempfile,否则temp表空间里面空空如也。 ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/zxrrin/zxrrin/temp01.dbf' size 100m reuse autoextend on; 加上reuse是很好的,如果已经存在就覆盖掉,如果不存在就新建上。

这个命令可以备份控制文件成二进制文件。
ALTER DATABASE BACKUP CONTROLFILE TO '/tmp/fwy.ctl';
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇RHEL5使用multipath配置ASMdisk 下一篇insert into select中使用序号

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C/C++ 类模板与模板 (2025-12-27 01:49:52)
·C语言 模板化<templ (2025-12-27 01:49:49)
·C/C++模板类模板与函 (2025-12-27 01:49:46)
·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)