#ALTER SYSTEM
# 通用描述
ALTER SYSTEM用于动态地改变所在数据库实例(Instance)的属性,立即生效(但对于ALTER SYSTEM SET PARAMETER可设定为重启生效)且对所有用户生效。
# 语句定义
alter system::=
dump_clause::=
syntax::= DUMP (PRIVATE LOG
|LOGFILE file_name
|DATAFILE file_id (|BLOCK block_id|MINBLOCK block_id MAXBLOCK block_id)
|SESSION sid BACKTRACE)
# set_parameter_clause
该语句用于修改数据库的配置参数。
如果parameter_name为YashanDB规定的只读参数,执行此语句时将会提示YAS-02138错误。
YashanDB规定了如下几类配置参数:
- 隐藏参数,即用户不直接可见的参数,非特殊使用场景下不建议修改。
- 只读参数,不可被修改。
- 允许被修改,且修改后可以立即生效的配置参数。
- 允许被修改,但修改后需要重启实例才会生效的配置参数。
Note:
在分布式集群中,执行本语句默认修改当前节点。
# scope
SCOPE用于设定对配置参数修改后的生效方式,默认为BOTH。
- spfile:将参数值写入磁盘,需重启才能生效
- memory:将参数值写入内存,立即生效,但重启后失效
- both:将参数值同时写入内存和磁盘,立即生效,重启后也生效
如果VALUE被赋予为YashanDB规定的不可立即生效参数,则必须同时指定SCOPE为SPFILE值,否则将会提示YAS-06001错误。
示例
SHOW PARAMETER data_buffer_size;
NAME VALUE
--------------------- -------
DATA_BUFFER_SIZE 64M
ALTER SYSTEM SET data_buffer_size=128M scope=spfile;
SHOW PARAMETER data_buffer_size;
NAME VALUE
--------------------- -------
DATA_BUFFER_SIZE 64M
SHOW PARAMETER checkpoint_timeout;
NAME VALUE
--------------------- -------
CHECKPOINT_TIMEOUT 300
ALTER SYSTEM SET checkpoint_timeout=400;
SHOW PARAMETER checkpoint_timeout;
NAME VALUE
--------------------- -------
CHECKPOINT_TIMEOUT 400
# type
本语句只在分布式部署中使用,用于指定节点类型进行配置。
- CN:修改所有CN节点配置参数
- DN:修改所有DN节点配置参数
- MN:修改所有MN节点配置参数
- ALL:修改所有节点配置参数,包括所有CN、DN和MN
如果不指定TYPE,默认修改本节点配置参数。
Note:
1.不允许在NOMOUNT/MOUNT模式下指定TYPE,默认修改本节点配置参数。
2.对于未处于OPEN状态的节点,即使处于TYPE指定范围内,也无法跨节点修改其配置参数。
3.上述描述的是连接到某一CN节点执行时的规则,如直连到其他节点,则不允许指定TYPE,默认修改本节点配置参数。
示例
--修改所有CN节点上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH TYPE = CN;
--修改所有DN节点上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH TYPE = DN;
--修改所有MN节点上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH TYPE = MN;
--修改所有CN、DN、MN节点上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH TYPE = ALL;
# node
本语句只在分布式部署中使用,用于指定节点进行配置,node_id = g-n。
- g:节点所在组号ID
- n:节点ID,'*'表示组内所有节点
如果不指定NODE,默认修改本节点配置参数。
Note:
1.不允许在NOMOUNT/MOUNT模式下指定NODE,默认修改本节点配置参数。
2.对于未处于OPEN状态的节点,即使处于NODE指定范围内,也无法跨节点修改其配置参数。
3.上述描述的是连接到某一CN节点执行时的规则,如直连到其他节点,则不允许指定NODE,默认修改本节点配置参数。
示例
--修改MN节点1-1上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH NODE = 1-1;
--修改所有CN节点上的RUN_LOG_FILE_COUNT
ALTER SYSTEM SET RUN_LOG_FILE_COUNT=200 SCOPE=BOTH NODE = 2-*;
# switch logfile
该语句用于对数据库触发一次当前redo日志文件的强制切换,该操作不是进行归档的触发条件。分布式部署中不可使用本语句。
示例
ALTER SYSTEM SWITCH LOGFILE;
# checkpoint
该语句用于对数据库触发一次全量的CHECKPOINT,以使内存中的脏数据写入到磁盘中。
示例
ALTER SYSTEM CHECKPOINT;
# flush buffer_cache
该语句用于对数据库触发一次失效Buffer Cache中所有的Blocks,此操作会导致所有缓存数据被清除,其后的SQL查询将执行物理读取磁盘数据。分布式部署中不可使用本语句。
示例
ALTER SYSTEM FLUSH BUFFER_CACHE;
# extend buffer_cache size
该语句用于临时扩展数据库的Data Buffer大小,重启后失效。分布式部署中不可使用本语句。
# size_clause
对Data Buffer指定一个整型值,单位可以为B/K/M/G/T/P/E。每次运行该语句所设定SIZE的限额受如下两个值制约:
- 所在服务器的物理内存
- 2^24*DB_BLOCK_SIZE*DATA_BUFFER_PARTS
超过限定值将会提示YAS-00101错误。
示例
ALTER SYSTEM EXTEND BUFFER_CACHE SIZE 4G;
# archive log current
该语句用于对数据库触发一次当前redo日志文件的切换和归档。此操作需要数据库的归档模式需处于开启状态,否则将提示YAS-02079错误。分布式部署中不可使用本语句。
示例
ALTER SYSTEM ARCHIVE LOG CURRENT;
# kill_session_clause
该语句用于终止一个指定的会话,并回滚(Rollback)此会话中未提交事务,释放此会话产生的锁(Lock),之后在此会话中运行SQL语句将提示连接错误信息。
执行此命令需提供会话的SID和SERIAL#。
示例
--在sales用户下执行如下语句
SELECT * FROM area WHERE area_no='01' FOR UPDATE;
--查看锁及会话信息
SELECT * FROM V$LOCK;
SID ID1 ID2 LMODE REQUEST
-------- --------------- ---------- --------- ---------
21 1328 TS
21 21474844928 0 ROW
SELECT sid,serial# FROM V$SESSION WHERE sid IN (21);
SID SERIAL#
-------- ------------
21 2
--下面操作需要拥有管理员权限
--通过SID和SERIAL#参数终止指定会话
ALTER SYSTEM KILL SESSION '21,2';
分布式跨CN会话杀除
在配置了多CN的分布式环境中,可使用本语句进行跨CN的会话终止,此时的SID应为分布式部署中的全局会话ID(可从DV$SESSION视图的global_session_id字段获得)。
示例(在一个配置了2-1和2-2两个CN节点的分布式环境中)
--连接2-1,建立一个会话,查看此会话的全局会话ID
SELECT USERENV('SID') FROM dual;
USERENV('SID')
--------------
131091
--获取SERIAL#
SELECT global_session_id, serial FROM DV$SESSION WHERE global_session_id IN (131091);
GLOBAL_SESSION_ID SERIAL#
----------------- ------------
131091 5
--连接2-2,2-1的会话不要关闭,在2-2上杀除2-1的会话
ALTER SYSTEM KILL SESSION '131091,5';
# cancel_sql_clause
该语句用于终止一个正在运行中的SQL操作,执行此命令需要提供该SQL操作所在会话的SID和SERIAL#。
指定SQL_ID时表示终止该SQL_ID对应的SQL操作,不指定时则表示终止该会话下当前正在运行的SQL操作。
在分布式下,支持跨CN终止SQL操作,此时的SID应为分布式部署中的全局会话ID。
示例
--在sales用户下执行如下语句(会话1)
SELECT * FROM area WHERE area_no='01' FOR UPDATE;
--开启新会话2,以sales用户登录,添加等锁SQL,使其处于执行状态中
UPDATE area SET DHQ='Shanghai3' WHERE area_no='01';
--开启新会话3,以系统用户登录
SELECT * FROM V$LOCK WHERE request='ROW';
SID ID1 ID2 LMODE REQUEST
-------- -------------- --------- --------- ---------
21 4447535124 ROW
--查询SQL_ID
SELECT SID,SERIAL#,SQL_ID FROM V$SESSION WHERE SID=21;
SID SERIAL# SQL_ID
-------- ------------ ---------------------
21 1 3829447373
--终止指定的SQL
ALTER SYSTEM CANCEL SQL '21,1,3829447373';
--终止正在运行的SQL
ALTER SYSTEM CANCEL SQL '21,1';
--在分布式环境中,上述会话1和会话2在cn2-1上执行,会话3操作在cn2-2上执行,即可实现跨CN终止SQL。
# ignore standby mismatched redo
该语句用于忽略备机与主机的不匹配的redo日志,使备机从redo日志分歧点继续接收主机日志。此操作前提是备机状态处于REDO MISMATCH,处于该状态的备机无法接收主机日志。分布式部署中不可使用本语句。
示例
ALTER SYSTEM IGNORE STANDBY MISMATCHED REDO;
# dump_clause
该语句用于将YashanDB内部的信息转储(dump)到跟踪(trace)文件中,供用户进行分析和判断故障。
dump
用户在dump操作中指定某类内部信息,当前会话中的该类信息就被转储到trace文件中。
每一次dump操作在trace文件中产生一段信息,一个会话中可以多次执行dump操作。
trace
trace文件在会话首次执行dump时创建,文件存放在{YASDB_DATA}/diag/trace中,文件名称为{dbname}yas{sid}.trc。
trace文件被创建后,后续该会话中所有被dump的信息都被写入该文件。
当会话ID被复用时,sid对应的trace文件也将被复用,不会创建新的trace文件。
# private log
将当前会话的私有日志信息dump到trace文件中。执行此类信息的dump要求数据库处于mount或open状态。
# logfile
将某个日志文件的页面信息dump到trace文件中。执行此类信息的dump要求数据库处于mount或open状态。
本操作会对日志文件加锁,多个会话同时dump同一个日志文件时会形成锁等待。
当dump的logfile中的某个group是关于加密表空间上的页面记录时,这些group会受到保护,不会解析。
file_name
日志名称,为V$LOGFILE视图中存在的某个日志名称。
# datafile
将某个数据文件的页面信息dump到trace文件中。执行此类信息的dump要求数据库处于mount或open状态。
本操作会对数据文件加锁,多个会话同时dump同一个数据文件时会形成锁等待。
当dump加密表空间的数据文件某些页面或整个数据文件时,这些页面会受到保护,不会解析。
file_id
指定数据文件的ID,该值为数据文件的全局ID,即在V$DATAFILE视图中的ID字段值。
block_id
指定数据文件内的页面ID:
- 不指定BLOCK:dump所有页面。
- BLOCK block_id:指定一个页面。
- MINBLOCK block_id [MAXBLOCK block_id]:指定一批页面。必须同时指定MINBLOCK和MAXBLOCK,否则会报错。
- 指定一批页面时,MAXBLOCK小于MINBLOCK或MAXBLOCK超出文件大小均会报错。
# session backtrace
将指定会话的当前堆栈信息dump到trace文件中。执行此类信息的dump要求数据库处于mount或open状态。
本操作不允许并发,同一时间只能有一个会话执行此类dump。
示例
ALTER SYSTEM DUMP PRIVATE LOG;
ALTER SYSTEM DUMP LOGFILE 'redo1';
ALTER SYSTEM DUMP DATAFILE 6;
ALTER SYSTEM DUMP DATAFILE 6 BLOCK 0;
ALTER SYSTEM DUMP DATAFILE 6 MINBLOCK 128 MAXBLOCK 137;
ALTER SYSTEM DUMP SESSION 20 BACKTRACE;