代码之家  ›  专栏  ›  技术社区  ›  DKCroat

使用SQLPLUS oracle创建控制文件

  •  3
  • DKCroat  · 技术社区  · 7 年前

    我需要使用sqlplus创建控制文件的帮助。我使用了接下来的步骤,我更改了spfile,关闭数据库,启动nomount,使用next命令创建控制文件,但失败了:

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

    我的规范是在位置CONTROL01中创建两个名为contronew1和controlnew2的新控制文件。 我在oracle文档中找到了相关的文章,但我不理解。我将感谢任何帮助解决这个问题。

    1 回复  |  直到 7 年前
        1
  •  2
  •   axg    7 年前

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

    我建议阅读Oracle的12c文档 Creating Control Files

    如果您正在创建控制文件,我假设这意味着您没有要复制的现有控制文件。复制控制文件比创建新的控制文件简单得多,这是首选。只有当控制文件的所有现有副本都已丢失或正在修改控制文件配置或数据库名称时,才应创建新的控制文件。

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

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

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

    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    

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

    • logfile子句用于指定重做日志,而不是新的控制文件。
    • 您在logfile controlnew1中具有相同的文件名
    • 你没有任何数据文件

    下面是oracle创建控制文件的示例。创建新控制文件的第一步是列出数据库的所有数据文件和重做日志文件。重做日志文件将放在日志文件部分,数据文件将放在数据文件部分。

    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\u FILES init参数并打开数据库。根据数据库的状态,您可能需要在打开数据库之前进行额外的恢复,并且可能需要使用

    ALTER DATABASE OPEN RESETLOGS;
    

    如果您的控制文件使用了RESETLOGS。