ALTER DATABASE

说明

更改数据库属性

语法

alter_database ::=

alter_database_option ::=

data_file_clause ::=

log_file_clause ::=

log_file_spec ::=

ctrl_file_clause ::=

rac_clause ::=

autoextend_clause ::=

log_autoextend_clause ::=

opt_log_next_size ::=

opt_max_size ::=

size_clause ::=

percent_clause ::=

encrypt_option ::=

delete_alog_clause ::=

rac_node_info ::=

参数

dbname

要创建的数据库名。

缺省数据库可由SET DEFAULT DATABASE命令给出。

DATAFILE

该子句更改一个已有的数据文件的长度或自动增长属性

datafile

要修改的数据文件名

OFFLINE DATAFILE 'filepath'

将已被手动误删除的数据文件的状态设置为离线状态,以支持数据库紧急启动,需要在mount状态下进行

注解

在mount模式下单独offline某个数据文件的功能,适用于数据文件丢失时,没有物理备份可以进行恢复,只能紧急启库的场景。

filepath 通过启库失败时 log 文件中产生的 Elog 信息获取。

该操作不可逆,使用之后应当将该数据库内的数据逻辑迁移到新的数据库,不再使用该数据库。

系统回滚表空间的数据文件不允许 offline ,offline 时会报错。因为 offline 系统回滚表空间的数据文件后,数据库启动也无法准确的获取数据库中的数据,所以此类文件不允许被 offline 。

DROP LEAK DATAFILE fileId 'filepath2'

通过 fileId 和 filepath2 指定泄露的主数据文件,实现删除该表空间下所有泄露的数据文件。

注解

如果创建表空间执行失败,但成功创建过数据文件,这些文件不能在操作系统上直接 rm 删除。

应该用 ALTER DATABASE DROP LEAK DATAFILE fileId filePath; 语句删除。

只需要指定主数据文件的 fileId 和 filePath2 即可实现删除该表空间下所有泄露的数据文件。

主数据文件:当创建一个表空间指定多个数据文件时,创建数据文件过程中因为意外导致停库,再次启库时会有部分数据文件创建成功,此时创建成功的数据文件中第一个数据文件被称为主数据文件。

主数据文件的 fileId 和 filePath2 可通过 SELECT RFILE#,NAME FROM V$DATAFILE WHERE RFILE#=TS# AND RFILE# NOT IN (SELECT TSID FROM SYS_TABLESPACE); 语句查看。

ADD LOGFILE

该子句创建一个日志组。

日志组是将日志文件进行分组管理的逻辑概念,使用日志组可以对一组日志文件进行处理。

一个日志组中的日志文件将会被循环使用。

DROP LOGFILE GROUP

该子句删除日志组

DROP LOGFILE MEMBER

该子句删除多个日志成员

logfile

日志文件名

ctrlfilename

控制文件名

ADD CONTROLFILE

增加控制文件

DROP CONTROLFILE

删除控制文件

RECOVERY CONTROLFILE USING

修复控制文件

注解

在ADD、DROP或者RECOVERY 控制文件的时候,均需要指定控制文件的完整路径,且这三种语法仅支持在boot模式下使用。

在恢复控制文件的时候建议拷贝一份之前坏掉的数据文件,用于帮助分析问题。

size

文件大小。

其中K和KB表示千字节,M和MB表示兆字节,G和GB表示吉字节,T和TB表示太字节。

缺省时以M为单位。

AUTOEXTEND

数据文件或日志文件的自动增长属性。

设置此属性为ON时,数据文件或日志文件空间使用完后会自动增长。

设置此属性为OFF时,数据文件或日志文件空间使用完后不会自动增长,此时引起数据文件或日志文件增长的操作(如插入元组)将失败。

NEXT

每次自动增长大小或百分比。(按百分比增长方式仅适用于日志文件)

对于数据文件,缺省值为10M。

对于日志文件,缺省为10%

MAXSIZE

数据文件或日志文件最大限制

UNLIMITED

数据文件或日志文件大小没有限制

ARCHIVELOG [ 'archpath' ] | NOARCHIVELOG

  • ARCHIVELOG归档模式。在进行介质故障恢复时需要使用此参数产生归档日志。

    archpath 归档路径

  • NOARCHIVELOG不归档模式。

默认为NOARCHIVELOG不归档模式

RENAME GLOBAL_NAME TO

改变数据库名。

修改后的数据库名会立即生效。

newdbname

改变后的数据库名

RENAME FILE

改变数据库文件存放路径。

不应该通过此命令修改临时文件路径,如果要修改临时文件位置,可以修改配置文件中的 TEMPFILE_RECREATE_OPTION 和 TEMPFILE_PATH 参数设置临时文件目录。

注解

重命名数据文件需要以下步骤:

1、将要重命名的数据文件所在的表空间 OFFLINE

2、将重命名后的数据文件移动或复制到新路径下

3、进行 RENAME

4、恢复表空间状态

重命名日志文件需要以下步骤:

1、需要在 MOUNT 模式下执行

2、将重命名后的数据文件移动或复制到新路径下

olddatapath

更改前数据库文件存放路径

newdatapath

更改后数据库文件存放路径

SHRINKLOG [ON | OFF]

  • 自动收缩日志开关。
  • 自动收缩日志开关状态可以通过v_sys_database视图的LOGAUTOSHRINK字段查看。
  • 当自动收缩日志打开时,如果日志空间使用率低于5%,则自动对扩展出来的日志空间进行收缩。
  • 此开关所做修改仅对本次启动实例有效,下次启动时恢复默认状态。

数据库启动时,自动收缩日志 默认为ON 打开状态,可以通过ALTER DATABASE SHRINKLOG OFF;进行关闭。

threadid

RAC中日志线程的id

votediskpath

RAC中仲裁盘路径

nodeid

RAC节点id

nodeip

RAC节点ip

ENCRYPT/DECRYPT

修改数据库加密模式。

ENCRYPT: 设置数据库为加密模式。

DECRYPT: 设置数据库为非加密模式。

USING 'encrypt_algorithm'

指定加密算法。目前支持的加密算法包括:'des3' 、 'aes128' 、 'aes192' 、 'aes256' 、 'sm4'。

delete_alog_clause

一个归档日志文件可被删除的前提是:文件不是正在使用、并且该归档文件不再被读写分离其它节点用到。

三种方式删除归档文件:

  • ALL :代表删除所有可删除的归档文件
  • BETWEEN 时间 :代表删除那些只包含指定时间内产生的REDO的归档文件
  • BETWEEN LSN :代表删除那些只包含指定LSN区间的REDO的归档文件

FORCE

如果未指定FORCE,遇到名称或内容异常的归档文件,只会提醒不会删除;如果指定FORCE,遇到这种归档文件会将它删除。

注解

执行此语句用户必须是DBA。

所有的更改数据库文件路径的语句并不自动移动数据库文件,而只是改动在控制文件中的记录, DBA需要自行在外面移动数据文件本身。不应该通过RENAME FILE命令修改临时文件路径, 如果要修改临时文件位置,可以修改配置文件中的 TEMPFILE_RECREATE_OPTION 和 TEMPFILE_PATH 参数设置临时文件目录。 具体可参见 : 重命名与重定位系统临时文件

EXTEND TRIAL

延长数据库有效期 7 天,仅在数据库过期后30天内可用。只有具有 DBA 权限的用户才可以执行。仅可成功延期一次。

ENABLE BLOCK CHANGE TRACKING

开启块更改跟踪 (block change tracking, BCT) 功能。开启 BCT 功能后,会记录自上次备份以来数据文件中发生修改的页面并将其保存在更改跟踪文件中,该功能可显著减少增量备份时间。

在开启 BCT 功能后,会自动创建更改跟踪文件($SZ_OSCAR_HOME/odbs/$DBNAME/dbname.bct),用于保存更改跟踪信息。

关闭 BCT 功能、恢复数据库和删除数据库会自动删除更改跟踪文件。

相关配置参数:

  • CHANGE_TRACK_FLUSH_INTERVAL:设置更改跟踪回刷线程运行的时间间隔(毫秒)。
  • BUF_GROUP_BCT_FLUSH_SIZE:设置更改跟踪回刷线程按组回刷的缓冲区大小。
  • CTF_EXTEND_SIZE_FRACTION:设置更改跟踪文件增长比例。

DISABLE BLOCK CHANGE TRACKING

关闭 BCT 功能。

注解

执行此语句的用户必须是 DBA 用户。

BCT 功能默认处于禁用状态。

如果 BCT 功能发生错误,会提示相关错误信息并自动关闭 BCT 功能。此时,更改跟踪文件是无效的,但并不会立即删除,以便于开发人员分析错误原因。值得注意的是,重启库时无效的更改跟踪文件会被自动删除,建议提前进行保存。

尽管块更改跟踪可以显著提高备份效率,但它也带来了一些潜在的考虑因素:

  • 额外的内存和存储需求:BCT 本身需要额外的内存和存储空间来保存更改跟踪信息。
  • 性能影响:记录更改信息可能会对数据库的写操作性能造成一定的影响。

示例

示例1:更改数据库名

-- 下面的示例将数据库名由fenix改为fenix2:

-- 注意:修改数据库名,首先需要将数据库运行在 mount 状态下。

alter database mount;

ALTER DATABASE fenix RENAME GLOBAL_NAME TO fenix2;

示例2:增加数据库日志组

-- 下面的示例将增加两个日志组,每个日志组中包含两个大小为20M日志文件:

ALTER DATABASE fenix ADD LOGFILE GROUP('FENIXG2LOG1', 'FENIXG2LOG2')
SIZE 20M, GROUP('FENIXG3LOG1', 'FENIXG3LOG2') SIZE 20M;

示例3:改变数据库的归档属性

-- 下面的示例将设置数据库为不归档:

ALTER DATABASE fenix NOARCHIVELOG;

示例4:修复控制文件

-- 为数据库新增一个控制文件
ALTER DATABASE osrdb ADD CONTROLFILE '/opt/ShenTong/admin/ctrlfile1.ctrl';

-- 为数据库删除一个控制文件
ALTER DATABASE osrdb DROP CONTROLFILE '/opt/ShenTong/admin/ctrlfile1.ctrl';

-- 修复控制文件
ALTER DATABASE osrdb RECOVERY CONTROLFILE USING '/opt/ShenTong/admin/ctrlfile1.ctrl';

示例5:将误删除的数据文件 OFFLINE

-- 增加数据文件
create tablespace testDBF datafile '/opt/ShenTong/odbs/OSRDB/testDBF.dbf' size 1m;

-- 停库并将数据文件删除

-- 启库,启库失败,查看 log 文件 :FATAL, 致命错误!, 启动失败 : 打开数据库失败, 找不到指定的文件/opt/ShenTong/odbs/OSRDB/testDBF.dbf

-- 进入神通数据库安装路径,  linux下默认安装路径为/opt/ShenTong,  Windows下默认安装路径为 C:\ShenTong

# cd /opt/ShenTong/bin

# ./oscar  -- Windows下以管理员方式打开命令窗口执行oscar.exe

backend> startup mount osrdb

backend> alter database offline datafile '/opt/ShenTong/odbs/OSRDB/testDBF.dbf';
-- /*Session 0*/ LOG, 已将数据文件 /opt/ShenTong/odbs/OSRDB/testDBF.dbf 的状态修改为 OFFLINE

backend> exit

-- 再次启库,可成功启库

示例6:删除泄露的数据文件

-- 通过 V$DATAFILE 视图查看泄露的主数据文件 id 和路径
SELECT RFILE#,NAME FROM V$DATAFILE WHERE RFILE#=TS# AND RFILE# NOT IN (SELECT TSID FROM SYS_TABLESPACE);

-- RFILE# |                         NAME
-- -------+------------------------------------------------------
--      5 | D:\ShenTongoscar\odbs\OSRDB\many_smallfile_ts_01.dbf
-- (1 row)

-- 删除泄露的数据文件
ALTER DATABASE DROP LEAK DATAFILE 5 'D:\ShenTongoscar\odbs\OSRDB\many_smallfile_ts_01.dbf';


-- NOTICE, 泄露的数据文件fileId: 7 删除成功
-- NOTICE, 泄露的数据文件fileId: 6 删除成功
-- NOTICE, 泄露的主数据文件fileId: 5 删除成功
-- ALTER DATABASE SET

示例7:重命名数据文件

-- 1.将要重命名的数据文件所在的表空间 OFFLINE
alter tablespace testDBF offline;

-- 2.将重命名后的数据文件移动或复制到新路径下

-- 3.进行 RENAME
alter database rename file 'D:\ShenTongoscar\TESTDBF.DBF' to 'D:\ShenTongoscar\test\TESTDBF.DBF';

select tablespace_name,file_id,file_name from dba_data_files;

-- TABLESPACE_NAME | FILE_ID |                  FILE_NAME
-- ----------------+---------+---------------------------------------------
-- SYSTEM          |       0 | D:\ShenTongoscar\odbs\OSRDB\OSRDB01.dbf
-- UNDOTS01        |       1 | D:\ShenTongoscar\odbs\OSRDB\undots01.dbf
-- TEMP            |       2 | D:\ShenTongoscar\odbs\OSRDB\OSRDBtmp01.dbf
-- AUDIT           |       3 | D:\ShenTongoscar\odbs\OSRDB\OSRDBaux01.dbf
-- TESTDBF         |       4 | D:\ShenTongoscar\test\TESTDBF.DBF
-- (5 rows)

-- 4.恢复表空间状态
alter tablespace testDBF online;

示例7:重命名日志文件

-- 1.进入 MOUNT 模式
startup mount

-- 2.将重命名后的数据文件移动或复制到新路径下

-- 3.进行 RENAME
alter database rename file 'D:\ShenTongoscar\odbs\OSRDB\REDO.log' to 'D:\ShenTongoscar\REDO.log';

示例8:开启和关闭 BCT 功能

-- 开启 BCT 功能
alter database enable block change tracking;

-- 关闭 BCT 功能
alter database disable block change tracking;