基本命令
查询字符集
select ‘字符集’,decode(unicode,’0’,’GB18030’,’1’,’UTF-8’,’2’,’EUC-KR’)
查询系统表空间信息
Select * from dba_tablespaces;
Status是0代表正常
查询当前用户表空间
Select * from user_tablespaces;
查询数据库
Select file_name,file_id,status,tablespace_name bytes/1024/1024 from dba_data_files;
创建示例库
一般情况下,建议用户自己创建一个表空间来存放业务数据,或者将数据存放在默认的
用户表空间 MAIN 中。
用户可以通过执行如下语句来查看 SYSTEM、ROLL、MAIN 以及 TEMP 的表空间相关信
息。
达梦数据库(DM8)一些常用命令
安装 DM 时,如果选择安装示例库,系统会自动安装一个名为 BOOKSHOP 的示例库。该
示例库中,默认数据库名称为 DAMENG,默认实例名为 DMSERVER。
如果安装时没有选择安装示例库,可以通过如下 SQL 语句自行创建:
CREATE TABLESPACE BOOKSHOP DATAFILE 'BOOKSHOP.DBF' size 150;
创建 HUGE 表 T1,使用自定义的混合表空间 TS1。
CREATE TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' SIZE 128 WITH HUGE PATH
'D:\TS1\HUGE1';
CREATE HUGE TABLE T1(C1 INT, C2 INT)STORAGE(ON TS1);
例 以 SYSDBA 身份登录数据库后,创建表空间 TS1,指定数据文件 TS1.dbf,大小
128M。
CREATE TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' SIZE 128;
修改表空间
举例说明
例1将表空间 TS1 名字修改为 TS2。
ALTER TABLESPACE TS1 RENAME TO TS2;
例 2 增加一个路径为 d:\TS1_1.dbf,大小为 128M 的数据文件到表空间 TS1。
ALTER TABLESPACE TS1 ADD DATAFILE 'd:\TS1_1.dbf' SIZE 128;
例 3 修改表空间 TS1 中数据文件 d:\TS1.dbf 的大小为 200M。
ALTER TABLESPACE TS1 RESIZE DATAFILE 'd:\TS1.dbf' TO 200;
例 4 重命名表空间 TS1 的数据文件 d:\TS1.dbf 为 e:\TS1_0.dbf。
ALTER TABLESPACE TS1 OFFLINE;
ALTER TABLESPACE TS1 RENAME DATAFILE 'd:\TS1.dbf' TO 'e:\TS1_0.dbf';
ALTER TABLESPACE TS1 ONLINE;
例 5 修改表空间 TS1 的数据文件 d:\TS1.dbf 自动扩展属性为每次扩展 10M,最大文
件大小为 1G。
ALTER TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' AUTOEXTEND ON NEXT 10 MAXSIZE 1000;
例 6 修改表空间 TS1 缓冲池名字为 KEEP。
ALTER TABLESPACE TS1 CACHE="KEEP";
例 7 修改表空间为 CORRUPT 状态,注意只有在表空间处于 OFFLINE 状态或表空间损
坏的情况下才允许使用。
ALTER TABLESPACE TS1 CORRUPT;
例 8 为表空间 TS1 添加 HUGE 数据文件路径
ALTER TABLESPACE TS1 ADD HUGE PATH 'D:\dmdbms\data\DAMENG\TS1\HUGE2';
表空间删除语句
删除表空间。
语法格式
DROP TABLESPACE [IF EXISTS] <表空间名>
参数
<表空间名> 所要删除的表空间的名称
建表语句初始簇
例 2 建表时指定存储信息,表 PERSON 建立在表空间 FG_PERSON 中,初始簇大小为
5,最小保留簇数目为 5,下次分配簇数目为 2,填充比例为 85。
CREATE TABLESPACE FG_PERSON DATAFILE 'FG_PERSON.DBF' SIZE 128;
CREATE TABLE PERSON.PERSON
( PERSONID INT IDENTITY(1,1) CLUSTER PRIMARY KEY,
SEX CHAR(1) NOT NULL,
NAME VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50),
PHONE VARCHAR(25))
STORAGE(
INITIAL 5,
MINEXTENTS 5,
NEXT 2,
ON FG_PERSON,
FILLFACTOR 85);
例 8 对表 T 的 C1 列使用<半透明加密选项>进行按列加密。
先创建用户 USER01 和 USER02。
CREATE USER USER01 IDENTIFIED BY s123456789;
CREATE USER USER02 IDENTIFIED BY s123456789;
创建 T 表,对 C1 列进行按列加密,加密列对用户 USER01 和 USER02 可见。
CREATE TABLE T(C1 INT ENCRYPT MANUAL USER (USER01,USER02));
建用户
<TABLESPACE 子句> ::= DEFAULT TABLESPACE <表空间名>
<INDEX_TABLESPACE 子句> ::= DEFAULT INDEX TABLESPACE <表空间名>
例 1 创建用户名为 BOOKSHOP_USER、口令为 BOOKSHOP_PASSWORD、会话超时为
30 分钟的用户。
CREATE USER BOOKSHOP_USER IDENTIFIED BY BOOKSHOP_PASSWORD LIMIT CONNECT_TIME 3;
例 2 创建用户名为 BOOKSHOP_OS_USER、基于操作系统身份验证的用户。CREATE USER BOOKSHOP_OS_USER IDENTIFIED EXTERNALLY;
例 3设置创建 user1,设置密码为过期。需进行重设才能使用。
//使用 SYSDBA/SYSDBA 登录
CREATE USER user1 IDENTIFIED BY s123456789 PASSWORD EXPIRE;
例 1 创建用户名为 BOOKSHOP_USER、表空间为BOOKSHOP.DBF
CREATE USER BOOKSHOP_USER IDENTIFIED BY BOOKSHOP_PASSWORD datafile ‘BOOKSHOP.DBF’ size 1000;
查看表结构语句
Desc 表名;
查看用户下都有哪些表
select table_name from dba_tables where owner='SYSDBA';
查看表空间的ddl语句
select to_char(dbms_metadata.get_ddl('TABLESPACE','表空间名')) FROM DUAL;
删除归档日志方法
指定时间:SF_ARCHIVELOG_DELETE_BEFORE_TIME
指定LSN:SF_ARCHIVELOG_DELETE_BEFORE_LSN
---查看建表语句
#调用存储过程 sp_tabledef('用户名','表名')
call sp_tabledef('DMTEST','T1')
---密码策略
#说明
0 无限制。但总长度不得超过48个字节
1 禁止与用户名相同
2 口令长度需大于等于INI参数PWD_MIN_LEN设置的值
4 至少包含一个大写字母(A-Z)
8 至少包含一个数字(0-9)
16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
#查询
select * from v$dm_ini where para_name like 'PWD_POLICY%';
#修改
alter system set 'PWD_POLICY'=7 spfile;
---数据库兼容模式
#说明
0:none,
1:SQL92
2:Oracle
3:MS SQL Server
4:MySQL
5:DM6
6:Teradata
#查询
select * from v$dm_ini where para_name like 'COMPATIBLE_MODE%';
#修改
alter system set 'COMPATIBLE_MODE'=2 spfile;
---创建TEST表空间
create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size 128 autoextend on next 2 maxsize 10240,
'/dm8/data/DAMENG/TEST02.DBF' size 128 autoextend on next 2 maxsize 10240
---创建角色
create role ROLEDM;
grant create table,create view,create index to ROLEDM;
---创建用户
create user "DMTEST" identified by "Dameng123" default tablespace "TEST";
---用户授予角色权限
grant ROLEDM to DMTEST;
---创建表
create table EMP(
EMP_ID INTEGER NOT NULL,
EMP_NAME VARCHAR(20),
EMAL VARCHAR(50),
PHONE_NUM VARCHAR(20),
BIRTHDAY DATE,
HIRE_DATE DATE,
JOB_ID VARCHAR(10),
SALARY INTEGER,
DEPT_ID INTEGER,
PRIMARY KEY(EMP_ID),
FOREIGN KEY(DEPT_ID) REFERENCES DEPT(DEPT_ID)
) tablespace TEST;
create table DEPT(
DEPT_ID INTEGER NOT NULL,
DEPT_NAME VARCHAR(30),
LOCATION_ID INTEGER,
LOCATION_ADDR VARCHAR(50),
PRIMARY KEY(DEPT_ID)
) tablespace TEST;
---添加约束
alter table EMP add constraint EMP_CK check(BIRTHDAY<'2003-01-01')
---disql执行脚本
使用start命令
SQL> start /opt/script1.sql
---查看归档
#查看归档配置
select * from v$dm_arch_ini;
#查看归档状态
select * from v$arch_status;
select name,arch_mode from v$database;
select * from v$dm_arch_ini;
---修改归档模式
alter database mount;
alter database add archivelog 'DEST=/dm8/arch, TYPE=local,FILE_SIZE=64,SPACE_LIMIT=0';
alter database archivelog;
alter database open;
---备份数据库
#物理备份
Disql命令下
BACKUP DATABASE BACKUPSET '/dm8/backup/FULL_BAK';
#逻辑备份
./dexp SYSDBA/Dameng123:5238 FILE=db_full.dmp LOG=db_full.log DIRECTORY=/dm8/backup FULL=Y
---修改表空间大小
select * from v$parameter where name like '%TEMP%';
alter system set 'TEMP_SIZE'=100 spfile;
---创建视图
create view VIEW_EMP as
select a.DEPT_ID AS "部门编号",a.DEPT_NAME as "部门名称",b.sal as "部门平均工资" from dept a inner join
(select AVG(SALARY) as sal,DEPT_ID from EMP group by DEPT_ID HAVING AVG(SALARY)>9000)b
on a.DEPT_ID=b.DEPT_ID;
---添加索引
create index IND_EMP_NAME ON EMP(EMP_NAME);
查看数据库中实例信息
SELECT * FROM V$INSTANCE;
查询内存池 BUFFERPOOL 的页数、读取页数和命中率信息
SELECT NAME,N_PAGES,N_LOGIC_READS,RAT_HIT FROM V$BUFFERPOOL;
查询系统中上锁的事务、锁类型,以及表 ID 信息
SELECT TRX_ID,LTYPE,LMODE,TABLE_ID FROM V$LOCK;
SELECT * FROM V$LOCK;
查询系统中事务信息
SELECT * FROM V$TRX;
每个事务都有一系列状态,主要包括:
NOT_START | 未启动 |
ACTIVE | 活动 |
LOCK_WAIT | 锁等待 |
TRX4_PRE_COMMIT | 预提交 |
事务ID(事务号):每个事务都对应一个唯一标识TRXID,初始化为0。
事务ID在该事务启动之后从IID系统分配。当事务提交或者回滚后,该事务ID就会被重置为0。
事务再次启动时,系统为该事务重新分配TRXID。
事务分类:
普通事务和虚事务
虚事务是系统内部事务,不属于任何会话,始终驻留在事务系统中,用于回滚段清理。
活动事务和非活动事务
非活动事务是TRXID为0且状态为NOT_START的事务。
活动事务是TRXID大于0的事务,状态可以是ACTIVE或者LOCK_WAIT。
读写事务和只读事务
只读事务:只能访问数据,但不能修改数据。
SELECT SESS_ID,SQL_TEXT,STATE FROM V$SESSIONS WHERE SESSID IN (select SESS_ID from v$trx where status='ACTIVE');
相关常用动态视图
显示会话的具体信息:V$SESSIONS
显示所有活动事务的信息:V$TRX
显示事务等待信息:V$TRXWAIT
显示活动事务视图信息:V$TRX_VIEW
显示当前系统中锁的状态:V$LOCK
显示死锁的历史信息:V$DEADLOCK_HISTORY
定位锁等待问题:查看被挂起的事务
SELECT VTW.ID AS TRX_ID, VS.SESS_ID, VS.SQL_TEXT, VS.APPNAME, VS.CLNT_IP FROM V$TRXWAIT VTW LEFT JOIN V$TRX VT ON(VTW.ID=VT.ID) LEFT JOIN V$SESSIONS VS ON(VT.SESS_ID=VS.SESS_ID);
通过等待事务ID定位到连接以及执行的语句
SELECT VT.ID AS TRX_ID, VS.SESS_ID, VS.SQL_TEXT, VS.APPNAME, VS.CLNT_IP FROM V$TRX VT LEFT JOIN V$SESSIONS VS ON(VT.SESS_ID=VS.SESS_ID) WHERE VT.ID = 321643;
SP_CLOSE_SESSION关闭等待事务
SP_CLOSE_SESSION(142344256);
查询连接信息
SELECT * FROM V$SESSIONS;
查看正在运行的事务
SELECT SESS_ID,SQL_TEXT,STATE FROM V$SESSIONS WHERE SESSID IN (select SESS_ID from v$trx where status='ACTIVE');
查看系统中所有活动的线程信息
SELECT top 2* FROM V$THREADS;
查询系统执行的 SQL 历史信息
SELECT SESS_ID,TOP_SQL_TEXT,TIME_USED FROM V$SQL_HISTORY;
查看字典缓存的信息
SELECT * FROM V$DICT_CACHE;
查看会话信息
SELECT SESS_ID,SQL_TEXT,STATE,CREATE_TIME,CLNT_HOST FROM V$SESSIONS;
确定高负载的 SQL
在打开监控开关(ENABLE_MONITOR=1、MONITOR_TIME=1)后,可以通过查询动态
视图 V$LONG_EXEC_SQLS 或 V$SYSTEM_LONG_EXEC_SQLS 来确定高负载的 SQL 语句。
前者显示最近 1000 条执行时间较长的 SQL 语句,后者显示服务器启动以来执行时间最长的
20 条 SQL 语句。例如:
SELECT * FROM V$LONG_EXEC_SQLS;
或者
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS;
SELECT * FROM V$TABLESPACE;
查看用户占用的空间
可以使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,
返回值为占用的页的数目。
SELECT USER_USED_SPACE('TEST_USER');
查看表占用的空间
可以使用系统函数 TABLE_USED_SPACE 得到表对象占用空间的大小,函数参数为模式
名和表名,返回值为占用的页的数目。
SELECT TABLE_USED_SPACE('SYSDBA', 'TEST');
查看表使用的页数
可以使用系统函数 TABLE_USED_PAGES 得到表对象实际使用页的数目,函数参数为模
式名和表名,返回值为实际使用页的数目。
SELECT TABLE_USED_PAGES('SYSDBA', 'TEST');
查看索引占用的空间
可以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引
ID,返回值为占用的页的数目。
SELECT INDEX_USED_SPACE(33555463);
查看索引使用的页数
可以使用系统函数 INDEX_USED_PAGES 得到索引实际使用页的数目,函数参数为索引
ID,返回值为实际使用页的数目。
SELECT INDEX_USED_PAGES(33555463);
查看数据库状态:
Ps -ef | grep dms
查看数据库版本:
Select svr_version ||’’||ID_CODE 数据库版本 from v$instance;
查看数据库授权:
Select * from v$license;
在线日志信息:
Select * from v$rlogfile
归档配置:
Select arch_name,arch_dest,arch_file_size,arch_space_limit from v$dm_arch_ini;
归档和数据库是否分开存储:
Select top 1 D.path 数据目录 A.dest_test 归档目录 from v$datafile D, v$dm_arch_ini A;
备份信息:
Select name,describe from SYSJOB.SYSJOBS;
数据是否和备份分开存储:
Select top 1 NAME,COMMAND from “SYSJOB”.”SYSJOBSTEPS”;select path from v$datafile;
SQL日志策略:
Select para_name,para_value from v$dm_ini where para_name=’SVR_LOG’’
是否有系统管理员增加用户:
Select username from dba_users where account_status=’OPEN’;
表空间规划,建议每个用户有独立表空间:
Select username,default_tablespace from dba_users where account_status=’OPEN’;
应用用户是否有超出权限的配置:
Select grantee,granted_role from dba_role_privs where granted role=’DBA’;
是否存在死锁:
Select * from v$deadlock_history;
是否存在历史错误:
Select * from v$runtime_ERR_history;
运行日志是否存在错误记录:
Select * from v$instance_log_history where level$ in (‘ERROR’,’FATAL’);
切换模式:
Show global info;
故障切换测试:
Choose takeover GDW1_01;takeover GDW01.DW1_01B;
隔离级别修改:
用户可以在事务开始时使用以下语句设定事务为读提交隔离级:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
用户可以在事务开始时使用以下语句设定事务为串行化隔离级:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
用户可以在事务开始时使用以下语句,设定事务为读未提交隔离级:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
用户可以在事务开始时使用以下语句,设定事务为只读事务:
SET TRANSACTION READ ONLY;
查看线程信息
表 4.1 DM 线程相关的动态视图
名称 说明
V$LATCHES 记录当前正在等待的线程信息
V$THREADS 记录当前系统中活动线程的信息
V$PROCESS 记录服务器进程信息
表定义
创建表后,可以通过 SP_TABLEDEF 系统过程查看表的定义。
CALL SP_TABLEDEF('SYSDBA', 'EMPLOYEE');
DM 通过提供的 TABLEDEF 函数来显示当前表的定义。当表多次进行 ALTER TABLE 后,
显示的表定义将是最后一次修改后的建表语句。
查看自增列信息
DM 支持 INT 和 BIGINT 两种数据类型的自增列,并提供以下函数查看表上自增列的当
前值、种子和增量等信息:
1. IDENT_CURRENT:获得表上自增列的当前值;
2. IDENT_SEED:获得表上自增列的种子信息;
3. IDENT_INCR:获得表上自增列的增量信息。
CREATE TABLE IDENT_TABLE (
C1
INT
IDENTITY(100, 100),
C2
INT
);
SELECT ident_current('SYSDBA.IDENT_TABLE');
SELECT ident_seed('SYSDBA.IDENT_TABLE');
SELECT ident_incr('SYSDBA.IDENT_TABLE');
查看表空间使用情况
DM 使用段、簇和页实现数据的物理组织。DM 支持查看表的空间使用情况,包括:
1. TABLE_USED_SPACE:已分配给表的页面数;
2. TABLE_USED_PAGES:表已使用的页面数。
CREATE TABLE SPACE_TABLE (
C1
INT,
C2
INT
);
SELECT table_used_space('SYSDBA','SPACE_TABLE');
SELECT table_used_pages('SYSDBA','SPACE_TABLE');
查看索引信息
创建索引后,可以通过 INDEXDEF 系统函数查看索引的定义。
INDEXDEF(INDEX_ID int, PREFLAG int);
INDEX_ID 为索引 ID,PREFLAG 表示返回信息中是否增加模式名前缀。
例 需要查看索引 emp_name 的定义,假设其索引 ID 为 1547892,那么使用以下语句
查看索引定义
SELECT INDEXDEF(1547892, 0);
或
SELECT INDEXDEF(1547892, 1);
查看视图、序列和同义词信息
视图、序列以及同义词的定义信息可以通过查看系统表 SYSOBJECTS 和 SYSTEXTS 得
到,如查看普通视图 view_1 的信息,可以执行:
SELECT b.* FROM SYS.SYSOBJECTS a, SYS.SYSTEXTS b WHERE a.ID = b.ID and a.NAME LIKE 'VIEW_1%';
可以得到:
这样可以很明确知道 VIEW_1 视图的定义。
视图的定义信息也可以通过 SP_VIEWDEF 系统过程来查看。对于物化视图而言,其定
义只有通过该系统函数才能完整地获取。
CALL SP_VIEWDEF('SYSDBA', 'VIEW1')
查看约束信息
用户可以在系统表SYSOBJECTS和SYSCONS中查询约束的信息。例如,在SYSOBJECTS
系统表中查找约束名为 T_CON_PK 的信息。
SELECT * FROM SYSOBJECTS WHERE NAME='T_CON_PK';
查找所有约束的信息:
select * FROM SYSOBJECTS WHERE SUBTYPE$='CONS';
系统表 SYSOBJECTS 和 SYSCONS 的详细描述详见附录数据字典部分
查看有关 HUGE 表的信息
1. 表定义
对一个 HUGE 表,用户可以通过 CALL SP_TABLEDEF('SYSDBA', 'ORDERS');得
到这个表的定义语句,可以具体了解表的各个列的数据类型信息、存储属性等,还可以查看
在这个表上是否有压缩等等。
查看有关堆表的信息
可以通过系统过程SP_TABLEDEF('SCHEMA_NAME','TABLE_NAME')查看堆表的定
义信息。
查看锁
为了方便用户查看当前系统中锁的状态,DM 数据库专门提供了一个 V$LOCK 动态视图。
通过该视图,用户可以查看到系统当前所有锁的详细信息,如锁的内存地址、所属事务 ID、
锁类型、锁模式等。用户可以通过执行如下语句查看锁信息:
SELECT * FROM V$LOCK;
其结果看起来和下面类似
其中 ADDR 列表示锁的内存地址;TRX_ID 列表示锁所属的事务 ID;LTYPE 列表示锁
的类型,可能是 OBJECT(对象锁)或者 TID(TID 锁);LMODE 表示锁的模式,可能的
取值有 S(共享锁)、X(排他锁)、IS(意向共享锁)、IX(意向排他锁);BLOCKED
列表示锁是否处于上锁等待状态,0 表示已上锁成功,1 表示处于上锁等待状态;TABLE_ID
列对于对象锁,表示表对象或字典对象的 ID,对于 TID 锁,表示封锁记录对应的表 ID;
ROW_IDX 列为 TID 锁封锁记录的行信息;TID 列为 TID 锁对象事务 ID。
按照封锁对象的不同,锁可以分为 TID 锁(事务锁)和对象锁。
TID锁
TID锁以事务号为封锁对象,系统为每个活动事务生成一把TID锁,代替了其他数据库行锁的功能,防止多个事务同时修改同一行记录。
每个事务启动时创建一把独占的TID锁,锁模式为X锁,并持有到事务结束。
DM7实现的是行级多版本,每一行记录隐含一个 TID 字段,用于事务可见性判断,协调行级的多版本并发控制。
对象锁是 DM7 新引入的一种锁,通过统一的对象 ID 进行封锁,将对数据字典的封锁和表锁合并为对象锁,以达到减少封锁冲突、提升系统并发性能的目的。
对象锁(OBJECT)会对应TABLE_ID,而TABLE_ID会对应sysobjects_id
会有一个TRXID字段,能看出一个数据是哪个事务插入进去的
通过select * from a 是看不到的
表锁
表锁用来保护表数据的完整性。
DML语句执行时,对表进行上锁,协调表级的并发访问。
隐含上IS,IX锁,X锁(列存储表)。
隐式上锁
在执行SELECT、INSERT、DELETE、UPDATE等DML语句时,隐式上意向锁。
查询上IS锁。
插入、删除和更新行存储表上IX锁,列存储表上X锁。
INI参数FAST_RELEASE_SLOCK决定是否启用快速释放共享锁(除表空间锁S锁之外的所有类型为LOCK_TABLE的S锁或者IS锁),即在计划执行完后就释放,缺省启用。
显式上锁
DM 的隐式封锁足以保证数据的一致性,但用户可以根据自己的需要手工显式锁定表。
LOCK TABLE [<模式名>.]<表名> IN <封锁方式> MODE ;
<封锁方式>::=
[INTENT SHARE ] | [INTENT EXCLUSIVE] |
SHARE | EXCLUSIVE
字典锁
防止在DML/DDL的过程中,访问对象的定义被修改。
四种锁类型均采用。
字典的上锁和解锁操作在执行计划的准备阶段和执行阶段阶段各自进行。
根节点必须首先加锁,仅当持有父对象的锁时,才可以对子对象上锁。例子:分区表(不能直接对子表上锁)
DDL语句会转成对相应系统表的DML操作语句,系统会拼接SF_LOCK_DICT等内部SQL上锁函数语句插入到DML语句前。
INI参数DDL_WAIT_TIME决定DDL语句锁等待的超时时间10秒,为0会一直等待。
SYSTEM、ROLL、MAIN 以及 TEMP 的表空间信息
用户可以通过执行如下语句来查看 SYSTEM、ROLL、MAIN 以及 TEMP 的表空间相关信
息。
SELECT * FROM V$TABLESPACE;
建库参数 的具体信息
建库完成后,在 DM 服务器运行期间,可以通过查询 V$DM_INI 动态视图查看建库参数
的具体信息
检查license
可通过查看 V$LICENSE 了解所安装的 DM 数据库的 LICENSE 信息
查看约束信息
用户可以在系统表SYSOBJECTS和SYSCONS中查询约束的信息。例如,在SYSOBJECTS
系统表中查找约束名为 T_CON_PK 的信息。
SELECT * FROM SYSOBJECTS WHERE NAME='T_CON_PK';
查找所有约束的信息:
select * FROM SYSOBJECTS WHERE SUBTYPE$='CONS';
系统表 SYSOBJECTS 和 SYSCONS 的详细描述详见附录数据字典部分。
数据库系统信息
1. 系统信息
包括数据库版本、实例统计信息、资源限制信息、进程信息、全局索引 IID 信息、事
件信息;涉及的动态视图有 V$SESSIONS、V$INSTANCE、V$RESOURCE_LIMIT、
V$PROCESS、V$IID、V$SYSSTAT 等。
例 查看数据库中实例信息
SELECT * FROM V$INSTANCE;
查询结果如下:
2. 存储信息
包括数据库信息、表空间信息、数据文件信息、日志相关信息;涉及的动态视图有
V$DATAFILE、V$DATABASE、V$TABLESPACE、V$HUGE_TABLESPACE、V$RLOGFILE
等。
例 查询表空间信息
SELECT * FROM V$TABLESPACE;
查询结果如下
3. 内存管理信息
包括内存池使用情况、BUFFER 缓冲区信息、虚拟机信息、虚拟机栈帧信息;涉及的动
态视图有 V$MEM_POOL、V$VMS、V$STKFRM、V$BUFFERPOOL、V$BUFFER_LRU_FIRST、
V$BUFFER_UPD_FIRST、V$BUFFER_LRU_LAST、V$BUFFER_UPD_LAST、V$ RLOG_PKG、
V$COSTPARA 等。
例 查询内存池 BUFFERPOOL 的页数、读取页数和命中率信息
SELECT NAME,N_PAGES,N_LOGIC_READS,RAT_HIT FROM V$BUFFERPOOL;
查询结果如下:
4. 事务信息
包括所有事务信息、当前事务可见的事务信息、事务锁信息(TID 锁、对象锁)、回滚
段信息、事务等待信息;涉及的动态视图有 V$TRX、V$TRXWAIT、V$TRX_VIEW、V$LOCK、
V$PURGE 等。
例 查询系统中上锁的事务、锁类型,以及表 ID 信息
SELECT TRX_ID,LTYPE,LMODE,TABLE_ID FROM V$LOCK;
查询结果如下:
5. 线程信息
包括所有活动线程信息、线程作业信息、线程锁信息、线程的资源等待信息;涉及的动
态视图有 V$THREADS、V$LATCHES 等。
例 查看系统中所有活动的线程信息
SELECT top 2* FROM V$THREADS;
查询结果如下:
6. 历史模块
包括 SQL 历史信息、SQL 执行节点历史信息、检查点历史信息、命令行历史信息、线
程等待历史信息、死锁历史信息、回滚段历史信息、运行时错误历史信息、DMSQL 程序中
执行 DDL 语句的历史信息、返回大数据量结果集的历史信息、所有活动过线程的历史信息;
涉及的动态视图有 V$CKPT_HISTORY、V$CMD_HISTORY、V$DEADLOCK_HISTORY、
V$PLSQL_DDL_HISTORY、V$PRE_RETURN_HISTORY、V$RUNTIME_ERR_HISTORY、
V$WAIT_HISTORY、V$SQL_HISTORY、V$SQL_NODE_HISTORY、V$SQL_NODE_NAME
等。
例 查询系统执行的 SQL 历史信息
SELECT SESS_ID,TOP_SQL_TEXT,TIME_USED FROM V$SQL_HISTORY;
查询结果如下:
7. 缓存信息
包括 SQL 语句缓存、执行计划缓存、结果集缓存、字典缓存信息、字典缓存中的对象
信息、代价信息;涉及的动态视图有 V$CACHEITEM、V$SQL_PLAN、V$CACHERS、
V$CACHESQL、V$DICT_CACHE_ITEM、V$DICT_CACHE 等。
例 查看字典缓存的信息
SELECT * FROM V$DICT_CACHE;
查询结果如下:
8. 会话信息
包括连接信息、会话信息;涉及的动态视图有 V$CONNECT、V$STMTS、V$SESSIONS
等。
例 查看会话信息
SELECT SESS_ID,SQL_TEXT,STATE,CREATE_TIME,CLNT_HOST FROM V$SESSIONS;
查询结果如下:
执行时间
如执行一条 SQL 语句,然后查询其执行节点所花费时间,假设其执行 ID(EXEC_ID)
为 4。
SELECT * FROM t1 WHERE c1 = (SELECT d1 FROM t2 WHERE c2 = d2);
通过视图 V$SQL_NODE_NAME 与 V$SQL_NODE_HISTORY 视图查询结点执行时间:
SELECT N.NAME, TIME_USED, N_ENTER FROM V$SQL_NODE_NAME N, V$SQL_NODE_HISTORY H
WHERE N.TYPE$ = H.TYPE$ AND EXEC_ID = 4;
查询结果如下:
式查看到具体的统计信息。其中,动态
收集中只有 OPTIMIZER_DYNAMIC_SAMPLING=12 可以被查询到。
1. 系统表 SYSSTATS
用于执行收集统计信息操作之后,记录系统中的统计信息。
2. 系统表 SYSMSTATS
记录多维统计信息的内容。
3. 系统表 SYSSTATPREFS
记录指定模式下表的统计信息的静态参数对应的值。
4. 系统表 SYSSTATTABLEIDU
记录用户表上一次收集统计信息时的总行数和增删改的影响行数以及是否有过
TRUNCATE 操作。
5. 通 过 DBMS_STATS 包 中 COLUMN_STATS_SHOW 、 TABLE_STATS_SHOW 和
INDEX_STATS_SHOW 查看表、列、索引的统计信息。只有用过 DBMS_STATS 包中
GATHER_TABLE_STATS、GATHER_INDEX_STATS 或 GATHER_SCHEMA_STATS 生成收集
操作之后才能查看到结果。
数据字典表的模式名为
SYS。例如:SYS.SYSOBJECTS。
例 1 查看系统表 SYS.SYSOBJECTS
例 2 通过使用同义词 SYSOBJECTS 进行查询,查询的结果和 SYS.SYSOBJECTS 一致。
例 3 先启用 SVI 角色,再使用同义词 SYSOBJECTS 进行查询,查询的结果和
SYS.VSYSOBJECTS 一致。
查询数据库dm.ini参数
dm.ini 文件一般情况下位于数据库实例路径下,可以通过 vi dm.ini 命令修改。修改完成后,可以通过 v$dm_ini 或者 v$parameter 查询参数值。例如:
查询v$dm_ini
select * from v$dm_ini where para_name LIKE 'PK_WITH%';
--查询v$parameter
select * from v$parameter where name LIKE 'PK_WITH%';
查询数值类型参数值。
(1)查询数值类型参数值。
语法格式:select SF_GET_PARA_VALUE (scope int, paraname varchar(256));--SCOPE 参数为1表示获取INI 文件中配置参数的值--SCOPE 参数为2表示获取内存中配置参数的值
--例如:获取DM.INI 文件中动态参数HFS_CACHE_SIZE的当前值select SF_GET_PARA_VALUE (1,'HFS_CACHE_SIZE');
(2)查询浮点型参数值。
语法格式select SF_GET_PARA_DOUBLE_VALUE(scope int, paraname varchar(8187));--SCOPE 参数为1表示获取INI 文件中配置参数的值--SCOPE 参数为2表示获取内存中配置参数的值
--例如:获取DM.INI 文件中动态参数SEL_RATE_EQU的当前值select SF_GET_PARA_DOUBLE_VALUE(2,'SEL_RATE_EQU');
(3)查询字符串类型参数值。
语法格式select SF_GET_PARA_STRING_VALUE(scope int, paraname varchar(8187));--SCOPE 参数为1表示获取INI 文件中配置参数的值--SCOPE 参数为2表示获取内存中配置参数的值
--例如:获取DM.INI 文件中动态参数SQL_TRACE_MASK的当前值select SF_GET_PARA_STRING_VALUE(1,'SQL_TRACE_MASK');
(4)获得当前会话的某个会话级 INI 参数的值。
语法格式select SF_GET_SESSION_PARA_VALUE (paraname varchar(8187));--例如:获取当前会话USE_HAGR_FLA参数的值select SF_GET_SESSION_PARA_VALUE ('USE_HAGR_FLAG');
Dm.ini参数修改
(1)修改整型静态配置参数和动态配置参数。
语法格式
SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64);--SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息--SCOPE参数为2表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--例如:将 DM.INI 文件中动态参数 HFS_CACHE_SIZE 设置为 320,在 disql 中执行以下命令即可立即生效
SP_SET_PARA_VALUE (1,'HFS_CACHE_SIZE',320);
(2)修改浮点型静态配置参数和动态配置参数。
语法格式
SP_SET_PARA_DOUBLE_VALUE(scope int,paraname varchar(8187),value double);--SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数。当SCOPE等于1,试图修改静态配置参数时服务器会返回错误信息--SCOPE参数为2表示只在 INI 文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--例如:将 DM.INI 文件中动态参数 SEL_RATE_EQU 设置为 0.3,在 disql 中执行以下命令即可立即生效
SP_SET_PARA_DOUBLE_VALUE(1, 'SEL_RATE_EQU', 0.3);
(3)修改系统整型、double、 varchar 的静态配置参数或动态配置参数。
语法格式
SF_SET_SYSTEM_PARA_VALUE(paraname varchar(256),value int64\double\varchar(256),deferred int,scope int64);--DEFERRED参数为0表示当前session修改的参数立即生效,默认为0--DEFERRED参数为1表示当前 session不生效,后续再生效--SCOPE参数为1表示在内存和INI文件中都修改参数值,此时只能修改动态的配置参数--SCOPE参数为2表示只在INI文件中修改配置参数,此时可用来修改静态配置参数和动态配置参数
--例如:将动态参数ENABLE_DDL_ANY_PRIV设置为1,且当前session立即生效select SF_SET_SYSTEM_PARA_VALUE('ENABLE_DDL_ANY_PRIV',1,0,1);
(4)修改某个会话级 INI 参数的值,设置的参数值只对本会话有效。
语法格式
SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint);--例如:将USE_HAGR_FLAG设置为1,且只对本会话有效select SF_SET_SESSION_PARA_VALUE ('USE_HAGR_FLAG',1);
(5)重置某个会话级 INI 参数的值,使得这个 INI 参数的值和系统 INI 参数的值保持一致。
语法格式
SP_RESET_SESSION_PARA_VALUE (paraname varchar(8187));--例如:重置USE_HAGR_FLAGselect SP_RESET_SESSION_PARA_VALUE ('USE_HAGR_FLAG');
ALTER 命令修改
修改系统参数:
语法格式ALTER SYSTEM SET ‘<参数名称>’ =<参数值> [DEFERRED] [MEMORY|BOTH|SPFILE];
--静态参数修改ALTER SYSTEM SET ‘MTAB_MEM_SIZE’ =1200 spfile;--PURGE关键字指是否清理执行计划ALTER SESSION SET ‘<参数名称>’ =<参数值> [PURGE];--修改当前会话参数ALTER SESSION SET ‘HAGR_HASH_SIZE’ =2000000;