版本:7.0.0

ALTER DATABASE ​

功能描述 ​

ALTER DATABASE用于修改数据库。

注意事项 ​

  • 被授予了ALTER DATABASE权限的用户才能执行该命令。

语法格式 ​

  • 指定数据库状态为MOUNT或者OPEN

    ALTER DATABASE [ database_name ] {
        MOUNT
        | OPEN [ RESETLOGS
                 | READ ONLY
                 | READ WRITE
                 | RESTRICTED
                 | UPGRADE
                 | FORCE IGNORE LOGS
                 | [ UPGRADE ] REPLAY UNTIL lfn ]
               [ IGNORE SYSTIME ]
        };
  • 添加或删除日志文件

    ALTER DATABASE [ database_name ] {
        ARCHIVELOG
        | NOARCHIVELOG
        | ADD LOGFILE (
            { 'file_name' SIZE integer [ B | K | M | G | T | P | E ]
              [ BLOCKSIZE { 512 | 4096 } ] }
            [,...] ) 
        | DROP LOGFILE ( 'file_name' )
        | ARCHIVE LOGFILE ( { 'file_name' } [,...] ) }
  • 删除归档日志文件

    ALTER DATABASE [ database_name ] DELETE ARCHIVELOG { ALL | UNTIL TIME 'date_string' } [ FORCE ]
  • 切换数据库备机的数据保护模式

    ALTER DATABASE [ database_name ] SET STANDBY DATABASE TO MAXIMIZE { PROTECTION | AVAILABILITY | PERFORMANCE }
  • 修改一个或多个数据文件的属性

    ALTER DATABASE [ database_name ] DATAFILE
        { 'file_name' | file_number } [,...]
        { AUTOEXTEND { OFF
                       | ON [ NEXT integer [ K | M | G ]
                              | MAXSIZE { integer [ K | M | G ] | UNLIMITED }
                            ]
                     }
          | RESIZE integer [ K | M | G ] }
  • 清理和重建日志文件

    ALTER DATABASE [ database_name ] CLEAR LOGFILE file_id
  • 主备切换

    ALTER DATABASE [ database_name ] SWITCHOVER [TIMEOUT tm_s]
  • 备机升主

    ALTER DATABASE [ database_name ] FAILOVER [ FORCE ]
  • 取消升级模式

    ALTER DATABASE [ database_name ] CANCEL UPGRADE
  • 修改数据库状态

    ALTER DATABASE [ database_name ] CONVERT TO 
        { READONLY
          | READWRITE
          | [ CASCADED ] PHYSICAL STANDBY [ MOUNT ] }
  • 删除备份集物理文件及SYS_BACKUP_SETS中备份集记录。

    ALTER DATABASE [ database_name ] DELETE BACKUPSET 'tag' [ FORCE ]
  • 重建表空间

    ALTER DATABASE [ database_name ] REBUILD TABLESPACE tablespace_name
  • 打开或关闭全局级逻辑复制开关

    ALTER DATABASE [ database_name ] ENABLE_LOGIC_REPLICATION { ON | OFF }
  • 更新及同步主密钥

    ALTER DATABASE [ database_name ] UPDATE MASTERKEY

参数说明 ​

  • database_name: 待修改的数据库名,不指定则取当前MOUNT状态的数据库。

  • MOUNT: 数据库加载状态,但不打开数据库。

  • OPEN: 数据库正常启动状态,具有如下子状态:

    • RESETLOGS: RSTID在原有基础上增加1。

    • READ ONLY: 只读模式,此时数据库只支持查询。

    • READ WRITE: 读写模式,启动到OPEN后的默认状态。

    • RESTRICTED: 约束模式,该模式用来支持数据库维护,紧急修复等DFX能力。该模式只支持SYS用户启动并执行操作,进入该模式后,仅支持一个session连接。

    • UPGRADE: 升级模式,只加载核心系统表。该模式只支持SYS用户启动并执行操作,进入该模式后,仅支持一个session连接。

    • FORCE IGNORE LOGS: 强制忽略日志文件。

    • REPLAY UNTIL lfn: 备机实例以该模式启动,重演到lfn点后停止重演。

    • IGNORE SYSTIME: 忽略系统时间跳变对数据库产生的影响。

  • ARCHIVELOG: 设置Redo日志归档。

  • NOARCHIVELOG: 设置Redo日志不归档。

  • ADD LOGFILE ( { 'file_name' SIZE integer [ B | K | M | G | T | P | E ] [ BLOCKSIZE { 512 | 4096 } ] } [,...] ): 在主机的Redo Log增加一个或多个Redo日志文件。

    • file_name: 文件名。

    • SIZE integer [ B | K | M | G | T | P | E ]: 指定文件大小。默认单位为字节。B表示单位为字节,K表示单位为KB,M表示单位为MB,G表示单位为GB,T表示单位为TB,P表示单位为PB,E表示单位为EB。

    • BLOCKSIZE { 512 | 4096 }: 指定文件块大小。单位为字节。取值范围为512或4096,默认为512字节。

  • DROP LOGFILE ( 'file_name' ): 删除Redo日志文件,一次只能删除一个。

  • ARCHIVE LOGFILE ( { 'file_name' } [,...] ): 归档在线日志,可以归档一个或多个。

  • DELETE ARCHIVELOG { ALL | UNTIL TIME 'date_string' } [ FORCE ]: 删除归档日志文件,只能在归档模式下执行。

    • ALL: 删除所有满足以下三个条件的归档日志:

      • 归档日志不被本机recovery覆盖,即小于本机rcy_point点;
      • 归档日志已备份(通过FORCE配置项可忽略备份);
      • 归档日志号小于备机上已归档的连续日志号。
    • UNTIL TIME 'date_string': 删除date之前产生的满足条件的归档日志。时间格式为YYYY-MM-DD hh:mm:ss。

    • FORCE: 删除时忽略归档日志是否已经备份。

  • SET STANDBY DATABASE TO MAXIMIZE { PROTECTION | AVAILABILITY | PERFORMANCE }: 切换数据库备机的数据保护模式。

    • PROTECTION: 最大保护模式。提供最高级别的数据保护能力。要求数据库备机收到Redo日志后,主机的事务才能提交。

    • AVAILABILITY: 最大可用模式。当备机无法写入Redo日志时,临时降低为PERFORMANCE,直到备机恢复可以成功写入日志。

    • PERFORMANCE: 最大性能模式。保证数据库主机的最高可用性。主机不受备机影响,但如果主机提交的事务相关的恢复数据没有发送到备机,这些事务数据将丢失,不能保证数据无损失。

  • DATAFILE { 'file_name' | file_number } [,...] { AUTOEXTEND { OFF | ON [ NEXT integer [ K | M | G ] | MAXSIZE { integer [ K | M | G ] | UNLIMITED } ] } | RESIZE integer [ K | M | G ] }: 修改一个或多个数据文件的属性。数据文件可以通过文件名或者文件编号指定。

    • file_name: 文件名。支持绝对路径和单纯文件名两种方式。如果是后者,则数据库会根据指定的数据库实例路径的data目录拼接出一个全路径。

    • file_number: 文件编号。数据库中的数据文件编号。

    • AUTOEXTEND: 设置自动扩展属性,以及开启时每次自动扩展的尺寸或自动扩展的上限。

      • OFF: 关闭自动扩展属性。

      • ON: 开启自动扩展属性。

        • NEXT: 指定自动扩展的大小。默认值为16MB。

        • MAXSIZE: 指定数据文件自动扩展的上限,不能超过当前文件大小。

        • UNLIMITED: 自动扩展,无上限。

    • RESIZE: 修改数据文件的大小。

  • CLEAR LOGFILE file_id: 清理和重建日志文件id为file_id的日志文件内容,用于日志文件头部损坏导致数据库无法启动时,若此日志文件可以清理,则可以使用该命令清理损坏内容,重建日志文件,使数据库可以启动。

  • SWITCHOVER [TIMEOUT tm_s]: 主备机切换。超时时间tm_s为整型,单位是秒,取值范围为0,[30, 1800],默认值为0。

  • FAILOVER [ FORCE ]: 当主备关系异常时,数据库备机升为主机。指定FORCE,则无论主备关系是否异常,都可以执行。

  • CANCEL UPGRADE: 取消UPGRADE模式。数据库升级完成后,需要取消UPGRADE模式。

  • CONVERT TO { READONLY | READWRITE | [ CASCADED ] PHYSICAL STANDBY [ MOUNT ] }: 修改数据库角色或状态。

    • READONLY: 只读模式,此时数据库只支持查询。

    • READWRITE: 启动到OPEN后的默认状态,支持读写。

    • [ CASCADED ] PHYSICAL STANDBY [ MOUNT ]: 修改数据库角色为备机或者级联备机。如果指定MOUNT,则只修改角色,不修改数据库状态;否则数据库会自动转换为OPEN状态下的READ ONLY状态。

  • DELETE BACKUPSET 'tag' [ FORCE ]: 删除备份集物理文件及SYS_BACKUP_SETS中备份集记录。如果备份集在磁盘上不存在或者备份集介质不是磁盘,则报错。如果是增量备份集,系统表中有其他备份集依赖该备份集则报错,需要先删除依赖它的备份集。

    • FORCE: 强制删除SYS_BACKUP_SETS中备份记录。
  • REBUILD TABLESPACE tablespace_name: 重建表空间。

  • ENABLE_LOGIC_REPLICATION { ON | OFF }: 打开或关闭全局级逻辑复制开关。

  • UPDATE MASTERKEY: 更新及同步主密钥,适配表空间透明加密功能。

示例 ​

-- 修改数据库状态为MOUNT
SQL> ALTER DATABASE MOUNT;

-- 在数据库MOUNT状态下,修改为OPEN状态。
SQL> ALTER DATABASE OPEN;

-- 在数据库MOUNT状态下,重置数据库日志序列号为1。
SQL> ALTER DATABASE RESETLOGS;

-- 在数据库MOUNT状态下,修改数据库状态为只读模式。
SQL> ALTER DATABASE OPEN READ ONLY;

-- 增加名称为test1,大小为1G,BLOCKSIZE为4096字节的Redo日志文件
SQL> ALTER DATABASE ADD LOGFILE ('test1' SIZE 1G BLOCKSIZE 4096);

-- 删除名称为test1的Redo日志文件
SQL> ALTER DATABASE DROP LOGFILE ('test1');

-- 删除2025/11/15 11:00:00前产生的满足条件的归档日志
SQL> ALTER DATABASE DELETE ARCHIVELOG UNTIL TIME '2025/11/15 11:00:00';

-- 关闭文件编号为1的数据文件自动扩展属性。
SQL> ALTER DATABASE DATAFILE 1 AUTOEXTEND OFF;

-- 修改文件编号为1的数据文件自动扩展的大小为20M。
SQL> ALTER DATABASE DATAFILE 1 AUTOEXTEND ON NEXT 20M;

-- 修改文件编号为1的数据文件自动扩展上限为10G。
SQL> ALTER DATABASE DATAFILE 1 AUTOEXTEND ON MAXSIZE 10G;

-- 修改文件编号为1的数据文件自动扩展的大小无上限。
SQL> ALTER DATABASE DATAFILE 1 AUTOEXTEND ON MAXSIZE UNLIMITED;

-- 在数据库MOUNT状态下,修改数据库角色为备机。
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

-- 修改数据库状态为READWRITE。
SQL> ALTER DATABASE CONVERT TO READWRITE;

-- 修改USER1数据文件的大小为128M。
SQL> ALTER DATABASE DATAFILE 'USER1' RESIZE 128M;

-- 在数据库MOUNT状态下,重建文件id为0的日志文件头部。
SQL> ALTER DATABASE CLEAR LOGFILE 0;

-- 删除tag为incr_bak的备份集文件及备份集记录。
SQL> ALTER DATABASE DELETE BACKUPSET 'incr_bak';

-- 打开全局级逻辑复制开关。
SQL> ALTER DATABASE ENABLE_LOGIC_REPLICATION ON;