一、数据字典
数据字典是数据库存储对象结构,维护数据库正常运行的内部表、视图和同义词的总称。此外数据字典还提供动态的系统、实例和会话级的统计信息和状态信息。用户可以根据这些信息了解系统运行状态,分析、诊断系统问题,对系统进行优化。
二、动态性能视图
动态视图存储着数据库的配置及数据库中变化的活动状态信息。
三、同义词
达梦为了兼容Oracle的数据字典等,建了很多同义词。
四、系统过程和函数
支持在disql中修改配置信息等。
五、常用语句
内容过多,就不分类了,需要的话可以直接根据备注信息搜索。
SELECT * FROM V$TABLESPACE;--SYSTEM、ROLL、MAIN 和 TEMP 表空间查看语句 查看有哪些表空间
SELECT * FROM V$HUGE_TABLESPACE;--HMAIN 表空间查看语句
alter system set ‘RLOG_APPEND_LOGIC‘=1 both;--启动归档日志文件分析
select * from v$dm_ini where para_name =‘RLOG_APPEND_LOGIC‘;
select * from V$MEM_POOL;--动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态,可通过查询这个动态视图掌握 DM Server 的内存使用情况。
select * from V$LATCHES;--记录当前正在等待的线程信息
select * from V$THREADS;--记录当前系统中活动线程的信息
select * from V$WTHRD_HISTORY;--记录自系统启动以来,所有活动过线程的相关历史信息。
select * from V$PROCESS;--记录服务器进程信息
建库完成后,在 DM 服务器运行期间,可以通过查询 V$DM_INI 动态视图查看建库参数的具体信息。
select * from V$DM_INI;
dminit PATH=c:\dmdata PAGE_SIZE=16 --创建数据库 ./dminit help 查看参数信息
select * from V$LICENSE;--查所安装的 DM 数据库的 LICENSE 信息
CREATE USER TEST_USER IDENTIFIED BY TEST_PASSWORD DISKSPACE LIMIT 50;--创建用户
ALTER USER TEST_USER DISKSPACE UNLIMITED;--用户磁盘空间限制
SELECT USER_USED_SPACE(‘TEST_USER‘);--查看用户占用的空间
CREATE TABLE TEST (SNO INT, MYINFO VARCHAR) DISKSPACE LIMIT 500; --创建表 TEST 时可指定该表对象可使用的最大磁盘空间为 500M。
ALTER TABLE TEST MODIFY DISKSPACE LIMIT 50;--对表对象空间的限制也可进行更改,如修改表 TEST 的磁盘空间限制为 50M。
SELECT TABLE_USED_SPACE(‘SYSDBA‘, ‘TEST‘);--查看表占用的空间
SELECT TABLE_USED_PAGES(‘SYSDBA‘, ‘TEST‘);--查看表使用的页数
SELECT INDEX_USED_SPACE(33555463);--查看索引占用的空间
SELECT INDEX_USED_PAGES(33555463);--查看索引使用的页数
dm.ini 配置文件中 默认情况下,PK_WITH_CLUSTER 为 1,即建表时指定的主键自动转化为聚簇主键。没有主键,默认聚集索引健是ROWID
CREATE TABLE NEW_EMP AS SELECT * FROM EMPLOYEE;--查询建表 创建一个与已有表相同的新表,或者为了创建一个只包含另一个表的一些行和列的新表
DROP TABLE employee CASCADE;--删除的表被其他表引用(其他表的外键引用了表的任何主键或唯一键)
DELETE FROM employee;--能删除表中的行
DROP TABLE EMPLOYEE;--删除表及数据
TRUNCATE TABLE EMPLOYEE;--清空 employee 表
CALL SP_TABLEDEF(‘DMHR‘, ‘CITY‘);用系统过程查看表的定义
SELECT DBMS_METADATA.GET_DDL(‘TABLE‘,‘CITY‘,‘DMHR‘);--用包查建表语句
CREATE TABLE IDENT_TABLE (
C1 INT IDENTITY(10, 100),
C2 INT
);
insert into IDENT_TABLE values(1);
insert into IDENT_TABLE values(2);
insert into IDENT_TABLE values(3);
commit;
select * from IDENT_TABLE;
SELECT IDENT_CURRENT(‘SYSDBA.IDENT_TABLE‘);--获得表上自增列的当前值,插入第一条是10,第二条是110,第三条是210
SELECT IDENT_SEED(‘SYSDBA.IDENT_TABLE‘);--获得表上自增列的种子信息 起始值,本例起始值为1
SELECT IDENT_INCR(‘SYSDBA.IDENT_TABLE‘);--获得表上自增列的增量信息 每次增长多少,本例设置为每次增100
CREATE TABLE SPACE_TABLE (
C1 INT,
C2 INT
);
SELECT TABLE_USED_SPACE(‘SYSDBA‘,‘SPACE_TABLE‘);--已分配给表的页面数;
SELECT TABLE_USED_PAGES(‘SYSDBA‘,‘SPACE_TABLE‘);--表已使用的页面数
CREATE INDEX emp_ename ON emp(ename) STORAGE (INITIAL 50,NEXT 50,ON USERS);--明确地创建索引 INITIAL初始簇数目 next下次分配簇数目
CREATE CLUSTER INDEX clu_emp_name ON emp(ename);--对 emp 表以 ename 列新建聚集索引
CREATE UNIQUE INDEX dept_unique_index ON dept (dname) STORAGE (ON users);--唯一索引可以保证表上不会有两行数据在键列上具有相同的值
ALTER TABLE EMP ADD CONSTRAINT PK_EMP_NAME PRIMARY KEY (NAME);--添加主键约束 会自动在表emp的name列上创建一个唯一索引
SP_REBUILD_INDEX(‘SYSDBA‘, 1547892);--根据模式名和索引id重建索引
DROP INDEX emp_ename;--删除索引
ALTER TABLE emp DROP CONSTRAINT pk_emp_name;--不能直接删除与已启用的 UNIQUE KEY 键或 PRIMARY KEY 键约束相关的索引。应该如下面的语句删除主键约束pk_emp_name,同时删除其对应的索引
SELECT INDEXDEF(1547892, 0);--根据索引id查看索引定义
SELECT INDEXDEF(1547892, 1);--根据索引id查看索引定义 参数为1会把索引所属模式名带出来
ALTER TRIGGER DEL_TRG DISABLE;--禁用触发器
ALTER TRIGGER DEL_TRG ENABLE;--启用触发器
SELECT b.* FROM SYS.SYSOBJECTS a, SYS.SYSTEXTS b WHERE a.ID = b.ID and a.NAME LIKE ‘VIEW_1%‘;--查看普通视图 view_1 的信息,知道 VIEW_1 视图的定义
CALL SP_VIEWDEF(‘SYSDBA‘, ‘VIEW1‘);-- 系统过程(系统函数)获取视图定义信息,物化视图只能通过该方式获取
ALTER TABLE TEST.ADDRESS RENAME TO ADDRESS1;--修改表的名称,重命名表
ALTER TABLE t_con DISABLE CONSTRAINT t_con_pk;--禁用约束
ALTER TABLE t_con DROP CONSTRAINT t_con_pk;--删除约束
SELECT * FROM SYSOBJECTS WHERE NAME=‘T _CON _PK‘;--查找约束名为 t_con_pk 的信息
SELECT * FROM SYSOBJECTS WHERE TYPE$=‘CONS‘;--查找所有约束的信息 SELECT * FROM SYSOBJECTS WHERE TYPE$ = ‘SCHOBJ‘ OR TYPE$ = ‘TABOBJ‘;--查找模式信息
SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;--动态性能视图查询表空间与数据文件对应关系
ALTER TABLESPACE bookshop ADD DATAFILE ‘d:\book.dbf‘ SIZE 64;--添加数据文件 比如在 bookshop 表空间中添加大小为 64M 的数据文件。
ALTER TABLESPACE bookshop RESIZE DATAFILE ‘d:\book.dbf‘ TO 128;--扩展数据文件的大小 比如扩展 bookshop 表空间中数据文件 book.dbf 大小至 128M。
ALTER DATABASE ADD LOGFILE ‘C:\DMDBMS\data\dmlog_0.log‘ SIZE 200;--给数据库增加一个日志文件C:\DMDBMS\data\dmlog_0.log,其大小为200M。
ALTER DATABASE RESIZE LOGFILE ‘C:\DMDBMS\data\dmlog_0.log‘ TO 300;--扩展数据库中的日志文件 C:\DMDBMS\data\dmlog_0.log,使其大小增大为300M。
ALTER TABLESPACE bookshop RENAME DATAFILE ‘d:\book.dbf‘ TO ‘e:\book.dbf‘;--修改数据文件的路径
dmctlcvt c2t D:\dm.ctl D:\ctl.txt --转换控制文件到文本文件
dmctlcvt t2c D:\ctl.txt D:\dm.ctl --转换文本文件到控制文件 这种修改文件路径的方法也可用于重做日志文件,系统表空间文件等路径的修改
SET AUTOCOMMIT ON; --开启自动提交模式
SELECT NAME,N_PAGES,N_LOGIC_READS,RAT_HIT FROM V$BUFFERPOOL;--查询内存池 BUFFERPOOL 的页数、读取页数和命中率信息。
SELECT TRX_ID,LTYPE,LMODE,TABLE_ID FROM V$LOCK;--查询系统中上锁的事务、锁类型,以及表 ID 信息。
SELECT SESS_ID,TOP_SQL_TEXT,TIME_USED FROM V$SQL_HISTORY;--查询系统执行的 SQL 历史信息。 以前执行过哪些sql
SELECT * FROM V$DICT_CACHE;--查看字典缓存的信息。
SELECT SESS_ID,SQL_TEXT,STATE,CREATE_TIME,CLNT_HOST FROM V$SESSIONS;--查看会话信息
SELECT * FROM V$CAPTURE;--查看捕获信息
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;--视图 V$SQL_NODE_NAME 与 V$SQL_NODE_HISTORY 视图查询结点执行时间
SELECT * FROM V$LONG_EXEC_SQLS;--显示最近 1000 条执行时间较长的 SQL 语句
SELECT * FROM V$SYSTEM_LONG_EXEC_SQLS;--显示服务器启动以来执行时间最长的20条SQL语句
如果 ID 列上能过滤更多数据,建议指示用索引 IDX_T1_ID。
SELECT * FROM T1 INDEX IDX_T1_ID WHERE ID > 2011 AND NAME < ‘XXX‘;
或
SELECT /*+INDEX(T1, IDX_T1_ID) */ * FROM T1 WHERE ID > 2011 AND NAME < ‘XXX‘; --使用hint指定索引
ALTER DATABASE ADD LOGFILE ‘dameng_003.log‘ size 80;--增加大小为 80M 的日志文件 dameng_003.log
ALTER DATABASE RESIZE LOGFILE ‘dameng_003.log‘ to 100;--将日志文件 dameng_003.log 大小更改为 100M
在 MOUNT 状态下,支持对日志文件的重命名操作。
ALTER DATABASE RENAME LOGFILE ‘dameng_003.log‘ to ‘dameng_004.log‘;--将日志文件 dameng_003.log 重命名为 dameng_004.log
select * from SYSSTATS;--记录系统中的统计信息
select * from SYSMSTATS;--记录多维统计信息的内容
select * from SYSSTATPREFS; -- 记录指定模式下表的统计信息的静态参数对应的值。
select * from SYSSTATTABLEIDU;记录所有表在上一次收集统计信息时的总行数和之后对表增删改的影响行数以及是否有过 TRUNCATE 操作
select * from V$SYSSTAT;--显示系统统计信息
select * from V$JOBS_RUNNING;--显示系统中正在执行的作业信息
select * from V$LARGE_MEM_SQLS;--最近 1000 条使用大内存的 sql 语句。一条 sql 语句使用的内存值超过 ini 参数LARGE_MEM_THRESHOLD,就认为使用了大内存
select * from V$SYSTEM_LARGE_MEM_SQLS;--系统中使用大内存最多的 20 条 sql 语句。字段定义与 v$large_mem_sqls 相同
select arch_mode from v$database; --查看当前数据库是否开启归档
alter system switch logfile;--切换日志文件
select * from v$dm_ini where para_name =‘RLOG_APPEND_LOGIC‘;--查dm_ini配置文件中的参数
alter system set ‘RLOG_APPEND_LOGIC‘=1 both;--修改参数值
select * from v$dm_ini where para_name like ‘%SYSTEM_PATH%‘; --查看系统目录 数据库所在目录
select * from DBA_INDEXES;--查索引信息,包括表名和模式等信息
--查表下的索引、约束等信息
select * from sysobjects where pid =(
select id from sysobjects where name=‘city‘ and schid=(select id from sysobjects where name=‘dmhr‘)
)
--查表下列信息
select * from SYSCOLUMNS where id =(
select id from sysobjects where name=‘city‘ and schid=(select id from sysobjects where name=‘dmhr‘)
)
SELECT SF_GET_CASE_SENSITIVE_FLAG();--获得大小写敏感信息
SELECT SF_GET_EXTENT_SIZE ();--获得系统建库时指定的簇大小
SELECT PAGE();--获得系统建库时指定的页大小
SELECT SF_GET_UNICODE_FLAG ();--获得系统建库时指定字符集
select * from v$version;--显示版本信息,包括服务器版本号与DB版本号 DMDSC版本号
select * from v$database;
select * from v$instance;
SELECT SF_CHECK_SYSTEM_PACKAGES;--获得系统包的启用状态。0:未启用;1:已启用 由是否执行过 SP_CREATE_SYSTEM_PACKAGES (1);语句决定,执行过,表示已启用。
SELECT SF_CHECK_SYSTEM_PACKAGE(‘DBMS_SCHEDULER‘);--获取某一个系统包的启动状态
SELECT DBMS_METADATA.GET_DDL(‘TABLE‘,‘CITY‘,‘DMHR‘);--查询DMHR模式下CITY表的建表语句
SELECT DBMS_METADATA.GET_DDL(‘index‘,‘INDEX33555527‘,‘DMHR‘);--获取DMHR模式下INDEX33555527索引的创建语句
SELECT DBMS_METADATA.GET_DDL(‘view‘,‘test_view‘,‘DMHR‘);--获取DMHR模式下test_view视图的创建语句
SELECT DBMS_METADATA.GET_DDL(‘PROCEDURE‘,‘PROC1‘,‘DMHR‘);--获取存储过程定义语句
具体参考系统包手册GET_DDL参数部分
DBMS_OUTPUT.ENABLE();
dbms_output.put_line(‘达梦数据库有限公司‘); --将信息打印到客户端
print(‘达梦数据库有限公司‘);--将信息打印到客户端
SELECT DBMS_RANDOM.VALUE(10,100);--随机数
SELECT DBMS_SESSION.IS_SESSION_ALIVE(DBMS_SESSION.UNIQUE_SESSION_ID) FROM DUAL;--当前会话是否为活动会话
SELECT * FROM ARRAY DBMS_SPACE.TS_GET(4);--获取某一个表空间信息(表空间 ID、表空间名、表空间类型:1 DB 类型,2 临时文件组、表空间状态、表空间的最大空间、表空间的总大小(页)、包含文件的个数)
select DBMS_SPACE.TS_N_GET;--获得数据库中表空间的个数
SELECT * FROM ARRAY DBMS_SPACE.FILE_GET(4,0);-- 第一个参数是表空间号,第二个参数是文件号 获得文件信息(文件路径、文件创建时间、文件读写状态 1 读,2 写文件修改的时间、修改的事务 ID 、文件的总大小(M)、文件的空闲大小(M)、数据文件中连续空白页的起始页号、读页个数、写页个数、页大小(K)、读请求个数、写请求个数、文件可扩展标记、文件最大大小(M)、文件每次扩展大小(M)、文件包含的总描述页的数目)
SELECT * from ARRAY DBMS_SPACE.TS_ALL_GET();--获取所有表空间的id
SELECT * FROM ARRAY DBMS_SPACE.FILE_ALL_GET(6);--id为6的表空间下的所有文件的id
SELECT NAME , FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROM V$ARCHIVED_LOG;--查询有哪些归档日志
ALTER DATABASE MOUNT;--修改数据库为 MOUNT 状态
ALTER DATABASE ADD ARCHIVELOG ‘DEST = E:\dmdbms\data\DAMENG3\arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048‘;--配置本地归档
ALTER DATABASE ARCHIVELOG;--开启归档模式
ALTER DATABASE OPEN;--修改数据库为 OPEN 状态