使用 SQLPLUS oracle 创建控制文件

Create Controlfile using SQLPLUS oracle

我需要有关使用 sqlplus 创建控制文件的帮助。我已经使用了后续步骤,我更改了 spfile,关闭数据库,启动 nomount,使用下一个命令创建控制文件但它失败了:

create controlfile
set database orcl
logfile controlnew1   
('\oracle\oradata\orcl\controlnew1.log’,
'\oracle\oradata\orcl\controlnew1.log’)
resetlogs;

我的规范是在位置 CONTROL01 中创建 2 个名为 contronew1 和 controlnew2 的新控制文件。 我在 oracle 文档中找到了相关文章,但我不明白。如果您能帮助解决这个问题,我将不胜感激。

这可能应该进入 DBA 堆栈交换,但我不确定如何实现。

我建议阅读有关 Creating Control Files

的 Oracle 12c 文档

如果您正在创建控制文件,我认为这意味着您没有要复制的现有控制文件。复制一个控制文件比创建一个新的控制文件要简单得多,而且是首选。如果控制文件的所有现有副本都消失了,或者您正在修改控制文件配置或数据库名称,那么您应该只创建一个新的控制文件。

如果您有现有的控制文件可以复制它,您可以:

  • 关闭数据库。
  • 使用操作系统命令将现有控制文件复制到新位置。
  • 编辑数据库初始化参数文件中的CONTROL_FILES参数,添加新的控制文件名,或更改现有的控制文件名。
  • 重新启动数据库。

如果您有一个现有的控制文件,您可以将其写出到 sqlplus 的跟踪文件中(应该转到 diagnostic_dest)。这对于创建或复制控制文件不是必需的,但会有所帮助。

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

如果您无法复制现有的控制文件并需要创建一个新的控制文件,这里有一些关于您的 CREATE CONTROLFILE 命令的注意事项

  • logfile 子句用于指定 REDO 日志,而不是新的控制文件。
  • 您在日志文件 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。