这可能应该在 DBA 堆栈交换中进行,但我不确定如何实现。
我建议阅读 Oracle 的 12c 文档Creating Control Files
如果您正在创建控制文件,我认为这意味着您没有要复制的现有控制文件。复制一个控制文件比创建一个新的控制文件简单得多,而且是首选。如果控制文件的所有现有副本都消失了,或者您正在修改控制文件配置或数据库名称,您应该只创建一个新的控制文件。
如果您确实有现有的控制文件可以复制它:
- 关闭数据库。
- 使用操作系统命令将现有控制文件复制到新位置。
- 编辑数据库初始化参数文件中的 CONTROL_FILES 参数以添加新的控制文件名,或更改现有的控制文件名。
- 重启数据库。
如果您有一个现有的控制文件,您可以将其写入 sqlplus 的跟踪文件(应该转到 diagnostic_dest)。这对于创建或复制控制文件不是必需的,但会很有帮助。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
如果您无法复制现有的控制文件并需要创建一个新的控制文件,这里有一些关于您的 CREATE CONTROLFILE 命令的注意事项
- logfile 子句用于指定重做日志,而不是新的控制文件。
- 您在日志文件 controlnew1 中具有相同的文件名
- 您没有任何数据文件
以下是 oracle 的 CREATE CONTROLFILE 示例。创建新控制文件的第一步是列出数据库的所有数据文件和重做日志文件。重做日志文件将放在 LOGFILE 部分,数据文件将放在 DATAFILE 部分。
CREATE CONTROLFILE
SET DATABASE orcl
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
'/u01/oracle/prod/redo01_02.log'),
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
'/u01/oracle/prod/redo02_02.log')
RESETLOGS
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
'/u01/oracle/prod/users01.dbs' SIZE 5M,
'/u01/oracle/prod/temp01.dbs' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;
创建文件后,您需要编辑 CONTROL_FILES 初始化参数并打开数据库。根据您的数据库的状态,您可能需要在打开它之前进行额外的恢复,并且可能需要使用
ALTER DATABASE OPEN RESETLOGS;
如果您的控制文件使用了 RESETLOGS。