Home  >  Article  >  Database  >  【翻译自mos中文文章】重建控制文件的方法

【翻译自mos中文文章】重建控制文件的方法

WBOY
WBOYOriginal
2016-06-07 15:59:061050browse

重建控制文件的方法 参考原文: How to Recreate a Controlfile (Doc ID 735106.1) 适用于: Oracle Database - Enterprise Edition - Version 9.0.1.0 and later Information in this document applies to any platform. 解决方案: 警告: 只有遇到下列场

重建控制文件的方法

参考原文:
How to Recreate a Controlfile (Doc ID 735106.1)

适用于:
Oracle Database - Enterprise Edition - Version 9.0.1.0 and later
Information in this document applies to any platform.

解决方案:

警告:
只有遇到下列场景时,你才应该recreate 你的控制文件

1.所有的当前的控制文件copies 已经丢失 或者 都已经损坏(corrupted)
2.你正在restore一个backup,在此backup中控制文件已经损坏 或者丢失(missing)
3.你需要在控制文件中改变一个hard limit 的数据库参数(database parameter)
4.如果你正在move 你的database 到一个server上,并且files位于不同的location上。
5. oracle 技术支持人员建议你重建控制文件。

第一种情况:在已经存在的db中(并且该db是mount or open状态)建立一个新的controlfile

首先,必须生成一个控制文件的ascii dump文件
SQL> alter database backup controlfile to trace;

该trace文件被生成在udump目录下:
SQL> show parameter user_dump_dest

NAME TYPE VALUE
-------------- ------ ------------------------------------------------
user_dump_dest string /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace

到/oracle/product/11.1.0/db_1/diag/rdbms/V11/trace目录下,按照时间排序:
% cd /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace
% ls -ltr

一旦定位到该文件,该文件会与一般的trace file一样显示如下:
Trace file /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace/V11_ora_31225.trc
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /oracle/product/11.1.0/db_1

你感兴趣的是 包括 控制文件创建脚本的那一段。
修改trace file 并用修改后的脚本来建立控制文件

CREATE CONTROLFILE REUSE DATABASE "V11" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/V11/redo01.log' SIZE 50M,
GROUP 2 '/oradata/V11/redo02.log' SIZE 50M,
GROUP 3 '/oradata/V11/redo03.log' SIZE 50M
DATAFILE
'/oradata/V11/system01.dbf',
'/oradata/V11/sysaux01.dbf',
'/oradata/V11/undotbs01.dbf',
'/oradata/V11/user01.dbf'
CHARACTER SET WE8MSWIN1252
;

--->请特别注意:CHARACTER SET WE8MSWIN1252 可以由 alert_sid.log中得到。

ALTER TABLESPACE TEMP_TEST ADD TEMPFILE '/oradata/V11/temp01.dbf' reuse;

"CREATE CONTROLFILE"之前的任何东西请删掉,
CHARACTER SET之后的任何东西请删掉,一定要保留那个分号
在上面的例子中,我们选择了NORESETLOGS 选项,并且该db运行于archivelog模式下。
请务必保证使用shutdown immediate选项来关闭数据库。然后启动到nomount状态下:
SQL> shutdown immediate;
SQL> startup nomount;
SQL>@control.sql

注意:当重建控制文件完毕后,务必保证添加已经存在temp file:
alter tablespace temp_ts add tempfile '?/oradata/V11/temp01.dbf'? reuse;
控制文件一旦被创建,db 被自动带入到mounted 状态。如果你使用了resetlogs打开了database,请尽快做一个backup

第二种情况:该db无法到mount 状态
1.要么restore 控制文件,
2.要么有一个重建控制文件的脚本,如下是一个例子:

CREATE CONTROLFILE REUSE DATABASE "DBNAME" NORESETLOGS ARCHIVELOG
Follow the format listing:
- Location of redo logs.
- Location of datafiles
- Specifying the characterset.

Once you have listed all files correctly you are ready to recreate your controlfile
SQL> startup nomount;
SQL>@control.sql

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:MongoDB:数据模型介绍Next article:OBIEE开发手册