达梦体系结构与运维管理
一、启动/关闭数据库
(一)启动数据库
1、命令行方式
cd /dm8/dmdbms/bin
./dmserver [ini_file_path] [-noconsole] [mount]
说明:
(1)Dmserver命令行启动参数可指定dm.ini文件的路径,非控制台方式启动及指定数据库是否以MOUNT状态启动。
(2)Dmserver启动时可不指定任何参数,默认使用当前目录下的dm.ini文件,如果当前目录不存在dm.ini文件,则无法启动
(3)Dmserver 启动时可以指定-noconsole 参数。如果以此方式启动,则无法通过在控制台中输入服务器命令。当以控制台方式启动dmserver时,用户可以在控制台输入一些命令。
当不确定启动参数的使用方法时,可以使用 help 参数,将打印出格式、参数说明和使用示例。使用方法如下:
[dmdba@dmtest ~]$ /dm8/dmdbms/bin/dmserver help
格式: ./dmserver [ini_file_path] [-noconsole] [mount] [path=ini_file_path] [dcr_ini=dcr_path]
实例:
./dmserver path=/opt/dmdbms/bin/dm.ini
./dmserver /opt/dmdbms/bin/dm.ini
关键字 说明
——————————————————————————–
path dm.ini绝对路径或者dmserver当前目录的dm.ini
dcr_ini 如果使用css集群环境,指定dmdcr.ini文件路径
-noconsole 以服务方式启动
mount 配置方式启动
help 打印帮助信息
生产库实例:/dm8/dmdbms/bin/dmserver /dm8/dmdata/DMOA/dm.ini -noconsole
2、服务的方式
systemctl start DmServiceDMOASERVER.service
systemctl status DmServiceDMOASERVER.service
[root@dmtest ~]# systemctl list-unit-files|grep Dm*
DmAPService.service enabled
DmServiceDMOASERVER.service enabled
说明:
无论是在何种操作系统下运行,DM数据库在启动时都会进行LICENSE检查。若LICENSE过期或KEY文件与实际运行环境不配套,DM服务器会强制退出。
(二)关闭数据库
1、命令行模式
在启动数据库的命令工具中输入exit,然后回车,退出DM数据库
2、服务的方式
systemctl stop DmServiceDMOASERVER.service
二、表空间
DM8创建数据库时,系统会自动创建5个表空间:SYSTEM、ROLL、MAIN、TEMP、HMAIN。
(1)SYSTEM 存放全局数据字典信息和全局系统数据。
(2)ROLL 存放回滚记录。
(3)MAIN 存放临时数据。
(4)TEMP 用户默认表空间。
(5)HMAIN HUGE表空间,存放列式存储数据。
(一)创建表空间
创建名为bookshop的表空间,并指定该空间上拥有2个数据文件,每个数据文件的大小为128M:
create tablespace bookshop datafile ‘d:\bookshop1.dbf’ size 128,’d:\bookshop2.dbf’ size 128;
创建表空间时指定数据文件初始代销为128M,扩展属性为可自动扩展,每次扩展大小为100m,最大可扩展到200M:
create tablespace test datafile ‘/dm8/dmdata/DMOA/test.dbf’ size 128 autoextend on next 100 maxsize 200;
说明:
添加的数据文件大小最小为4096*页大小,如页大小为32K,则可添加的文件最小值为4096*32k=128M。
(二)删除表空间
只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。
例如删除bookshop表空间:
drop tablespace bookshop;
(三)修改表空间名
可修改已存在的由用户创建的表空间的名称。
比如可修改bookshop表空间名为books:
alter tablespace bookshop rename to books;
(四)扩展表表空间
在bookshop表空间中添加大小为64M的数据文件:
alter tablespace bookshop add datafile ‘d:\book.dbf’ size 64;
扩展bookshop表空间中数据文件book.dbf大小至128M:
alter tablespace bookshop resize datafile ‘d:\book.dbf’ to 128;
三、账户
(一)账户创建
创建用户TEST_USER时指定该用户使用的最大磁盘空间为50M
create user test_user identified by test_password diskspace limit 50;
对用户的空间限制也可进行更改,如修改用户TEST_USER的磁盘空间限制为无限制:
alter user test_user diskspace unlimited;
(二)表创建
创建表TEST时指定该表对象可使用的最大磁盘空间为500M
create table test(sno int,myinfo varchar) diskspace limit 500;
对表对象空间的限制也可进行更改,如修改表TEST的磁盘空间限制为50M:
alter table test modify diskspace limit 50;
四、重做日志文件
(一)添加重做日志文件
在服务器打开状态下,可以添加新的重做日志文件。添加的数据文件大小最小为4096*页大小,如页大小为32K,则可添加的文件最小值为4096*32k=128M。
示例如下:
alter database add logfile ‘d:\dameng03.log’ size 128;
(二)扩展重做日志文件
在服务器打开状态下,可以扩展已有的重做日志文件的大小。
alter database resize logfile ‘d:\dameng03.log’ to 256;
五、回滚表空间
回滚空间的空间名固定为ROLL,不可修改。
(一)扩展回滚表空间
回滚空间的其他管理和用户表空间的管理基本是一样的,可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性。
(二)修改回滚表空间路径
回滚文件的路径记录在控制文件里面,可以使用dmctlcvt工具在DM服务器关闭的状态下对控制文件进行修改。使用dmctlcvt工具将控制文件转换为文本文件,编辑文本文件
中要修改的文件的路径后再使用dmctlcvt工具将文本文件转换为控制文件即可。
示例如下:回滚表空间路径从d盘移动到e盘
(1)首先转换控制文件到文本文件
dmctlcvt c2t D:\dm.ctl D:\ctl.txt
(2)编辑ctl.txt文本文件
将文件中的fil_path=d:\roll.dbf改为新路径fil_path=e:\roll.dbf,保存文本文件。
(3)复制d:\roll.dbf文件为e:\roll.dbf
(4)最后转换文本文件到控制文件
dmctlcvt t2c D:\ctl.txt D:\dm.ctl
这种修改文件路径的方法也可用于重做日志文件,系统表空间文件等路径的修改
六、常用操作
(一)会话
1、连接会话概况
select*from v$connect;
说明:IP_ADDR为“::1”且TYPE$为“SQL3”,表示会话是在达蒙服务器通过bing/disql直连的
2、连接会话详细信息
如:执行的sql语句、主库名、当前会话状态、用户名等等
—会话id可以通过“select sessid ();”获取
select *from v$sessions where state=’ACTIVE’;
select *from v$sessions where user_name=’OA’ and clnt_host=’dmtest’ and appname=’disql’ and clnt_ip=’::1′ and sess_id=281223325068824;
select sess_seq,state,substr(sql_text,0,10)sql_text,user_name,create_time,clnt_host,appname,clnt_ip,osname,last_send_time,trx_id from v$sessions;
3、杀掉会话
sp_close_session(281224128100360);
说明:281224128100360是v$sessions中的sess_id
(二)SQL
1、通过会话id查询SQL执行文本
select sf_get_session_sql(281223325068824)from dual;
2、通过sql文本查询sql_id和hash_value
select*from v$sqltext where sql_text like ‘%select wftnode0_.NODEID as NODEID40_0_%’;
3、通过sql_id或hash_value查询执行计划
select*from v$sql_plan where sql_id=16919;
4、通过sql_id查询sql历史执行信息
select*from v$sql_history where sql_id=16919;
5、查询执行时长超过2秒的活动SQL语句
select sess_id,sql_text,sf_get_session_sql(sess_id)fullsql,last_recv_time,datediff(ss,last_recv_time,sysdate)y_exectime,clnt_ip from v$sessions where state=’ACTIVE’;
6、显示系统最近1000条执行时间超过预定值的SQL语句
select*from v$long_exec_sqls where to_char(finish_time,’yyyymmdd’)=’20210219′ order by finish_time desc;
(三)事务和锁
select*from v$trx
select*from v$lock;
select o.name,l.* from v$lock l,sysobjects o where l.table_id=o.id and l.blocked=1;
(四)数据库对象信息
1、所有账户
select username,user_id,account_status,default_tablespace,temporary_tablespace,created,profile from dba_users;
select o.name,u.id,o.crtdate,o.valid,u.locked_status,last_login_dtid from sysusers u,sysobjects o where u.id=o.id and o.type$=’UR’ and o.subtype$=’USER’;
2、指定账户下所有对象
select*from sysobjects where schid in(select id from sysobjects where type$=’SCH’ and name=’OA’);
sysobjects字段说明:
schid:TYPE$=SCHOBJ或者TYPE$=TABOBJ时表示对象所属的模式 ID,否则为 0。
type$:对象的主类型
1) 库级:UR(用户), SCH(模式), POLICY,GDBLINK, GSYNOM,DSYNOM,DIR,OPV,SPV,RULE,DMNOBJ;
2) 模式级:SCHOBJ;
3) 表级:TABOBJ
subtype$:对象的子类型。分为三种:
1) 用户对象:USER, ROLE;
2) 模式对象:UTAB,STAB,VIEW,PROC,SEQ,PKG,TRIG, DBLINK,SYNOM, CLASS,TYPE,JCLASS,DOMAIN,CHARSET,CLLT,CONTEXT;
3) 表对象:INDEX,CNTIND,CONS
(五)表空间
1、单独查询数据文件
select t.name ts_name,
decode(d.auto_extend,1,’自动扩展’,0,’非自动扩展’)auto_extend,
d.next_size,
t.id ts_id,
d.id file_id,
d.path file_name,
d.create_time,
d.modify_time,
d.status$,
d.total_size * sf_get_page_size() / 1024 / 1024||’M’ “Size(MB)”,
d.free_size * sf_get_page_size() / 1024 / 1024||’M’ “Free(MB)”,
(d.total_size-d.free_size) * 100 / d.total_size||’%’ “Used(%)”
from v$tablespace t, v$datafile d
where t.id = d.group_id order by t.id,d.id;
2、汇总数据文件
select name,
sum(total_size) * sf_get_page_size() / 1024 / 1024 || ‘M’ “Size(MB)”,
sum(free_size) * sf_get_page_size() / 1024 / 1024 || ‘M’ “Free(MB)”,
(sum(total_size)-sum(free_size)) * 100 / sum(total_size) || ‘%’ “Used(%)”
from (select t.name, d.total_size, d.free_size
from v$tablespace t, v$datafile d
where t.id = d.group_id)
group by name;
(六)数据库及参数配置
数据库信息:
select*from v$database;
实例信息:
select*from v$instance;
所有初始化参数:
select*from v$dm_ini;
控制文件:
select*from v$dm_ini where para_name=’CTL_PATH’;
归档配置:
select*from v$dm_arch_ini;
日志文件:
select*from v$rlogfile;
(七)查看/调整数据库参数配置
1、通过视图查看
select*from v$dm_ini where para_name=’SVR_LOG’;
此参数表示是否打开SQL日志功能,0:表示关闭;1:表示打开;2:按文件中记录数量切换日志文件,日志记录为详细模式;3:不切换日志文件,日志记录为简单模式,只记录时间和原始语句
2、通过函数查看/修改
可以在dm数据库运行过程中执行sf_get_para_value、sf_get_para_double_value和sf_get_para_string_value这三个函数来获取系统的当前配置参数,并且可以使用sp_set_para_value 和 sp_set_para_double_value 过程来修改静态/动态配置参数。
SQL> select sf_get_para_value(1,’svr_log’) from sysdual;
行号 SF_GET_PARA_VALUE(1,’svr_log’)
———- ——————————
1 1
SQL> SELECT sf_get_sys_priv(8197) FROM sysdual;
行号 SF_GET_SYS_PRIV(8197)
———- ———————
1 EXECUTE
示例如下:
sf_get_para_value(scope int, paraname varchar(256))
配置参数的值类型为数值类型时使用该函数来获取当前值。scope 参数为1表示获取ini文件中配置参数的值,为2表示获取内存中配置参数的值。
sf_get_para_double_value(scope int, paraname varchar(8187))
配置参数的值类型为浮点型时使用该函数来获取当前值。scope 参数为1 表示获取ini文件中配置参数的值,为 2 表示获取内存中配置参数的值。
sf_get_para_string_value (scope int, paraname varchar(8187))
配置参数的值为字符串类型时用该系统函数来获取当前值。scope 参数为 1 表示获取ini 文件中配置参数的值,为 2 表示获取内存中配置参数的值。
sp_set_para_value (scope int, paraname varchar(256), value int64)
该过程用于修改整型静态配置参数和动态配置参数。scope 参数为1 表示在内存和ini文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 ini 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当 scope 等于 1,试图修改静态配置参数时服务器会返回错误信息。只有具有 dba 角色的用户才有权限调用 sp_set_para_value。
sp_set_para_double_value (scope int, paraname varchar(8187),alue double)
该过程用于修改浮点型静态配置参数和动态配置参数。scope 参数为 1 表示在内存和ini 文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 ini 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数。当 scope 等于 1,试图修改静态配置参数时服务器会返回错误信息。只有具有 dba 角色的用户才有权限调用sp_set_para_double_value。
sf_set_system_para_value (paraname varchar(256), value int64\double\varchar(256), deferred int, scope int64)
该过程用于修改系统整型、double、varchar 的静态配置参数或动态配置参数。deferred 参数,为 0 表示当前 session 修改的参数立即生效,为 1 表示当前 session不生效,后续再生效,默认为 0。scope 参数为 1 表示在内存和 ini 文件中都修改参数值,此时只能修改动态的配置参数。参数为 2 表示只在 ini 文件中修改配置参数,此时可用来修 改 静 态 配 置 参 数 和 动 态 配 置 参 数 。 只 有 具 有 dba 角 色 的 用 户 才 有 权 限 调 用sf_set_system_para_value。
dm 的动态 ini 参数分为系统级和会话级两种级别。会话级参数在服务器运行过程中被修改时,之前创建的会话不受影响,只有新创建的会话使用新的参数值。
1. sf_set_session_para_value (paraname varchar(8187), value bigint)
设置某个会话级 ini 参数的值,设置的参数值只对本会话有效。
2. sp_reset_session_para_value (paraname varchar(8187))
重置某个会话级 ini 参数的值,使得这个 ini 参数的值和系统 ini 参数的值保持一致。
3. sf_get_session_para_value (paraname varchar(8187))
获得当前会话的某个会话级 ini 参数的值。需要注意的是,在对参数进行调整前,dba 应该深刻理解配置参数中每个参数的含义和对系统的影响,避免由于错误的调整导致影响整个系统对外提供正常服务。对于一些关键业务,在实际调整前,建议在测试系统上先进行试验,验证通过后再在生产系统上进行调整。
(八)数据库归档配置
1、开启归档
alter database add archivelog ‘type=local,dest=/dm8/dmarch,file_size=512,space_limit=0’;
参数说明:
file_size 单个redo日志归档文件大小,取值范围65MB-2048MB,默认是1024MB。
2、查看是否开启归档
SQL> select name,status$,role$,arch_mode from v$database;
行号 NAME STATUS$ ROLE$ ARCH_MODE
———- —- ———– ———– ———
1 DMOA 4 0 Y
3、查看归档配置
SQL> select*from v$dm_arch_ini;
行号 ARCH_NAME ARCH_TYPE ARCH_DEST ARCH_FILE_SIZE ARCH_SPACE_LIMIT ARCH_HANG_FLAG ARCH_TIMER_NAME ARCH_IS_VALID ARCH_WAIT_APPLY ARCH_INCOMING_PATH ARCH_CURR_DEST
———- ————– ——— ———– ————– —————- ————– ————— ————- ————— —————— ————–
1 ARCHIVE_LOCAL1 LOCAL /dm8/dmarch 512 51200 1 NULL Y NULL NULL /dm8/dmarch
七、常用函数
(一)执行检查点
select checkpoint(rate int);
说明:rate表示刷脏页百分比,取值范围1-100或0,如果为0表示所有脏页都刷新到磁盘,如果是30表示30%的脏页刷新到磁盘。
(二)INI参数管理
1、获得dm.ini文件中BUFFER参数值
select sf_get_para_value(1,’buffer’);
2、将dm.ini文件中HFS_CACHE_SIZE参数值设置为320
sp_set_para_value (1,’hfs_cache_size’,320);
也可以统一使用如下函数修改系统整型、double、varchar 的静态配置参数或动态配置参数:
sf_set_system_para_value (‘join_hash_size’,50,1,1);
3、设置会话级ini参数join_hash_size的值为2000
sf_set_session_para_value(‘join_hash_size’,2000);
4、重置会话级ini参数join_hash_size的值
sp_reset_session_para_value(‘join_hash_size’)
5、获取会话级ini参数join_hash_size的值:
select sf_get_session_para_value(‘join_hash_size’);
6、设置服务器日志相关INI参数
select sf_set_sql_log(1, ‘3:5:7’);
(三)杀掉会话
说明:281224128100360是v$sessions中的sess_id
sp_close_session(281224128100360);
终止 id 为 310509680 的会话的操作
call sp_cancel_session_operation (310509680);
(四)查询数据库基础信息
1、获得系统建库时指定的簇大小
select sf_get_extent_size ();
2、获得系统建库时指定的页大小
select sf_get_page_size ();
3、获得系统建库时指定字符集
select sf_get_unicode_flag ();
4、获取数据库唯一标志 sguid
select sf_get_sguid();
5、获取一个唯一编码串。
select guid();
6、返回当前连接 id
select sessid ();
7、返回当前用户 id
select uid();
8、返回当前用户名
select user();
9、获取数据库名
select cur_database();
10、获取系统当前时钟记数
select cur_tick_time();
(五)重组表空间空闲簇
call sp_reclaim_ts_free_extents(‘system’);
(六)清空执行缓存信息
call sp_clear_plan_cache();
(七)执行计划
设置计划 id 为 473546872 的计划结果集缓存生效。
call sp_set_pln_rs_cache(473546872, 1);
清空 id 为 473546872 的执行缓存信息
call sp_clear_plan_cache(473546872);
(八)用户对表或列的权限
获得用户 sysdba 对表 sys.sysobjects 的查询权限
select sf_check_user_table_priv (‘sys’, ‘sysobjects’, ‘sysdba’, 0);
获得用户 sysdba 对表 sys.sysobjects 的 id 列的查询权限
select sf_check_user_table_col_priv (‘sys’, ‘sysobjects’, ‘id’ ,’sysdba’, 0);
说明:0=select, 1=insert, 2=delete, 3=update,4=reference
(九)监控执行时间超过5秒的语句
监控结果存放在v$log_exec_sqls_time
call sp_set_long_time(5000);
查看 v$long_exec_sqls 监控的最短执行时间。
select sf_get_long_time();
(十)返回指定会话上最近处理的完整的语句
select sf_get_session_sql(96710784);
(十一)备份恢复管理
1、添加备份目录
SELECT SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,’/home/dm_bak’);
2、删除备份目录
SELECT SF_BAKSET_BACKUP_DIR_REMOVE(‘DISK’,’/home/dm_bak’);
3、清理全部备份目录
SELECT SF_BAKSET_BACKUP_DIR_REMOVE_ALL();
4、删除指定备份集
SELECT SF_BAKSET_REMOVE(‘DISK’,’/home/dm_bak/db_bak_for_remove’,1);
5、批量删除满足指定条件的所有备份集。
SELECT SF_BAKSET_REMOVE_BATCH (‘DISK’, now(), NULL, NULL);
6、批量删除指定时间之前的数据库备份集
CALL SP_DB_BAKSET_REMOVE_BATCH(‘DISK’, NOW());
7、批量删除指定表空间对象及指定时间之前的表空间备份集
CALL SP_TS_BAKSET_REMOVE_BATCH(‘DISK’,NOW(),’MAIN’);
8、批量删除指定表对象及指定时间之前的表备份集
CALL SP_TAB_BAKSET_REMOVE_BATCH(‘DISK’,NOW(),’SYSDBA’,’TAB_FOR_BATCH_DEL’);
9、批量删除指定时间之前的归档备份集
CALL SP_ARCH_BAKSET_REMOVE_BATCH(‘DISK’, NOW());
(十二)对象相关信息管理
1、返回表/视图定义
CALL SP_TABLEDEF(‘PRODUCTION’,’PRODUCT’);
CALL SP_VIEWDEF(‘PURCHASING’,’VENDOR_EXCELLENT’);
2、获取check约束/unique约束/索引/同义词/序列
通过查询系统表,得到约束 ID 为 134217770,查询check约束定义:
SELECT A.name, A.ID FROM SYSOBJECTS A, SYSOBJECTS B WHERE B.NAME=’TEST_CHECKDEF’ AND A.PID=B.ID AND A.SUBTYPE$=’CONS’;
SELECT CHECKDEF(134217770,1);
通过查询系统表,系统生成 C2 上的 INDEX 为 33555481,查询unique约束定义:
SELECT C.INDEXID FROM SYSOBJECTS O,SYSCONS C WHERE O.NAME=’CONS1′ AND O.ID=C.ID;
SELECT CONSDEF(33555481,1);
查询系统表得到索引 ID,获取index的创建定义:
SELECT NAME, ID FROM SYSOBJECTS WHERE NAME=’PRODUCT_IND’ AND SUBTYPE$=’INDEX’;
SELECT indexdef(33555530,1);
获取同义词定义:
SELECT SYNONYMDEF(‘SYSDBA’, ‘SYSOBJECTS’,0,1);
获取序列定义:
SELECT ID FROM SYSOBJECTS WHERE NAME=’SEQ1′; –查出 id 为 167772160
SELECT SEQDEF(167772160, 1);
3、对指定索引进行空间整理
CALL SP_REORGANIZE_INDEX(‘PRODUCTION’,’PRODUCT_IND’);
4、重建索引
SP_REBUILD_INDEX(‘SYSDBA’, 33555530);
5、获取自增列当前值
SELECT IDENT_CURRENT(‘PRODUCTION.PRODUCT’);
(十三)日志管理
1、删除三天之前的归档日志
SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE – 3);
2、删除 LSN 值小于 95560 的归档日志文件。
SELECT SF_ARCHIVELOG_DELETE_BEFORE_LSN(95560)
(十四)统计信息
1、对 SYSOBJECTS 表上所有的索引生成统计信息
CALL SP_TAB_INDEX_STAT_INIT (‘SYS’, ‘SYSOBJECTS’);
2、对库上所有模式下的所有用户表以及表上的所有索引生成统计信息
CALL SP_DB_STAT_INIT ();
3、对指定的索引 IND 生成统计信息
CALL SP_INDEX_STAT_INIT (‘SYSDBA’, ‘IND’);
4、对表 SYSOBJECTS 的 ID 列生成统计信息
CALL SP_COL_STAT_INIT (‘SYS’, ‘SYSOBJECTS’, ‘ID’);
5、对’SYSOBJECTS’表上所有的列生成统计信息
CALL SP_TAB_COL_STAT_INIT (‘SYS’, ‘SYSOBJECTS’);
6、对’SYSOBJECTS’表上所有的列生成统计信息,采样率 90
CALL SP_STAT_ON_TABLE_COLS (‘SYS’,’SYSOBJECTS’,90);
7、对表 SYSOBECTS 生成统计信息
CALL SP_TAB_STAT_INIT (‘SYS’, ‘SYSOBJECTS’);
8、对’SELECT * FROM SYSOBJECTS’语句涉及的所有表生成统计信息
CALL SP_SQL_STAT_INIT (‘SELECT * FROM SYSOBJECTS’);
9、清空索引 IND 的统计信息
CALL SP_INDEX_STAT_DEINIT (‘SYSDBA’, ‘IND’);
10、删除 SYSOBJECTS 的 ID 列的统计信息
CALL SP_COL_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’, ‘ID’);
11、删除 SYSOBJECTS 表上所有列的统计信息
CALL SP_TAB_COL_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’);
12、删除表 SYSOBECTS 的统计信息
CALL SP_TAB_STAT_DEINIT (‘SYS’, ‘SYSOBJECTS’);
13、统计指定执行ID的所有操作符的执行时间
需设置INI参数ENABLE_MONITOR=1、MONITOR_TIME=1 和 MONITOR_SQL_EXEC=1。
select count(*) from sysobjects where name=’SYSDBA’;
已用时间: 14.641(毫秒). 执行号:26. 可以得到执行号为 26。
et(26);
(十五)资源监控
1、监测当前系统的内存空间是否低于阀值
CALL SP_CHECK_IDLE_MEM ();
2、监测 d:\data 路径下的磁盘空间是否低于阀值
CALL SP_CHECK_IDLE_DISK (‘d:\data’);
说明:对 指 定 位 置 的 磁 盘 空 间 进 行 检 测 , 并 在 低 于 阈 值 ( 对 应 INI 参 数IDLE_DISK_THRESHOLD)的情况下打印报警记录到日志,同时报磁盘空间不足的异常。
3、查看 DM 服务器对用户命令的平均响应时间
在 dm.ini 中 ENABLE_MONITOR 取值不小于 2 的前提下执行,单位秒
SELECT SYS.SF_GET_CMD_RESPONSE_TIME();
4、查看事务的平均响应时间
在 dm.ini 中 ENABLE_MONITOR 取值不为 0 的前提下执行,单位秒
SELECT SYS.SF_GET_TRX_RESPONSE_TIME();
5、查看数据库中用户态时间占总处理时间的比值
在 dm.ini 中 ENABLE_MONITOR 取值不小于 2 的前提下执行,用户态时时间占总处理时间的比值,该比值越大表明用于 IO、事务等待等耗费的时间越少
SELECT SYS.SF_GET_DATABASE_TIME_PER_SEC();
(十六)空间占用
1、查看用户占用的空间
可以使用系统函数USER_USED_SPACE得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目。
SELECT USER_USED_SPACE(‘TEST_USER’);
2、查看表占用的空间
可以使用系统函数TABLE_USED_SPACE得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。
SELECT TABLE_USED_SPACE(‘SYSDBA’, ‘TEST’);
3、查看表使用的页数
可以使用系统函数TABLE_USED_PAGES得到表对象实际使用页的数目,函数参数为模式名和表名,返回值为实际使用页的数目。
SELECT TABLE_USED_PAGES(‘SYSDBA’, ‘TEST’);
4、查看索引占用的空间
可以使用系统函数INDEX_USED_SPACE得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。
SELECT INDEX_USED_SPACE(33555463);
5、查看索引使用的页数
可以使用系统函数INDEX_USED_PAGES得到索引实际使用页的数目,函数参数为索引ID,返回值为实际使用页的数目。
SELECT INDEX_USED_PAGES(33555463);
6、获取整个数据库占用的页数
SELECT DB_USED_SPACE ();
(十七)其他杂类函数
1、将整型数 2010,2,2,5,5 转换成日期时间类型
SELECT TO_DATETIME (2010,2,2,5,5);
2、清空动态性能视图 V$SQL_HISTORY 的历史数据
SP_DYNAMIC_VIEW_DATA_CLEAR(‘V$SQL_HISTORY’);
3、解锁用户
call SP_UNLOCK_USER(‘USER123’);
4、获得表达式的内部存储字节
select dump(‘an’,1017);
5、让一个线程睡眠 1 秒钟之后,再醒过来继续运行
sleep(1);
6、获取表的行数,功能和 SP_GET_TABLE_COUNT 一样
SELECT SP_GET_TABLE_COUNT(1097);