news 2026/7/10 21:39:20

学习DM管理员手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习DM管理员手册

任务:阅读DM数据库管理员手册第二部分基础数据库管理。

目标:掌握数据库的安装、实例初始化、数据库启停、表、视图、索引、模式的概念及使用

DM系统管理员

DM采用“三权分立”或者“四权分立”的安全机制。

  • 三权分立:内置数据库管理员,数据库安全员,数据库审计员
  • 四权分立:相比三权分立新增数据库对象操作员(SYSDBO)。

创建和配置DM数据库

Windows使用数据库配置助手,LINUX用dminit命令行来操作。

示例

[dmdba@localhost dm]$ dminit PATH=/dm/datatest PAGE_SIZE=16 SYSDBA_PWD=DMdba_123 SYSAUDITOR_PWD=DMauditor_123 SYSSSO_PWD=DMsysso_123 CASE_SENSITIVE=0 PORT_NUM=5336 DB_NAME=DMBMG initdb V8 db version: 0x7000d License will expire on 2026-12-25 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL log file path: /dm/datatest/DMBMG/DMBMG01.log log file path: /dm/datatest/DMBMG/DMBMG02.log write to dir [/dm/datatest/DMBMG]. create dm database success. 2026-07-01 09:40:14

PATH:设定数据库路径

PAGE_SIZE:使用的页的大小,默认8K,这里设置成16K。

xxx_PWD:数据库不同类型管理员的初始密码

CASE_SENSITIVE:大小写敏感性设置,0表示不敏感,1表示敏感

PORT_NUM:初始化时设置dm.ini中的PORT_NUM

DB_NAME:数据库名字

注册数据库服务

执行脚本创建系统服务

[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /dm/datatest/DMBMG/dm.ini -p DMBMG Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDMBMG.service → /usr/lib/systemd/system/DmServiceDMBMG.service. 创建服务(DmServiceDMBMG)完成

注销数据库服务

执行脚本删除系统服务

[root@localhost root]# ./dm_service_uninstaller.sh -n DmServiceDMBMG 是否删除服务(DmServiceDMBMG)?(Y/y:是 N/n:否): Y Removed /etc/systemd/system/multi-user.target.wants/DmServiceDMBMG.service. 删除服务文件(/usr/lib/systemd/system/DmServiceDMBMG.service)完成 删除服务(DmServiceDMBMG)完成

启动数据库

Linux服务的方式启动,用之前注册的服务启动即可。

systemctl start DmServiceDMBMG.service

命令行启动方式,去到软件目录/bin下,找到DmService+初始化时的DB_NAME的文件。

cd /dm/dmdbms/bin [dmdba@localhost bin]$ ./DmServiceDMBMG start Starting DmServiceDMBMG: [ OK ]

停止数据库

Linux服务的方式关闭

[root@localhost ~]# systemctl stop DmServiceDAMENG.service [root@localhost ~]# systemctl status DmServiceDAMENG.service ● DmServiceDAMENG.service - DM Instance Service(DmServiceDAMENG). Loaded: loaded (/usr/lib/systemd/system/DmServiceDAMENG.service; enabled; vendor preset: disabled) Active: inactive (dead) since Wed 2026-07-01 16:03:21 CST; 4s ago Process: 6225 ExecStop=/dm/dmdbms/bin/DmServiceDAMENG stop (code=exited, status=0/SUCCESS) Main PID: 1533 (code=exited, status=0/SUCCESS) Jul 01 08:23:05 localhost.localdomain systemd[1]: Starting DM Instance Service(DmServiceDAMENG).... Jul 01 08:23:20 localhost.localdomain DmServiceDAMENG[1467]: [37B blob data] Jul 01 08:23:20 localhost.localdomain systemd[1]: Started DM Instance Service(DmServiceDAMENG).. Jul 01 16:03:11 localhost.localdomain systemd[1]: Stopping DM Instance Service(DmServiceDAMENG).... Jul 01 16:03:21 localhost.localdomain DmServiceDAMENG[6225]: [37B blob data] Jul 01 16:03:21 localhost.localdomain systemd[1]: DmServiceDAMENG.service: Succeeded. Jul 01 16:03:21 localhost.localdomain systemd[1]: Stopped DM Instance Service(DmServiceDAMENG)..

命令行方式关闭

[dmdba@localhost bin]$ ./DmServiceDMBMG stop Stopping DmServiceDMBMG: [ OK ]

管理模式对象的空间

创建普通表和索引的存储参数

  • initial:初始簇数目,必须是整数,1-256,默认值1.
  • NEXT:下次分配簇数目,必须是整数,1-256,默认值1.
  • MINEXTENTS:最小保留簇数目,删除表中记录后,如果表使用的簇数小于这个值,就不再释放表空间。1-256,默认值1.
  • FILLFACTOR:填充比例,0-100,默认值0等价于100。0不是0%,而是默认填充满。
  • 表空间名:在指定表空间建表或者索引,默认为用户缺省表空间。‘

示例:表PERSON建立在表空间DMDATA中,初始簇大小为5,最小保留簇数目为5,下次分配簇数目为2,填充比例为85。

SQL> create table sysdba.person(persionid int IDENTITY(1,1) CLUSTER PRIMARY KEY, sex char(1) not null, name varchar(50)) storage(initial 5,MINEXTENTS 5,NEXT 2,FILLFACTOR 85,on DMDATA);2 操作已执行 已用时间: 81.095(毫秒). 执行号:1301.

可以通过如下SQL查出来表的DDL。

SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'PERSON', 'SYSDBA') FROM DUAL;2 行号 DBMS_METADATA.GET_DDL('TABLE','PERSON','SYSDBA') ---------- --------------------------------------------------------------------------------------------------- 1 CREATE TABLE "SYSDBA"."PERSON" ( "PERSIONID" INT IDENTITY(1, 1) NOT NULL, "SEX" CHAR(1) NOT NULL, "NAME" VARCHAR(50), CLUSTER PRIMARY KEY("PERSIONID")) STORAGE(INITIAL 5, NEXT 2, MINEXTENTS 5, FILLFACTOR 85, ON "DMDATA", CLUSTERBTR) ; 已用时间: 43.215(毫秒). 执行号:1303.

分区表的某个分区也可以指定存储参数

CREATE TABLE PARTITION_TABLE (C1 INT, C2 INT) PARTITION BY RANGE(C1) (PARTITION PAR1 VALUES LESS THAN(5), PARTITION PAR2 VALUES LESS THAN(100) STORAGE (ON DMDATA));

同样也可以通过SQL查询出表的DDL

SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'PARTITION_TABLE', 'SYSDBA') FROM DUAL;2 行号 DBMS_METADATA.GET_DDL('TABLE','PARTITION_TABLE','SYSDBA') ---------- --------------------------------------------------------------------------------------------------- 1 CREATE TABLE "SYSDBA"."PARTITION_TABLE" ( "C1" INT, "C2" INT) PARTITION BY RANGE("C1") ( PARTITION "PAR1" VALUES LESS THAN(5) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PAR2" VALUES LESS THAN(100) STORAGE(ON "DMDATA", CLUSTERBTR) ) STORAGE(ON "MAIN", CLUSTERBTR) ; 已用时间: 22.602(毫秒). 执行号:1305.

用户和表上的空间限制

用户的空间限制

可以通过设置表空间配额来限制用户使用的表空间大小

SQL> CREATE USER TEST_USER IDENTIFIED BY Testuser123 QUOTA 50M ON DMDATA; 操作已执行 已用时间: 70.803(毫秒). 执行号:1306.

也可以修改用户的表空间配额限制。

SQL> ALTER USER TEST_USER QUOTA 100M ON DMDATA; 操作已执行 已用时间: 33.829(毫秒). 执行号:1307. SQL>

表对象的空间限制

如创建表TEST时可指定该表对象可使用的最大磁盘空间为500M。

SQL> CREATE TABLE TESTLIMIT (SNO INT, MYINFO VARCHAR) DISKSPACE LIMIT 500; 操作已执行 已用时间: 13.528(毫秒). 执行号:1308.

表对象空间限制也可以进行修改。

SQL> alter table test modify diskspace limit 50; 操作已执行 已用时间: 193.394(毫秒). 执行号:3101.

查看模式对象的空间使用

查看用户占用的空间

使用系统函数 USER_USED_SPACE 得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目

SQL> SELECT USER_USED_SPACE('SYSDBA'); 行号 USER_USED_SPACE('SYSDBA') ---------- ------------------------- 1 128 已用时间: 39.938(毫秒). 执行号:3103.

查看表占用的空间

可以使用系统函数TABLE_USED_SPACE得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。

SQL> SELECT TABLE_USED_SPACE('SYSDBA', 'TEST'); 行号 TABLE_USED_SPACE('SYSDBA','TEST') ---------- --------------------------------- 1 16

查看表使用的页数

可以使用系统函数TABLE_USED_PAGES得到表对象实际使用页的数目,函数参数为模式名和表名,返回值为实际使用页的数目。

SQL> SELECT TABLE_USED_PAGES('SYSDBA', 'TEST'); 行号 TABLE_USED_PAGES('SYSDBA','TEST') ---------- --------------------------------- 1 15 已用时间: 19.625(毫秒). 执行号:3105.


占用空间和实际使用是两个概念,是不一样的。

查看表空闲堆栈占用的空间

以使用系统函数 TABLE_FREE_PAGE_STACK_USED_SPACE 得到表空闲页堆栈占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。

SQL> SELECT TABLE_FREE_PAGE_STACK_USED_SPACE ('SYSDBA', 'TEST'); SELECT TABLE_FREE_PAGE_STACK_USED_SPACE ('SYSDBA', 'TEST'); [-2004]:不支持的语句类型. 已用时间: 2.118(毫秒). 执行号:0.

不知道为啥安全版执行不了,找朋友测试了下企业版可以执行。

查看索引占用的空间

以使用系统函数 INDEX_USED_SPACE 得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。

SQL> SELECT INDEX_USED_SPACE(33555463); 行号 INDEX_USED_SPACE(33555463) ---------- -------------------------- 1 16

查看索引使用的页数

可以使用系统函数INDEX_USED_PAGES得到索引实际使用页的数目,函数参数为索引ID,返回值为实际使用页的数目。

SQL> SELECT INDEX_USED_PAGES(33555463); 行号 INDEX_USED_PAGES(33555463) ---------- -------------------------- 1 15

管理表

  • 管理表的准则
  • 创建表
  • 修改表
  • 删除表
  • 清空表
  • 查看表信息

管理表的准则

创建表

创建普通表,如果不指定表空间,或者创建用户没有默认表空间,则创建到MAIN表空间

CREATE TABLE EMPLOYEE ( EMPNO INT PRIMARY KEY, ENAME VARCHAR(15) NOT NULL, JOB VARCHAR(10), MGR INT CONSTRAINT EMP_FKEY REFERENCES EMPLOYEE(EMPNO), HIREDATE DATE DEFAULT (CURDATE), SALARY FLOAT) STORAGE ( INITIAL 50, NEXT 50, MINEXTENTS 10, FILLFACTOR 80, ON DMDATA);

这个表包含了字段,字段类型,主键约束,自引用约束,默认值,存储参数等。

指定表的聚集索引

每一个普通表都有一个聚集索引,数据通过聚集索引键排序,根据聚集索引键可以快速查询任何记录。

DM的默认聚集索引键是ROWID,很多情况下,以ROWID建的默认聚集索引并不能提高查询速度,因为实际情况下很少人根据ROWID来查找数据。

三种方式供用户指定聚集索引键:

  1. CLUSTER PRIMARY KEY:指定列为聚集索引键,并同时指定为主键,称为聚集主键;
  2. CLUSTER KEY:指定列为聚集索引键,但是是非唯一的;
  3. CLUSTER UNIQUE KEY:指定列为聚集索引键,并且是唯一的。

例子:创建student表,设定stuno字段为聚合索引键

create table student( stuno int cluster primary key, stuname varchar(15) not null, teano int, classid int );

聚合索引键可以提高查询性能,但是插入记录也需要根据聚集索引键定位插入位置,有可能导致页
面的分裂而影响插入性能。

PK_WITH_CLUSTER参数可以控制是否将表中的主键,转换为聚集主键。默认值0不转化,1是转化。

对水平分区表、列存表、堆表无效。

指定表的填充因子

在存储参数部分已经做过。

查询方式建表

用于创建一个与已有表相同的新表,或者为了创建一个只包含另一个表的一些行和列的新表。

SQL> create table new_EMP as select * from employee; 操作已执行 已用时间: 43.322(毫秒). 执行号:3113.

CTAB_SEL_WITH_CONS参数控制的是CREATE TABLE ... AS SELECT ...(CTAS)是否复制源表约束及相关属性。

含义
0(默认)基本不拷贝约束,只保留部分 NOT NULL、自增等属性
1拷贝约束,但不拷贝聚集索引、分区等存储信息
2尽可能完整拷贝表结构、分区、存储属性、约束、聚集索引等
  • CTAB_SEL_WITH_CONS参数测试详细见另外一篇博客
  • DM数据库CTAB_SEL_WITH_CONS参数用于控制create table as select情况测试

创建临时表

临时表 ON COMMIT 关键词指定表中的数据是事务级还是会话级的,默认情况下是事务级的。

  1. ON COMMIT DELETE ROWS:指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除;
  2. ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时才清空表,并释放临时B树。

事务级临时表会话级临时表效果测试(待做)

修改表

想更改的表如果在所属的模式中,用户必须具有ALTER TABLE数据库权限;若在其他模式中,用户必须有ALTER ANY TABLE的数据库权限。

一般可以做

  1. 加列、删列、改列定义(列名、数据类型、长度、默认值),有关参数ALTER_TABLE_OPT
  2. 添加、修改或删除与表相关的完整性约束
  3. 表的重命名
  4. 启动或停用与表相关的完整性约束
  5. 启动或停用与表相关的触发器
  6. 修改表的SPACE LIMIT(空间限制)
  7. 增删自增列

删除表

当一个表不再使用时,可以将其删除。删除表时

  1. 表的结构信息从数据字典中删除,表中的数据不可访问;
  2. 表上的所有索引和触发器被一起清除;
  3. 所有建立在该表上的同义词、视图和存储过程变为无效;
  4. 所有分配给表的簇标记为空闲,可被分配给其他的数据库对象。

一般情况下,普通用户只能删除自己模式下的表。若要删除其他模式下的表,则必须具有DROP ANY TABLE数据库权限。

查看表信息

查看表定义

创建表后,可以通过SP_TABLEDEF系统过程查看表的定义。

SQL> CALL SP_TABLEDEF('SYSDBA', 'EMPLOYEE'); 行号 COLUMN_VALUE ---------- ---------------------------------------------------------------------------------------------- 1 CREATE TABLE "SYSDBA"."EMPLOYEE" ( "EMPNO" INT NOT NULL, "ENAME" VARCHAR(15) NOT NULL, "JOB" VARCHAR(10), "MGR" INT, "HIREDATE" DATE DEFAULT CURDATE, "SALARY" FLOAT, NOT CLUSTER PRIMARY KEY("EMPNO"), CONSTRAINT "EMP_FKEY" FOREIGN KEY("MGR") REFERENCES "SYSDBA"."EMPLOYEE"("EMPNO") WITH INDEX ) STORAGE(INITIAL 50, NEXT 50, MINEXTENTS 10, FILLFACTOR 80, ON "DMDATA", CLUSTERBTR) ;

查看自增列信息

DM支持INT、BIGINT和DEC(n, 0)三种数据类型的IDENTITY自增列,并提供以下函数查看表上自增列的当前值、种子(初始值)和增量等信息:

SQL> CREATE TABLE IDENT_TABLE ( C1 INT IDENTITY(100, 100), C2 INT );2 3 4 操作已执行 已用时间: 24.788(毫秒). 执行号:4829. SQL> SELECT ident_current('SYSDBA.IDENT_TABLE'); 行号 IDENT_CURRENT('SYSDBA.IDENT_TABLE') ---------- ----------------------------------- 1 100 已用时间: 6.299(毫秒). 执行号:4830. SQL> SELECT ident_seed('SYSDBA.IDENT_TABLE'); 行号 IDENT_SEED('SYSDBA.IDENT_TABLE') ---------- -------------------------------- 1 100 已用时间: 4.513(毫秒). 执行号:4831. SQL> SELECT ident_incr('SYSDBA.IDENT_TABLE'); 行号 IDENT_INCR('SYSDBA.IDENT_TABLE') ---------- -------------------------------- 1 100 已用时间: 4.108(毫秒). 执行号:4832.

查看表的空间使用情况

略,再查看模式对象空间已完成。

管理索引

聚集索引和非聚集索引

  • 聚集索引(一级索引,主索引)::每个表只有一个聚集索引
  • 非聚集索引(二级索引,辅助索引):一个表可以有多个非聚集索引

示例:

create table testidx(id int,name varchar(20),department varchar(20)); insert into testidx values(1, 'Zhang San', 'A部'); INSERT INTO testidx VALUES(2, 'Li Si', 'B部'); INSERT INTO testidx VALUES(3, 'Wang Wu', 'C部'); INSERT INTO testidx VALUES(4, 'Chen Liu', 'D部'); --创建聚集索引,索引列为ID CREATE CLUSTER INDEX C1 on testidx (ID); --创建非聚集索引,索引键为NAME。 CREATE INDEX S1 on testidx(NAME);

使用聚集索引查找

SQL> EXPLAIN SELECT * FROM testidx WHERE ID=2; 1 #NSET2: [1, 1, 112] 2 #PRJT2: [1, 1, 112]; exp_num(4), is_atom(FALSE) 3 #CSEK2: [1, 1, 112]; scan_type(ASC), C1(TESTIDX), scan_range[2,2] 已用时间: 26.883(毫秒). 执行号:0.

使用非聚集索引进行查找

SQL> EXPLAIN SELECT ID FROM testidx WHERE NAME='Wang Wu'; 1 #NSET2: [1, 1, 64] 2 #PRJT2: [1, 1, 64]; exp_num(2), is_atom(FALSE) 3 #SSEK2: [1, 1, 64]; scan_type(ASC), S1(TESTIDX), scan_range['Wang Wu','Wang Wu'], is_global(0) 已用时间: 6.656(毫秒). 执行号:0.

先使用非聚集索引进行查找,再通过非聚集索引关联上聚集索引进行二次查找

SQL> EXPLAIN SELECT DEPARTMENT FROM testidx WHERE NAME='Chen Liu'; 1 #NSET2: [1, 1, 96] 2 #PRJT2: [1, 1, 96]; exp_num(1), is_atom(FALSE) 3 #BLKUP2: [1, 1, 96]; S1(TESTIDX) 4 #SSEK2: [1, 1, 96]; scan_type(ASC), S1(TESTIDX), scan_range['Chen Liu','Chen Liu'], is_global(0) 已用时间: 12.096(毫秒). 执行号:0.

虚索引和实索引

  • 虚索引:指不存储数据的索引。虚索引由系统自动并隐式地创建,目的是保证约束的正确性。
  • 实索引:指存储数据的索引。虚索引以外的索引均为实索引。

单列索引和复合索引

  • 单列索引:只有一个索引键的索引。
  • 复合索引:含有多个索引键的索引。

全局索引和局部索引

  • 全局索引:全局索引是以整张表的数据为对象而建立的索引。
    全局索引又分为全局非分区索引和全局分区索引。指定了<PARTITION子句>的索引即为分区索引。只有DMDPC功能支持分区索引。
    全局非分区索引可用于除DMDPC以外的任何环境中。
create table t1_part(c1 int, c2 int, c3 int) partition by range(c1) ( partition p1 values less than(100), partition p2 values less than(200), partition p3 values less than(maxvalue) ); //创建全局分区索引 create index idx1 on t1(c2) global;
  • 局部索引:局部索引是在分区表的每个分区上创建的索引。
#创建局部索引,必须缺省GLOBAL关键字 create index idx1 on t1(c3);

管理索引准则

在表中插入数据后创建索引

索引正确的表和列

使用下面的准则来决定何时创建索引:

  1. 如果需要经常地检索大表中的少量的行,就为查询键创建索引
  2. 为了改善多个表的连接的性能,可为连接列创建索引
  3. 主键和唯一键自动具有索引,在外键上很多情况下也创建索引
  4. 小表不需要索引

选取表中的索引列时可以考虑以下几点:

  1. 列中的值相对比较唯一 (重复值少)
  2. 取值范围大,适合建立索引;
  3. CLOB和TEXT只能建立全文索引、BLOB不能建立任何索引。

为性能而安排索引列

在CREATE INDEX 语句中列的排序会影响查询的性能。通常,将最常用的列放在最前面。

非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。

限制每个表的索引的数量

索引越多,修改表数据的开销就越大.

创建索引

在用户自己的模式中创建索引,至少要满足如下条件之一:

  1. 要被索引的表是在自己的模式中 ;
  2. 在要被索引的表上有CREATE INDEX 权限;
  3. 具有 CREATE ANY INDEX 数据库权限。

要在其他模式中创建索引,用户必须具有 CREATE ANY INDEX 数据库权限。

显式地创建索引

可以用CREATE INDEX语句显式地创建索引。

SQL> create table t72(id int,name varchar(10)); 操作已执行 已用时间: 52.394(毫秒). 执行号:4842. SQL> create index idx_t72_id on t72(id) storage(initial 50 ,next 50 ,on DMDATA); 操作已执行 已用时间: 44.209(毫秒). 执行号:4843.
创建聚集索引
SQL> CREATE CLUSTER INDEX clu_idx_t72_name ON t72(name); 操作已执行 已用时间: 431.122(毫秒). 执行号:4844.

新建聚集索引会重建这个表以及其所有索引,包括二级索引、函数索引,是一个代价非常大的操作。因此,最好在建表时就确定聚集索引键,或在表中数据比较少时新建聚集索引,而尽量不要对数据量非常大的表建立聚集索引。

创建唯一索引

唯一索引可以保证表上不会有两行数据在键列上具有相同的值。可用CREATE UNIQUE INDEX语句来创建唯一索引。

CREATE UNIQUE INDEX dept_unique_index ON dept (dname) STORAGE (ON users);
创建基于函数的索引

基于函数的索引促进了限定函数或表达式的返回值的查询,该函数或表达式的值被预先计算出来并存储在索引中。

SQL> create table t_goods(id int,name varchar(20),jine int,chengben int); 操作已执行 已用时间: 56.905(毫秒). 执行号:4845. SQL> create index idx_lirun on t_goods(jine-chengben); 操作已执行 已用时间: 86.268(毫秒). 执行号:4846.
创建位图索引

位图索引主要针对含有大量相同值的列而创建。

SQL> create bitmap index bitmap_idx_goods_name on t_goods(name); 操作已执行 已用时间: 126.270(毫秒). 执行号:4847.
创建位图连接索引

隐式创建索引

隐式创建方式只支持创建唯一索引。

例 创建PRIMARY KEY约束时,系统会隐式地自动在表T1的C1列上创建一个唯一索引 。

SQL> drop table t1; 操作已执行 已用时间: 194.805(毫秒). 执行号:4848. SQL> create table t1(c1 int,c2 int,c3 int); 操作已执行 已用时间: 39.836(毫秒). 执行号:4849. SQL> alter table t1 add constraint PK_t1_c1 primary key(c1); 操作已执行 已用时间: 42.900(毫秒). 执行号:4850. SQL> SELECT INDEX_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME='PK_T1_C1'; 行号 INDEX_NAME ---------- ------------- 1 INDEX33555547 已用时间: 118.828(毫秒). 执行号:4854. SQL> SELECT UNIQUENESS FROM ALL_INDEXES WHERE INDEX_NAME='INDEX33555547'; 行号 UNIQUENESS ---------- ---------- 1 UNIQUE

如何在SQL语句中使用索引

如果SQL语句想使用某一个索引,则SQL语句的查询项和WHERE子句的过滤项中必须包含该索引的全部索引键。

当同时包含了多个索引的索引键时,系统会选择一个最优的索引 进行查询。

重建索引

用重建索引来对索引的数据进行重组,使数据更加紧凑,并释放不需要的空间,从而提高访问效率和空间效率。

create table t_rebuild(id int,name varchar(20)); create index idx_rebuild_id on t_rebuild(id); SELECT ID FROM SYS.SYSOBJECTS WHERE NAME='IDX_REBUILD_ID'; SQL> SELECT ID FROM SYS.SYSOBJECTS WHERE NAME='IDX_REBUILD_ID'; 行号 ID ---------- ----------- 1 33555551 SP_REBUILD_INDEX('SYSDBA',33555551)

SCHNAME为索引所在的模式名,INDEXID为索引ID。

删除索引

DROP INDEX emp_ename;

不能直接删除与已启用的UNIQUE KEY键或PRIMARY KEY 键约束相关的索引。要删除一个与约束相关的索引,必须停用或删除该约束本身。

ALTER TABLE emp DROP CONSTRAINT pk_emp_name;

删除聚集索引,只要其聚集索引是通过 CREATE CLUSTER INDEX 明确建立的。

DROP INDEX clu_emp_name;

查看索引信息

创建索引后,可以通过INDEXDEF系统函数查看索引的定义。

INDEXDEF(INDEXID int, PREFLAG int);
SQL> select INDEXDEF(33555551, 1); 行号 INDEXDEF(33555551,1) ---------- ----------------------------------------------------------------------------------------------- 1 CREATE OR REPLACE INDEX "SYSDBA"."IDX_REBUILD_ID" ON "SYSDBA"."T_REBUILD"("ID" ASC) STORAGE(ON "MAIN", CLUSTERBTR) ; 已用时间: 6.980(毫秒). 执行号:4874.

管理视图

视图是从一个或几个基表(或视图)导出的表,但它是一个虚表,即数据字典中只存放视图的定义(由视图名和查询语句组成),而不存放对应的数据,这些数据仍存放在原来的基表中。

CREATE VIEW normal_view AS SELECT name FROM person; CREATE VIEW special_view AS SELECT name, sex, email, phone FROM person;

管理序列

通过使用序列,多个用户可以产生和使用一组不重复的有序整数值。比如可以用序列来自动地生成主关键字值。

序列可以是循环的,当序列的值达到最大值/最小值时,序列将从最小值/最大值计数。

管理同义词

同义词相当于模式对象的别名,起着连接数据库模式对象和应用程序的作用。假如模式对象需要更换或者修改,则不用修改应用程序而直接修改同义词就可以了。

查看视图、序列和同义词信息

视图、序列以及同义词的定义信息可以通过查看系统表SYSOBJECTS和SYSTEXTS得到.

查看普通视图的信息,可以参考执行:

SQL> SELECT b.* FROM SYS.SYSOBJECTS a, SYS.SYSTEXTS b WHERE a.ID = b.ID and a.NAME LIKE 'V_REBUILD%'; 行号 ID SEQNO ---------- ----------- ----------- TXT ----------------------------------------------------------------------------------------- 1 16778463 0 CREATE OR REPLACE VIEW V_REBUILD AS SELECT T_REBUILD.ID,T_REBUILD.NAME FROM T_REBUILD; 2 16778463 1 SELECT T_REBUILD.ID,T_REBUILD.NAME FROM T_REBUILD

视图的定义信息也可以通过SP_VIEWDEF系统过程来查看

SQL> CALL SP_VIEWDEF('SYSDBA', 'V_REBUILD'); 行号 COLUMN_VALUE ---------- ----------------------------------------------------------------------------------------- 1 CREATE OR REPLACE VIEW V_REBUILD AS SELECT T_REBUILD.ID,T_REBUILD.NAME FROM T_REBUILD; 已用时间: 43.672(毫秒). 执行号:4877.

模式对象的常规管理

在DM中,一个用户可以创建多个模式,一个模式中的对象 (表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的数据库中有权限访问的任意模式中的对象。

#创建模式 create schema JC; #并在模式里建表 create table JC.test(id int,name varchar(20));

查看约束信息

用户可以在系统表 SYSOBJECTS 和 SYSCONS 中查询约束的信息。

SELECT * FROM SYSOBJECTS WHERE NAME='T_CON_PK';

查找所有约束的信息:

select * FROM SYSOBJECTS WHERE SUBTYPE$='CONS';

社区地址:https://eco.dameng.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 21:39:05

【爱马仕】Hermes Agent 桌面自动化工具安装指南,规避环境报错可视化实操步骤(含安装包)

Windows 部署 Hermes 步骤简化方案&#xff0c;整合资源包五分钟完成本地运行 前言 不少使用者想要体验 Hermes Agent 智能工具&#xff0c;但在部署环节很容易卡在环境配置环节。 手动安装各类依赖组件、调试运行环境、处理目录路径异常&#xff0c;还会出现命令行报错、系统…

作者头像 李华
网站建设 2026/7/10 21:38:15

2026.7.9

这几天&#xff0c;生活的堕落程度远超过去。究其原因&#xff0c;感冒几天放松了对自己的严格要求&#xff0c;后面随着惯性就移植这么堕落下来。堕落的首要伤害是自己的身体&#xff0c;从现在开始每半小时进行一次交付。

作者头像 李华
网站建设 2026/7/10 21:35:08

AI Agent 沙箱技术横评:CubeSandbox、E2B 与 OpenSandbox 到底怎么选

一、引言 大语言模型在代码生成上的跃迁&#xff0c;正在把 AI Agent 从“概念验证”推向“生产级执行体”。 然而&#xff0c;越往工程深处走&#xff0c;越会发现&#xff0c;AI Agent 赛道上真正卡脖子的&#xff0c;早已不是“模型能不能写出可运行代码”&#xff0c;而是…

作者头像 李华
网站建设 2026/7/10 21:31:18

D2DX:三招解决暗黑破坏神2在现代PC上的三大世纪难题

D2DX&#xff1a;三招解决暗黑破坏神2在现代PC上的三大世纪难题 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 如果你还在忍…

作者头像 李华
网站建设 2026/7/10 21:30:41

域名备案了,访问还是被拦截

我们公司的服务器是阿里云的&#xff0c;上面部署了nginx来访问前端界面。 我们的域名也是从阿里云买的&#xff0c;但是在别的平台做的备案。 当我通过nginx来访问前端界面时&#xff0c;发现阿里云给拦截了&#xff0c;让我备案&#xff0c;可是我的域名已经备案了呀。回答&a…

作者头像 李华