1.存储结构
表空间是 DM 数据库的最大存储单元,所有数据都存储在表空间中。
表空间采用段(segment)、簇(extent)和页(page,对应 block)的方式管理。
一个表空间可以包含一个或多个数据文件。一个数据文件仅能归属于一个表空间。
DM 物理文件包含:配置文件、控制文件、数据文件、联机日志(此四个文件必不可少,缺少一个将无法正常启动)。
1.1 三大文件查看
查看数据文件:
SQL> select GROUP_ID,PATH,ID,STATUS$ from v$datafile;
行号 GROUP_ID PATH ID STATUS$
---------- ----------- ---------------------------------------------------- ----------- -----------
1 0 /home/dmdba/dmdbms/data/ECARD/SYSTEM.DBF 0 1
2 1 /home/dmdba/dmdbms/data/ECARD/ROLL.DBF 0 1
3 3 /home/dmdba/dmdbms/data/ECARD/TEMP.DBF 0 1
4 4 /home/dmdba/dmdbms/data/ECARD/MAIN.DBF 0 1
5 5 /home/dmdba/dmdbms/data/ECARD/DMHR.DBF 0 1
6 6 /home/dmdba/dmdbms/data/ECARD/V8_TABLESPACE.dbf 0 1
7 7 /home/dmdba/dmdbms/data/ECARD/OPENPLARTFORM_DATA.dbf 0 1
8 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_01.dbf 0 1
9 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_02.dbf 1 1
10 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_03.dbf 2 1
11 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_04.dbf 3 1
行号 GROUP_ID PATH ID STATUS$
---------- ----------- ------------------------------------------------- ----------- -----------
12 8 /home/dmdba/dmdbms/data/ECARD/CHANNEL_DATA_05.dbf 4 1
12 rows got
查看重做日志文件:
SQL> select path from v$rlogfile;
行号 PATH
---------- -----------------------------------------
1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log
2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log
3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log
已用时间: 0.730(毫秒). 执行号:1308.
SQL> select path,rlog_size/1024/1024 from v$rlogfile;
行号 PATH RLOG_SIZE/1024/1024
---------- ----------------------------------------- --------------------
1 /home/dmdba/dmdbms/data/ECARD/ECARD01.log 256
2 /home/dmdba/dmdbms/data/ECARD/ECARD02.log 256
3 /home/dmdba/dmdbms/data/ECARD/ECARD03.log 256
已用时间: 0.989(毫秒). 执行号:1309.
查看控制文件:
SQL> select para_name,para_value from v$dm_ini where para_name= 'CTL_PATH';
行号 PARA_NAME PARA_VALUE
---------- --------- ------------------------------------
1 CTL_PATH /home/dmdba/dmdbms/data/ECARD/dm.ctl
已用时间: 10.951(毫秒). 执行号:1313.
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_PATH';
行号 PARA_NAME PARA_VALUE
---------- ------------ -------------------------------------
1 CTL_BAK_PATH /home/dmdba/dmdbms/data/ECARD/ctl_bak
已用时间: 4.678(毫秒). 执行号:1314.
SQL> select para_name,para_value from v$dm_ini where para_name='CTL_BAK_NUM';
行号 PARA_NAME PARA_VALUE
---------- ----------- ----------
1 CTL_BAK_NUM 10
已用时间: 6.657(毫秒). 执行号:1315.
SQL> select para_name,para_value from v$dm_ini where para_name in ('CTL_PATH','CTL_BAK_PATH','CTL_BAK_NUM');
1.2 表空间管理
1.2.1 表空间介绍
DM 默认预定义 SYSTEM、ROLL、MAIN、TEMP、HMAIN 五个表空间。
- SYSTEM
系统表空间,存放数据字典等信息(表、字段、视图等对象的定义、用户角色权限信息等,部分隐含参数写入 SYSTEM 表空间),SYSTEM 表空间自动扩展不允许关闭。
- ROLL
回滚表空间,存放回滚页,数据库中的 DML 操作对应都会生成 redo 和 undo,undo 信息放入 ROLL 表空间对应的数据文件中,redo 信息写入联机日志文件,用于保证数据的一致性。
ROLL 回滚段数据包含 Active、unexpired、expired 三种状态。遇到查询记录过旧的错误(等同于 oracle 的快照过旧的错误)。
解决方法:
1.增大 undo_retention(回滚段的保留时长), 及时、分段提交。扩大 ROLL 表空间。
2.查询时间过长导致,可以考虑优化查询
SQL> select NAME,TYPE,VALUE,SYS_VALUE,FILE_VALUE,DESCRIPTION from v$parameter where name='UNDO_RETENTION';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- -------------- ---- ---------- ---------- ----------
DESCRIPTION
----------------------------------------------------------------------------------------
1 UNDO_RETENTION SYS 180.000000 180.000000 90.000000
Maximum retention time in seconds for undo pages since relative transaction is committed
- MAIN
用户默认表空间,当创建用户时,如果为指定用户的默认表空间,则 MAIN 为用户的默认表空间。相当于 Oracle 的 USERS 表空间。
- 临时表空间
临时表空间,存放临时表数据、临时结果集等,当大量的数据排序或创建索引等占用临时表空间。DM 中临时表空间大小由参数 TEMP_SIZE 指定,不支持单独创建临时表空间。
达梦 TEMP 表空间,数据库启动时会按照如下参数重建 TEMP 表空间。
SQL> select name, value, type from v$parameter t where name like 'TEMP%';
行号 NAME VALUE TYPE
---------- ---------------- ---------------------- ---------
1 TEMP_PATH /dm8/dmdbms/data/ECARD READ ONLY
2 TEMP_SIZE 10 IN FILE
3 TEMP_SPACE_LIMIT 0 SYS
相关参数说明:
TEMP_SIZE:临时表空间初始大小
TEMP_PATH:临时表空间路径
TEMP_SPACE_LIMIT:临时表空间的空间限制,0 表示不限制。
收缩 TEMP 表空间的方法:
1.重启数据库,TEMP 表空间数据文件会重建。
2.在线收缩临时表空间使用 SP_TRUNC_TS_FILE 函数
SQL> select id,name from v$ifun where name='SP_TRUNC_TS_FILE';
行号 ID NAME
---------- ----------- ----------------
1 1298 SP_TRUNC_TS_FILE
SQL> select * from v$ifun_arg where id=1298;
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- ------- ----------- ---------------- ----------- ----------- ------- --------
1 1298 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 1298 TS_ID 0 INTEGER 4 0 IN NULL
3 1298 FILE_ID 1 INTEGER 4 0 IN NULL
4 1298 TO_SIZE 2 INTEGER 4 0 IN NULL
调大temp表空间的方法:
--可以直接修改temp文件的大小,但重启后会重建为temp_size指定的大小
alter tablespace temp resize datafile 'TEMP.DBF' to 50;
--永久修改大小方法
alter system set 'TEMP_SIZE' =50 spfile;
- HMAIN
HUGE 表的默认表空间(HTS 表空间)
1.2.1 创建表空间
创建名为tbs1的表空间,并指定该空间上拥有 2个数据文件,每个数据文件的大小为50M ,设置自动扩展
-- 达梦表空间数据文件单位默认为M,不需要带单位,路径可以省略,使用system_path的路径
create tablespace tbs1 datafile '/home/dmdba/dmdbms/data/ECARD/TBS101.DBF' size 50 autoextend on next 10 maxsize 10240,'/home/dmdba/dmdbms/data/ECARD/TBS102.DBF' size 50 autoextend on next 10 maxsize 10240;
1.2.2 修改表空间名
DM 预定义表空间不支持重命名,自定义表空间支持重命名。
alter tablespace tbs1 rename to tbs1_new;
1.2.3 修改表空间状态
用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许脱机。
设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。 脱机后可对表
空间的数据进行备份.
alter tablespace tbs1 offline;
alter tablespace tbs1 online;
1.2.4 修改表空间数据缓冲区
用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许修改数据缓冲区。可以使用的数据缓冲区有 NORMAL 和 KEEP。表空间修改成功后,并不会立即生效,而是需要服务器重启。缓冲池名 KEEP 是达梦的保留关键字,使用时必须加双引号。
SQL> alter tablespace tbs1_new cache="KEEP";
SQL> select name,cache from v$tablespace;
SQL> alter tablespace tbs1_new cache="NORMAL";
1.2.5 删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间,删除表空间时会删除其拥有的所有数据文件。
drop tablespace tbs1;
1.2.6 管理数据文件
1.添加数据文件
--可以使用相对路径
alter tablespace tbs1 add datafile 'TBS103.DBF' size 50;
2.设置数据文件自动扩展
alter tablespace tbs1 datafile 'TBS103.DBF' autoextend on next 2 maxsize 20480;
alter tablespace tbs1 datafile 'TBS101.DBF' autoextend off;
3.修改数据文件大小
--dm老版本不支持将数据文件改小,2022年9月份以后的版本支持
alter tablespace tbs1 resize datafile 'TBS103.DBF' TO 100;
4.迁移自定义表空间数据文件
alter tablespace tbs offline;
--Oracle19c之前,需要手动拷贝数据文件,然后再进行rename
alter tablespace tbs rename datafile 'TBS01.DBF' TO '/dm8/data/DM/TBS/TBS01.DBF';
alter tablespace tbs rename datafile 'TBS02.DBF' TO '/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online;
1.2.7 表空间相关查询
相关数据字典:
select * from dba_tablespaces;
select * from DBA_DATA_FILES;
select * from v$tablespace;
select * from v$datafile;
--查询数据文件剩余空间
select * from DBA_FREE_SPACE;
表空间和数据文件对应关系查询:
SQL> SELECT df.GROUP_ID,ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID= df.GROUP_ID;
行号 GROUP_ID NAME PATH
---------- ----------- ------ ---------------------------------
1 0 SYSTEM /dm8/dmdbms/data/ECARD/SYSTEM.DBF
2 7 TEST /dm8/dmdbms/data/ECARD/TEST02.DBF
3 7 TEST /dm8/dmdbms/data/ECARD/TEST01.DBF
4 5 DMHR /dm8/dmdbms/data/ECARD/DMHR.DBF
5 4 MAIN /dm8/dmdbms/data/ECARD/MAIN.DBF
6 3 TEMP /dm8/dmdbms/data/ECARD/TEMP.DBF
7 1 ROLL /dm8/dmdbms/data/ECARD/ROLL.DBF
7 rows got
-- file_id是针对某个表空间内部排序的
SQL> select TABLESPACE_NAME,FILE_ID,FILE_NAME from dba_data_files order by 1,2;
行号 TABLESPACE_NAME FILE_ID FILE_NAME
---------- --------------- ----------- ---------------------------------
1 DMHR 0 /dm8/dmdbms/data/ECARD/DMHR.DBF
2 MAIN 0 /dm8/dmdbms/data/ECARD/MAIN.DBF
3 ROLL 0 /dm8/dmdbms/data/ECARD/ROLL.DBF
4 SYSTEM 0 /dm8/dmdbms/data/ECARD/SYSTEM.DBF
5 TEMP 0 /dm8/dmdbms/data/ECARD/TEMP.DBF
6 TEST 0 /dm8/dmdbms/data/ECARD/TEST01.DBF
7 TEST 1 /dm8/dmdbms/data/ECARD/TEST02.DBF
7 rows got
1.3 重做日志文件管理
重做日志包含联机日志和归档日志(数据库在归档模式下才会产生归档日志文件)。
联机重做日志:存放 redo 信息,循环使用,不断覆盖,默认重做日志大小256M。联机日志 v$rlog 中记录有日志序列号(LSN: Log Sequence Number)。
DM 数据库联机日志自动切换,不能手工切换,无法删除重做日志。DM 联机日志没有日志组。
1.3.1 调整重做日志大小
--建议所有日志大小一样
alter database resize logifle 'DAMENG01.log' to 500;
alter database resize logifle 'DAMENG02.log' to 500;
1.3.2 添加重做日志
alter database add logfile 'DAMENG03.log' SIZE 500;
1.3.3 修改重做日志路径
alter database mount;
alter database RENAME LOGFILE 'DM01.log' TO '/dm8/data/DM/REDO/DM01.log';
alter database RENAME LOGFILE 'DM02.log' TO '/dm8/data/DM/REDO/DM02.log';
alter database RENAME LOGFILE 'DM03.log' TO '/dm8/data/DM/REDO/DM03.log';
alter database open;
1.3.4 重做日志相关查询
相关视图:
select * from v$rlogfile;
--cur_file表示正在使用的联机日志
select * from v$rlog;
查询redo日志相关信息:
--查询redo log日志信息
SQL> select group_id,file_id,path,rlog_size/1024/1024 M from v$rlogfile;
行号 GROUP_ID FILE_ID PATH M
---------- ----------- ----------- ---------------------------------- --------------------
1 2 0 /dm8/dmdbms/data/ECARD/ECARD01.log 256
2 2 1 /dm8/dmdbms/data/ECARD/ECARD02.log 256
2.数据库参数
2.1 参数分类
手动,静态和动态
三种类型。分别对应 v$parameter 视图中 type 的 read only,in file,sys 和 session.
**手动参数(read only):**不能通过 SQL 命令或函数修改,只能通过修改 dm.ini 文本文件修改此参数(需要重启数据库才能生效)。
**静态参数(IN FILE) :**不能修改内存中的值,只能修改参数文件中的值,可以通过 SQL 命令或函数修改,但需要重启数据库才能生效。
动态参数(SYS 和SESSION ):ini 文件和内存可同时修改, 修改后即时生效。其中,SYS为动态系统级参数,修改后会影响所有的会话;SESSION 为动态会话级参数,修改后只针对当前会话生效。
-- v$parameter和v$dm_ini均可以查询dm数据库的参数
SQL> desc v$parameter;
行号 NAME TYPE$ NULLABLE
---------- ------------- ------------- --------
1 ID INTEGER Y
2 NAME VARCHAR(80) Y
3 TYPE VARCHAR(200) Y
4 VALUE VARCHAR(4000) Y
5 SYS_VALUE VARCHAR(4000) Y
6 FILE_VALUE VARCHAR(4000) Y
7 DESCRIPTION VARCHAR(255) Y
8 DEFAULT_VALUE VARCHAR(256) Y
9 ISDEFAULT INTEGER Y
9 rows got
已用时间: 2.155(毫秒). 执行号:1605
SQL> desc v$dm_ini;
行号 NAME TYPE$ NULLABLE
---------- ------------- ------------ --------
1 PARA_NAME VARCHAR(128) Y
2 PARA_VALUE VARCHAR(256) Y
3 MIN_VALUE VARCHAR(256) Y
4 MAX_VALUE VARCHAR(256) Y
5 DEFAULT_VALUE VARCHAR(256) Y
6 MPP_CHK CHAR(1) Y
7 SESS_VALUE VARCHAR(256) Y
8 FILE_VALUE VARCHAR(256) Y
9 DESCRIPTION VARCHAR(256) Y
10 PARA_TYPE VARCHAR(200) Y
10 rows got
已用时间: 10.981(毫秒). 执行号:1604.
--查询参数类型
SQL> select distinct type from v$parameter;
行号 TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
2.2 查看数据库参数
2.2.1 通过dm.ini文件查看
达梦的ini参数文件在实例路径中,文件名为dm_ini,可以直接查看该文件,获取具体ini的参数信息。
[dmdba@dmserver ECARD]$ pwd
/home/dmdba/dmdbms/data/ECARD
[dmdba@dmserver ECARD]$ head dm.ini
#DaMeng Database Server Configuration file
#this is comments
#file location of dm.ctl
CTL_PATH = /home/dmdba/dmdbms/data/ECARD/dm.ctl #ctl file path
CTL_BAK_PATH = /home/dmdba/dmdbms/data/ECARD/ctl_bak #dm.ctl backup path
CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
SYSTEM_PATH = /home/dmdba/dmdbms/data/ECARD #system path
CONFIG_PATH = /home/dmdba/dmdbms/data/ECARD #config path
TEMP_PATH = /home/dmdba/dmdbms/data/ECARD #temporary file path
2.2.2 通过参数动态视图查看
相关视图有V$PARAMETER和V$DM_INI。 同时系统视图查看参数对比查看dm.ini文件的优点是,如果要重新配置参数,可以知道参数配置的值的范围、参数类型,及其配置生效的条件和范围等。视图有V$PARAMETER和V$DM_INI,内容比dm.ini文件多一些。
通过v$parameter查看:
SQL> select name,type,value from v$parameter limit 5;
行号 NAME TYPE VALUE
---------- ------------ --------- -------------------------------------
1 CTL_PATH READ ONLY /home/dmdba/dmdbms/data/ECARD/dm.ctl
2 CTL_BAK_PATH READ ONLY /home/dmdba/dmdbms/data/ECARD/ctl_bak
3 CTL_BAK_NUM SYS 10
4 SYSTEM_PATH READ ONLY /home/dmdba/dmdbms/data/ECARD
5 CONFIG_PATH READ ONLY /home/dmdba/dmdbms/data/ECARD
通过v$dm_ini查看:
SQL> select PARA_NAME,PARA_VALUE from v$dm_ini limit 5;
行号 PARA_NAME PARA_VALUE
---------- ------------ -------------------------------------
1 CTL_PATH /home/dmdba/dmdbms/data/ECARD/dm.ctl
2 CTL_BAK_PATH /home/dmdba/dmdbms/data/ECARD/ctl_bak
3 CTL_BAK_NUM 10
4 SYSTEM_PATH /home/dmdba/dmdbms/data/ECARD
5 CONFIG_PATH /home/dmdba/dmdbms/data/ECARD
2.2.3 通过系统函数查看
在DM达梦数据库中,有3个系统函数可以查看参数配置情况。
分别是SF_GET_PARA_VALUE、SF_GET_PARA_DOUBLE_VALUE和SF_GET_PARA_STRING_VALUE三个函数,分别对应参数值为数值类型、浮点类型、字符串类型的参数时使用。
语法格式:
-- 其中,SCOPE参数为1表示获取INI文件中配置参数的值,为2表示获取内存中配置参数的值
SF_GET_PARA_VALUE(scope int, paraname varchar(256))
SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187))
SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187))
使用示例:
--查看数据库实例最大连接数,在文件和内存中的配置
SQL> SELECT SF_GET_PARA_VALUE(1, 'MAX_SESSIONS');
行号 SF_GET_PARA_VALUE(1,'MAX_SESSIONS')
---------- -----------------------------------
1 1500
已用时间: 4.974(毫秒). 执行号:1405.
SQL> SELECT SF_GET_PARA_VALUE(2, 'MAX_SESSIONS');
行号 SF_GET_PARA_VALUE(2,'MAX_SESSIONS')
---------- -----------------------------------
1 1500
已用时间: 0.770(毫秒). 执行号:1406.
2.3 修改数据库参数
查看数据库参数之后,通常需要根据应用系统和业务及数据库运行情况对参数进行修改。DM达梦数据库修改参数的方法一般有四种。
2.3.1 通过console 控制台工具修改
图形化界面方式修改,不管修改什么类型参数都需要重启数据库才能生效
2.3.1. 通过编辑dm.ini文件修改
通常在linux系统里,使用VI工具对dm.ini文件进行参数修改,然后对数据库进行重启,使得参数值生效。
2.3.2 通过alter语句修改
1.alter system
语法:
alter system set '<参数名称>'=<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
参数说明:
DEFERRED: 只适用于动态参数,指定 DEFERRED,参数值延迟生效,对当前 session 不生效,只对新创建的会话生效;缺省为立即生效,对当前会话和新创建的会话都生效。
MEMORY: 只对内存中的值做修改即时生效;
SPFILE: 只对 INI 文件中的值做修改;
BOTH: 内存和 INI 文件都做修改。默认情况下,为MEMORY。对于静态参数,只能指定SPFILE。
使用示例:
1)修改COMPATIBLE_MODE参数
# 查询服务器兼容模式设置,value当前会话,sys_value系统,file_value参数文件
SQL> select name,type,value,sys_value,file_value from v$parameter where name='COMPATIBLE_MODE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 COMPATIBLE_MODE IN FILE 0 0 0
已用时间: 11.199(毫秒). 执行号:1702.
# 修改静态参数COMPATIBLE_MODE为2,兼容oracle
SQL> alter system set 'COMPATIBLE_MODE'=2 spfile;
DMSQL 过程已成功完成
已用时间: 11.896(毫秒). 执行号:1704.
SQL> select name,type,value,sys_value,file_value from v$parameter where name='COMPATIBLE_MODE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 COMPATIBLE_MODE IN FILE 0 0 2
2)修改UNDO_RETENTION参数
# 系统级动态参数
SQL> select name,type,value,sys_value,file_value from v$parameter where name='UNDO_RETENTION';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- -------------- ---- --------- --------- ----------
1 UNDO_RETENTION SYS 90.000000 90.000000 90.000000
SQL> select name,type,value,sys_value,file_value from v$parameter where name='UNDO_RETENTION';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- -------------- ---- ---------- ---------- ----------
1 UNDO_RETENTION SYS 180.000000 180.000000 90.000000
3)修改buffer
SQL> select name,type,value,sys_value,file_value from v$parameter where name='BUFFER';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ------ ------- ----- --------- ----------
1 BUFFER IN FILE 1000 1000 1000
已用时间: 10.933(毫秒). 执行号:1800.
SQL> alter system set 'BUFFER'=2000 spfile;
2.alter session
语法:
alter session set '<参数名称>'=<参数值> [purge];
参数说明:
PURGE:指是否清理执行计划。设置后的值只对当前会话有效。当包含 PURGE 选项时会清除服务器保存的所有执行计划。
使用示例:
SQL> select name,type,value,sys_value,file_value from v$parameter where name='LIST_TABLE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------- ------- ----- --------- ----------
1 LIST_TABLE SESSION 0 0 0
已用时间: 7.494(毫秒). 执行号:1710.
SQL> alter session set 'LIST_TABLE'=1;
DMSQL 过程已成功完成
已用时间: 1.013(毫秒). 执行号:1711.
SQL> select name,type,value,sys_value,file_value from v$parameter where name='LIST_TABLE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ---------- ------- ----- --------- ----------
1 LIST_TABLE SESSION 1 0 0
已用时间: 5.848(毫秒). 执行号:1712.
2.3.3 通过系统函数修改
通常使用较多的有以下5个,分别是:
SP_SET_PARA_VALUE、SP_SET_PARA_DOUBLE_VALUE、SP_SET_PARA_STRING_VALUE;
和 SF_SET_SESSION_PARA_VALUE、SF_SET_SYSTEM_PARA_VALUE;
SQL> select name,id from v$ifun t where t.name like 'SP_SET_PARA%';
行号 NAME ID
---------- ------------------------ -----------
1 SP_SET_PARA_DOUBLE_VALUE 2902
2 SP_SET_PARA_DOUBLE_VALUE 586
3 SP_SET_PARA_STRING_VALUE 2901
4 SP_SET_PARA_STRING_VALUE 585
5 SP_SET_PARA_VALUE 2900
6 SP_SET_PARA_VALUE 584
SQL> select * from v$ifun_arg where id=586;
行号 ID NAME SEQ DATA_TYPE LEN PREC IO_TYPE COMMENT$
---------- ----------- -------- ----------- ---------------- ----------- ----------- ------- --------
1 586 RVAL -1 UNKNOWN DATATYPE 0 0 RETURN NULL
2 586 SCOPE 0 INTEGER 4 0 IN NULL
3 586 PARANAME 1 VARCHAR 256 0 IN NULL
4 586 VALUE 2 DOUBLE 8 0 IN NULL
1.SP_SET_PARA_VALUE 函数:
作用:
设置 dm.ini 文件中非浮点和字符串类型的参数值
语法:
SP_SET_PARA_VALUE (scope int, ini_param_name varchar(256) ,value bigint)
参数说明:
SCOPE:修改范围(0:memory;1:both;2:spfile)
2.SP_SET_PARA_DOUBLE_VALUE 函数
作用:
设置 dm.ini 参数中浮点型的参数值
语法:
SP_SET_PARA_DOUBLE_VALUE (scope int, ini_param_name varchar(256),value double
3.SP_SET_PARA_STRING_VALUE 函数
作用:
设置 dm.ini 文件中的字符串型参数值
语法:
SP_SET_PARA_STRING_VALUE (scope int, ini_param_name varchar(256) ,value varchar(8187))
4.SF_SET_SESSION_PARA_VALUE 函数
作用:
设置会话级INI参数的值
语法:
SF_SET_SESSION_PARA_VALUE (paraname varchar(8187),value bigint)
参数说明:
paraname: 会话级 INI 参数的参数名
5.SF_SET_SYSTEM_PARA_VALUE 函数
作用:
修改系统整型、double、varchar的静态配置参数或动态配置参数。
语法:
SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value bigint/double/varchar(256),deferred int, scope int)
参数说明:
paraname:ini 参数的参数名。
value:要设置的新值。
deferred:是否立即生效。为 0 表示当前 session 修改的参数立即生效,为 1 表示当前
session 不生效,后续再生效,默认为 0。
scope:取值为 0、1、2 。0 表示修改内存中的参数值,1 表示修改内存和 INI 文件中参数值,0 和 1 都只能修改动态的配置参数。2 表示修改 INI 文件中参数,此时可用来修改静态配置参数和动态配置参数
使用示例:
SQL> SP_SET_PARA_VALUE (2, 'MAX_SESSIONS', 200)
SQL> SELECT SF_GET_PARA_VALUE(1, 'MAX_SESSIONS');
SQL> SELECT SF_GET_PARA_VALUE(2, 'MAX_SESSIONS');
3.内存结构
3.1 数据缓冲区
用于缓存数据文件中的数据页。BUFFER 是从磁盘读出的数据页在内存中的镜像,包含四个类型,分别是normal、fast、recycle、keep,由 INI 配置中的 BUFFER、FAST_POOL_PAGES、RECYCLE、KEEP 等确定大小,不同类型的缓冲区主要表现为淘汰机制不同。
数据缓冲区的大小影响数据库的读写性能,OLTP 数据缓冲区占内存 40-60%,OLAP 可以稍大;系统应尽量减少物理读,提高逻辑读。
--查询数据缓冲区,四种类型的空间配置,如果安装时勾选自动优化,会调整数据缓冲区配置
SQL> select name,type,value,sys_value,file_value,description from v$parameter where name in ('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- --------------- ------- ----- --------- ---------- ---------------------------
1 BUFFER IN FILE 1000 1000 2000 Initial System Buffer Size In Megabytes
2 FAST_POOL_PAGES IN FILE 3000 3000 3000 Fast Pool Pages
3 KEEP IN FILE 8 8 8 Initial System KEEP Buffer Size In Megabytes
4 RECYCLE IN FILE 300 300 300 Initial System KEEP Buffer Size In Megabytes
已用时间: 9.918(毫秒). 执行号:1901.
--查看数据缓冲区信息
SQL> select * from v$bufferpool
3.2 重做日志缓冲区
重做日志是数据库与磁盘间的一层缓存,将随机的磁盘写转换成顺序写,日志缓冲区是数据库和日志间的缓存,对应 INI 参数 RLOG_BUF_SIZE。
SQL> select name,type,value,sys_value,file_value,description from v$parameter where name in ('RLOG_BUF_SIZE');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- ------------- ------- ----- --------- ---------- -----------------------------
1 RLOG_BUF_SIZE IN FILE 1024 1024 1024 The Number Of Log Pages In One Log Buffer
已用时间: 9.359(毫秒). 执行号:1903.
--查询页大小
SQL> select page;
行号 PAGE
---------- -----------
1 8192
已用时间: 0.681(毫秒). 执行号:1904.
3.3 SQL缓冲区
SQL CACHE POOL,简称 SCP,对应 INI 参数 CACHE_POOL_SIZE,是用来存储包信息(PACKAGE)、执行计划、结果集缓存的一片专用缓存区域,对于 SQL 类别比较多,或者 PKG比较多、复杂的系统,建议将该参数调大。
SQL> select name,type,value,sys_value,file_value,description from v$parameter where name in ('CACHE_POOL_SIZE');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- --------------- ------- ----- --------- ---------- ----------------------------
1 CACHE_POOL_SIZE IN FILE 100 100 100 SQL buffer size in megabytes
已用时间: 13.914(毫秒). 执行号:1905.
参数为 USE_PLN_POOL,是否启动计划重用;为 0 时禁止计划重用,1 表示启动,默认为 1。RS_CAN_CACHE,是否启动结果集缓存,默认为 0,不启用。
SQL> select name,type,value,sys_value,file_value,description from v$parameter where name in ('USE_PLN_POOL','RS_CAN_CACHE');
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- ------------ ------- ----- --------- ----------
DESCRIPTION
------------------------------------------------------------------------------------------------------------
1 USE_PLN_POOL IN FILE 1 1 1
Query Plan Reuse Mode, 0: Forbidden; 1:strictly reuse, 2:parsing reuse, 3:mixed parsing reuse
2 RS_CAN_CACHE IN FILE 0 0 0
Resultset cache mode. 0: Forbidden; 1: Allowed only if the USE_PLN_POOL is non-zero; 2: Allowed only be set
已用时间: 7.582(毫秒). 执行号:1906.
相关视图:
select * from v$cacheitem;
select * from v$cachesql;
select * from v$cachepln;
select * from v$cachers
3.4 字典缓冲区
字典缓冲区是存在数据库对象的一片缓冲区,对应 INI 参数 DICT_BUF_SIZE,DM8 里面数据对象其实对应的是系统表上的一些信息,内存中的数据对象是通过将系统表上的信息取出并解析出来得到的,该缓冲区一是避免了频繁向磁盘请求获取系统表信息,二是可以减少系统表信息解析开销。
SQL> select name,type,value,sys_value,file_value,description from v$parameter where name='DICT_BUF_SIZE';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
---------- ------------- ------- ----- --------- ---------- ----------------
1 DICT_BUF_SIZE IN FILE 50 50 50 dict buffer size
已用时间: 11.512(毫秒). 执行号:1909.
相关视图:
select * from v$dynamic_tables t where T.NAME like '%DICT%';
select * from V$DICT_CACHE_ITEM;
select * from V$DICT_CACHE;
3.5 主内存池
当其他内存池(比如运行时内存池:虚拟内存池 vm pool 和会话池 session pool 等)不够时,会先向主内存池申请空间。
服务器启动时从操作系统申请的一大片内存,后续服务器运行过程中,一般情况下,很多需要内存分配的地方都是从该池分配,如果需要的内存大于配置值(MEMORY_POOL),共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小。
相关查询:
select * from V$mem_pool;
select name, type, value, sys_value, file_value from v$parameter t where name like 'MEMORY%';
参数说明:
MEMORY_POOL:初始大小
MEMORY_EXTENT_SIZE:扩展大小
MEMORY_TARGET:目标大小
MEMORY_N_POOL:共享内存池个数,默认为 1,高并发时可设置多个。
MAX_OS_MEMORY:内存占用操作系统内存的比例,默认 100,建议调整到 80-90%。
3.6 运行时内存
特点:
使用时申请,用完即释放。包含:虚拟内存池 vm pool、会话池 session pool、排序区、HASH 区等。HASH 区和排序区都属于虚拟缓冲区 ,实际申请时使用虚拟内存池或会话内存池。
**排序区:**SORT_BUF_SIZE
少量的数据排序,优先在内存中排序,此时占用排序区;
大量的数据排序,内存中放不下,占用临时表空间排序。
如果业务经常有排序,可以适当调大排序区,提高效率。
select name, type, value, sys_value, file_value from v$parameter t where name like 'SORT%';
**HASH 区:**HJ_BUF_SIZE
HASH 连接、HASH 分区占用哈希区。如果业务 hash 连接较多,可以调大哈希区。
select name, type, value, sys_value, file_value from v$parameter t where name
like 'HJ%';
4.数据库进程
达梦为单进程多线程架构,Oracle 是多进程架构。DM 进程中主要包括监听线程、IO 线程、工作线程、调度线程、日志线程等,可以通过 DM 的动态性能视图查看线程的相关信息。
4.1 相关视图
主要相关的线程视图有如下 4 个:
V$LATCHES :记录当前正在等待的线程信息。
V$THREADS :记录当前系统中活动线程的信息,以及描述信息。
V$WTHRD_HISTORY :记录自系统启动以来,所有活动过线程的相关历史信息。
V$PROCESS :记录服务器进程信息
使用示例:
SQL> select * from v$process;
行号 PID PNAME TRACE_NAME TYPE$
---------- ----------- -------- ---------- -----------
1 20921 dmserver 1
已用时间: 3.474(毫秒). 执行号:1500.
SQL> select distinct name,count(1) from v$threads group by name order by 2 desc;
行号 NAME COUNT(1)
---------- -------------- --------------------
1 dm_lpq_thd 10
2 dm_purge_thd 10
3 dm_wrkgrp_thd 8
4 dm_io_thd 8
5 dm_tskwrk_thd 4
6 dm_hio_thd 4
7 dm_sql_thd 3
8 dm_sqllog_thd 2
9 dm_sql_aux_thd 1
10 dm_sched_thd 1
11 dm_redolog_thd 1
行号 NAME COUNT(1)
---------- ------------- --------------------
12 dm_chkpnt_thd 1
13 dm_trctsk_thd 1
14 dm_quit_thd 1
15 dm_lsnr_thd 1
16 dm_audit_thd 1
16 rows got
已用时间: 4.437(毫秒). 执行号:1501.
4.2 查看数据库进程
查看数据库进程:
[root@dmserver ~]# ps -ef|grep dmserver
dmdba 2761 1 0 11月12 ? 00:02:28 /dm8/dmdbms/bin/dmserver path=/dm8/dmdbms/data/FACE/dm.ini -noconsole
查看数据库线程:
[root@dmserver ~]# ps -T -p 2761
PID SPID TTY TIME CMD
2761 2761 ? 00:00:00 dmserver
2761 2764 ? 00:00:01 dm_sqllog_thd
2761 2766 ? 00:00:00 dm_quit_thd
2761 2767 ? 00:00:00 dm_io_thd
2761 2768 ? 00:00:00 dm_io_thd
2761 2769 ? 00:00:00 dm_io_thd
2761 2770 ? 00:00:00 dm_io_thd
2761 2771 ? 00:00:00 dm_io_thd
2761 2772 ? 00:00:00 dm_io_thd
2761 2773 ? 00:00:00 dm_io_thd
2761 2774 ? 00:00:00 dm_io_thd
2761 2775 ? 00:00:00 dm_io_thd
2761 2776 ? 00:00:00 dm_io_thd
2761 2777 ? 00:00:00 dm_io_thd
2761 2778 ? 00:00:00 dm_io_thd
2761 2779 ? 00:00:00 dm_io_thd
2761 2780 ? 00:00:00 dm_io_thd
2761 2781 ? 00:00:00 dm_io_thd
2761 2782 ? 00:00:00 dm_io_thd
2761 2783 ? 00:00:05 dmserver
2761 2786 ? 00:00:00 dm_chkpnt_thd
2761 2787 ? 00:00:07 dm_redolog_thd
2761 2789 ? 00:00:00 dm_hio_thd
2761 2790 ? 00:00:00 dm_hio_thd
2761 2791 ? 00:00:00 dm_hio_thd
2761 2792 ? 00:00:00 dm_hio_thd
2761 2793 ? 00:00:01 dm_tskwrk_thd
2761 2794 ? 00:00:01 dm_tskwrk_thd
2761 2795 ? 00:00:01 dm_tskwrk_thd
2761 2796 ? 00:00:01 dm_tskwrk_thd
2761 2797 ? 00:00:01 dm_tskwrk_thd
2761 2798 ? 00:00:01 dm_tskwrk_thd
2761 2799 ? 00:00:01 dm_tskwrk_thd
2761 2800 ? 00:00:01 dm_tskwrk_thd
2761 2801 ? 00:00:01 dm_tskwrk_thd
2761 2802 ? 00:00:01 dm_tskwrk_thd
2761 2803 ? 00:00:01 dm_tskwrk_thd
2761 2804 ? 00:00:01 dm_tskwrk_thd
2761 2805 ? 00:00:01 dm_tskwrk_thd
2761 2806 ? 00:00:01 dm_tskwrk_thd
2761 2807 ? 00:00:01 dm_tskwrk_thd
2761 2808 ? 00:00:01 dm_tskwrk_thd
2761 2809 ? 00:00:01 dm_sqllog_thd
2761 2810 ? 00:00:00 dm_sql_aux_thd
2761 2811 ? 00:00:13 dm_purge_thd
2761 2812 ? 00:00:05 dmserver
top 命令查看达梦数据库 CPU 资源占用:
[dmdba@dmserver script]$ cd ../bin
[dmdba@dmserver bin]$ ./DmServiceECARD status
DmServiceECARD (pid 3068) is running.
[dmdba@dmserver bin]$ ps -ef|grep dm.ini
dmdba 2761 1 0 11月12 ? 00:02:28 /dm8/dmdbms/bin/dmserver path=/dm8/dmdbms/data/FACE/dm.ini -noconsole
dmdba 3068 1 0 11月12 ? 00:02:30 /dm8/dmdbms/bin/dmserver path=/dm8/dmdbms/data/ECARD/dm.ini -noconsole
dmdba 24043 23880 0 23:49 pts/5 00:00:00 grep --color=auto dm.ini
[dmdba@dmserver bin]$ top -Hp 2761
Threads: 66 total, 0 running, 66 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8172916 total, 1469456 free, 4174348 used, 2529112 buff/cache
KiB Swap: 8388604 total, 8387316 free, 1288 used. 3669488 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2761 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.48 dmserver
2764 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:01.12 dm_sqllog_thd
2766 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.00 dm_quit_thd
2767 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.00 dm_io_thd
2768 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.00 dm_io_thd
2769 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.00 dm_io_thd
2770 dmdba 20 0 3126724 545116 17528 S 0.0 6.7 0:00.01 dm_io_thd
5.归档日志
5.1 开启归档
归档配置有 三 种方式:
- SQL 语句完成 dmarch.ini 和 ARCH_INI 配置;
- 手动编写 dmarch.ini 文件和设置参数 ARCH_INI;
- 利用 manager 图形化工具配置。
5.1.1 通过sql命令开归档
-- 1.查看当前的归档模式
select arch_mode from v$database;
-- 2.启动到mount状态,状态3为mount
alter database mount;
select status$ from v$database;
-- 3.添加存放归档的目录,dm没有默认归档路径,file_sie达到多大切换另一个归档,space_limit设置归档空间限制
alter database add archivelog 'dest= /dm8/dmdbms/arch,type=local,file_size=64,space_limit=10240';
-- 4.开归档
SQL> alter database archivelog;
-- 5.启动到open状态,状态4为open
alter database open;
select status$ from v$database;
-- 6.查看归档配置
select arch_mode from v$database;
select arch_name,arch_type,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;
-- 7.检查归档线程
select DISTINCT name, thread_desc from v$threads;
说明:
1. V$database 中的 status$用数字来表示状态的,这里一共有 6 种状态,如下:
1:启动;2:启动,redo 完成;3 :MOUNT ;4 :打开;5:挂起;6:关闭
2. Roles$:角色,也是用数字表示。
0:普通;1:主库;2:备库
5.1.2 修改dm.ini 与dmarch.ini开归档
# 1.使用配置文件开关归档
[dmdba@dmserver DAMENG]$ cd /opt/dm8/data/DAMENG
# 2.开启dmarch.ini配置文件
[dmdba@dmserver DAMENG]$ cat dm.ini | grep -i arch_ini
ARCH_INI = 1 #启用dmarch.ini
# 3.手动编辑dmarch.ini 文件,之后保存 。dmarch.ini文件中添加内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/arch
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 0
[ARCHIVE_LOCAL2]
ARCH_TYPE = LOCAL
ARCH_DEST = /home/dmdba/arch1
ARCH_FILE_SIZE = 64
ARCH_SPACE_LIMIT = 0
# 4.重启数据库服务生效
[dmdba@dmserver DAMENG]$ DmServiceDMSERVER stop
Stopping DmServiceDMSERVER: [ OK ]
[dmdba@dmserver DAMENG]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
# 5.检查验证
SQL> select arch_mode from v$database;
SQL> select arch_name,arch_type,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;
参数说明:
ARCH_TYPE:归档类型,有以下几种: 本地归档 LOCAL(一台主库最多配 8 个)、 远程实时归档REALTIME(一台主库最多配 8 个)、远程异步归档 ASYNC(一台主库最多配 8 个)、即时归档 TIMELY(一个主库最多配 8 个)、远程归档 REMOTE(一个主库最多配 8 个)
ARCH_DEST: 归档路径
ARCH_FILE_SIZE:单个归档文件大小,单位 MB,取值范围(64~2048),默认为 1024MB,即 1G
ARCH_SPACE_LIMIT:归档文件空间限制,单位 MB,取值范围(1024~4294967294),0表示无空间限制
5.1.3 使用manager工具开归档
使用manager图像化工具来开启归档。
5.2 关闭归档
alter database mount;
alter database noarchivelog;
-- 删除归档路径配置,可以不做
ALTER DATABASE DELETE ARCHIVELOG 'dest=/home/dmdba/arc';
ALTER DATABASE DELETE ARCHIVELOG 'dest=/home/dmdba/arc1';
alter database open;
select arch_mode from v$database;
5.3 归档切换
数据库自动完成归档的切换,DM 支持手工切换归档。
--三条语句功能一样,选择一条执行即可,产生新的归档日志,redo日志并不会切换
alter database archivelog current;
alter system archive log current;
alter system switch logfile; --oracle中是切换联机日志的,达梦中是切换归档的
5.4 归档日志清理
--归档删除相关的系统函数
SQL> select name from v$ifun t where name like 'SF_ARCHIVELOG_%';
行号 NAME
---------- --------------------------------
1 SF_ARCHIVELOG_DELETE_BEFORE_LSN
2 SF_ARCHIVELOG_DELETE_BEFORE_TIME
--删除10天前的归档日志。
Select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate-10);
--删除某个lsn之前的归档
select SF_ARCHIVELOG_DELETE_BEFORE_LSN(803946);
归档自动删除:
#dmarch.ini,可以设置保留期,到期自动清理
arch_reserver_time #归档日志保留时间,单位分钟
针对业务繁忙期间,出现磁盘 IO 不定时繁忙的情况,因为配置了归档的空间上限(归档达到此上限),生成新的归档日志前删除旧的归档日志文件造成了 IO 的不定时繁忙。
解决方案:配置 JOB 作业,在业务空间期定时清理 N 天之前的归档文件。
5.5 归档日志检测
可以通过dmrachk检查归档日志连续性.
dmrachk帮助信息:
[dmdba@dmserver ~]$ dmrachk
rachk V8
version: 03134283904-20220630-163817-20005
格式: dmrachk keyword=value
例程: dmrachk arch_fil=/opt/a.log
强制参数: 必须指定arch_fil或者arch_path
关键字 说明(默认值)
--------------------------------------------------------------------------------
ARCH_FIL 指定一个归档文件
CMP_FIL 指定一个用于比较的归档文件
ARCH_PATH 指定一个归档目录
CMP_PATH 指定一个用于比较的归档目录
RECV_PATH 指定一个待修复的归档目录
TRUNC_FIL 指定新的文件,用于存储从错误归档中,抽取的有效数据。
EXTRACT_FIL 指定新的文件,用于存储从指定的seq范围的归档文件中抽取数据
ARCH_BAK_PATH 指定备份文件路径,用于存储归档修复过程中的重复文件
CHECK 校验级别(0, 1, 2, 3, 4) 0: 文件校验, 1: 包校验(seq & magic),2:ptx校验,3:rrec校验, 4:清理无效的归档文件, 5:修复归档文件到free之后的最后一个有效日志包。默认(0)
BEGIN_LSN 指定归档目录时,指定排除小于该LSN的文件
END_LSN 指定归档目录时,指定排除大于该LSN的文件
BEGIN_SEQ 指定归档目录时,抽取大于该SEQ的文件
END_SEQ 指定归档目录时,抽取小于该SEQ的文件
BEFORE_LSN CHECK=4,指定归档目录,删除该LSN之前的文件。默认为0,所有LSN范围内日志均删除
BEFORE_SEQ CHECK=4,指定归档目录,删除该SEQ之前的文件。默认为0,所有SEQ范围内日志均删除
BEFORE_TIME CHECK=4,指定归档目录,删除该时间点之前的文件。默认删除所有时间点的归档
EXCLUDE_DB_MAGIC CHECK=4,指定归档目录,删除指定的DB_MAGIC之外的文件。
OUTPUT_FIL LOG可以指定输出到文件
DCR_INI 指定dmdcr.ini路径,若未指定,则不使用
DM_INI 目标库dm.ini的路径,用于获取日志加密信息
AFTER_FREE 指定TRUNC_FIL时,是否校验并抽取FREE之后的内容。0 不抽取;1 抽取。默认0
CYT_UPDATE 是否更新归档密钥,需要与ARCH_PATH同时使用。0 不更新;1 更新。默认0。
CYT_UPDATED_PATH 归档密钥更新目标文件所在目录。未指定时,直接在原文件上更新;若指定,则更新到新的路径,原文件保持不变
HELP 显示帮助信息
dmrachk检测归档日志:
dmrachk arch_path=/dm8/dmdbms/arch
5.6 相关数据字典
V$ARCHIVED_LOG:显示当前实例的所有归档日志文件信息。
V$DM_ARCH_INI :用来存放归档路径等相关归档参数信息。
V$ARCH_FILE :查询本地归档日志信息。对DMDSC集群,除了显示本地归档外,也显示远程归档信息。
V$ARCH_QUEUE :显示当前归档任务队列信息。
V$ARCH_SEND_INFO:用于在主库上查询各备库的日志发送统计信息。
V$ARCH_STATUS :查询归档状态信息,归档状态是由主库记录和维护的,此视图只在主库上查询有效,备库上的查询结果没有实际意义。
V$BACKUPSET_ARCH: 显示备份集的归档信息。
V$BACKUPSET_SEARCH_DIRS: 查询 V$BACKUPSET_SEARCH_DIRS 显示当前会话已添加的备份目录,即备份集搜索目录。若用户没有添加备份目录,那么仅显示默认的备份目录。
6.服务管理
6.1 数据库服务状态
Mount:不能访问数据,只能对归档模式,数据库模式等进行维护
Open:可以访问数据,对外正常提供服务
Suspend:不允许对数据更改,写日志,限制磁盘写入,否则挂起
Mount 与 open 状态可以互切 ,open 与 suspend 状态可以互切,但是 mount 与 suspend不能互切
6.2 数据库模式
Normal:默认打开服务时是 open,第一次初始化打开时不允许 mount 打开.
Primary :无论是否指定状态,打开服务时是 mount
Standby:无论是否指定状态,打开服务时是 mount
以上三种模式,在 mount 状态下允许切换
6.3 数据库服务的启动
方式1:
[dmdba@dmserver ~]$ DmServiceDMSERVER start
Starting DmServiceDMSERVER: [ OK ]
或 mount--->open
[dmdba@dmserver ~]$ DmServiceDMSERVER start mount
Starting DmServiceDMSERVER: [ OK ]
[dmdba@dmserver arch]$ disql sysdba/dmdba123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 14.063(毫秒)
SQL> select status$ from v$instance;
行号 status$
---------- -------
1 MOUNT
SQL> alter database open;
SQL> alter database mount;
Mount 与 open 可以互切.
方式2:
[dmdba@dmserver ~]$dmserver /opt/dm8/data/DAMENG/dm.ini -noconsole mount &
[dmdba@dmserver ~]$dmserver /opt/dm8/data/DAMENG/dm.ini -noconsole
Dmserver help 查看帮助
最好调到后台启动
disql sysdba/dmdba123
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 13.229(毫秒)
SQL> select status$ from v$instance;
行号 status$
---------- -------
1 MOUNT
SQL>alter database open;
注意此处加& 和不加的区别:加&时,在当前窗口执行 ctrl+c,服务的状态不受影响
方式3:
[root@dmserver ~]# systemctl enable DmServiceDMSERVER.service
[root@dmserver ~]# systemctl start DmServiceDMSERVER.service
[root@dmserver ~]# systemctl status DmServiceDMSERVER.service
方式4:类似于windows的服务管理方式
调用图形,所在位置:/opt/dm8/tool/dmservice.sh
[dmdba@dmserver tool]$ dmservice.sh
6.4 数据库服务的关闭
方式1:
[dmdba@dmserver ~]$ DmServiceECARD status
DmServiceECARD (pid 6880) is running.
[dmdba@dmserver ~]$ DmServiceECARD stop
Stopping DmServiceECARD: [ OK ]
方式2:
[dmdba@dmserver ~]$ disql sysdba/Newcapec.2022
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.157(ms)
disql V8
SQL> shutdown immediate;
或
SQL> shutdown abort;
操作已执行
已用时间: 1.331(毫秒). 执行号:0.
SQL> exit
[dmdba@dmserver ~]$ DmServiceECARD status
DmServiceECARD dead but pid file exists
方式3:
[root@dmserver ~]# systemctl stop DmServiceECARD.service
方式4:
使用图形化工具:dmservice.sh
7.数据库版本查询
方式1:
SQL> select * from v$version;
行号 BANNER
---------- ---------------------------------
1 DM Database Server 64 V8
2 8.1
3 企业版
4 DB Version: 0x7000c
5 03134283904-20220630-163817-20005
已用时间: 0.339(毫秒). 执行号:56802.
方式2:
SQL> select id_code;
行号 ID_CODE
---------- -----------------------------------
1 --03134283904-20220630-163817-20005
已用时间: 1.932(毫秒). 执行号:56803.