DM_SQl(一)

DM_SQl

注:由于DM_SQL相关知识比较丰富,本文暂时只介绍DM_SQL其中的一部分内容。

1.DM_SQL语言概述

结构化查询语言(Structured Query Language,简称SQL)是一种介于关系代数与关系演算之间的语言,是一种用来与关系数据库管理系统通信的标准计算机语言。其功能包括数据查询(SELECT)、操纵(DCL)、数定义(DDL)和控制(DML)4个方面,是一个通用的、功能极强的关系数据库语言。SQL语言具有两大特点:入门易,精通难。

DM 数据库管理系统 SQL-92 入门级符合率达到 100%,过渡级符合率达到 95%,并且部分支持 SQL-99、SQL:2003、SQL:2008 和 SQL:2011的特性。同时 DM 还兼容 Oracle 11g 和 SQL Server 2008 的部分语言特性。

DM_SQL 语言支持关系数据库的三级模式,外模式对应于视图和部分基表,模式对应于基表,基表是独立存在的表。一个或若干个基表存放于一个存贮文件中,存贮文件中的逻辑结构组成了关系数据库的内模式。DM_SQL 语言本身不提供对内模式的操纵语句。

SQL 语言对关系数据库三级模式的支持如下图所示:

 

1.1DM_SQL语言的功能及作用:

DM_SQL 语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询、操纵和控制四个方面,通过各种不同的 SQL 语句来实现。按照所实现的功能,DM_SQL语句分为以下几种:

1.用户、模式、基表、视图、索引、序列、全文索引、存储过程、触发器等数据库对象的定义和删除语句,数据库、用户、基表、视图、索引、全文索引等数据库对象的修改语句;

2.查询(含全文检索)、插入、删除、修改语句;

3.数据库安全语句。包括创建角色语句、删除角色语句,授权语句、回收权限语句,修改登录口令语句,审计设置语句、取消审计设置语句等。

在嵌入方式中,为了协调 DM_SQL 语言与主语言不同的数据处理方式,DM_SQL 语言引入了游标的概念。因此在嵌入方式下,除了数据查询语句(一次查询一条记录)外,还有几种与游标有关的语句:

1.游标的定义、打开、关闭、拨动语句;

2.游标定位方式的数据修改与删除语句。

为了有效维护数据库的完整性和一致性,支持 DBMS 的并发控制机制,DM_SQL 语言提供了事务的回滚(ROLLBACK)与提交(COMMIT)语句。同时 DM 允许选择实施事务级读一致性,它保证同一事务内的可重复读,为此 DM 提供用户多种手动上锁语句,和设置事务隔离级别语句。

1.2保留字与标识符

标识符的语法规则兼容标准 GJB 1382A-9X,标识符分为正规标识符和定界标识符两大类。

正规(normal,翻译成普通更好)标识符以字母、_、$、#或汉字开头,后面可以跟随字母、数字、_、$、#或者汉字,正规标识符的最大长度是 128 个英文字符或 64 个汉字。正规标识符不能是保留字。

定界标识符(delimited identifier),又称为分隔标识符

定界标识符的标识符体用双引号括起来时,标识符体可以包含任意字符,特别地,其中使用连续两个双引号转义为一个双引号。分隔标识符可以与SQL保留字相同。分隔标识符通常用于避免与SQL保留字的命名冲突。

DM数据库的保留字太多,这里不作介绍,用户可以在安装目录下的doc文件夹里的DM8_SQL使用手册中附录一部分查看。

注意:关键字 rowid、trxid、versions_starttime、versions_endtime、versions_starttrxid、versions_endtrxid 和 versions_operation 不能作为表的列名,即使加上双引号也不行。

1.3DM_SQL执行工具及事务提交。

在bin下的disql工具中执行DM_SQL

disql中sql语句必须用分号;结尾,执行语句块、创建触发器、存储过程、函数、包、模式等时需要使用 / 结尾。disql中默认手动提交,(例外:alter user 、alter tablespace、refresh materialized view 总是自动提交)。在手动提交模式下,遇到 DDL 语句时,DM 数据库会自动提交前面的事务(DDL:CREATE、ALTER、TRUNCATE、DROP、GRANT、REVOKE、审计设置语句)。

使用命令set auto[commit] on/off;打开或关闭自动提交

在其他工具中执行DM_SQL

除了命令行交互式工具 DISQL 外,DM 数据库缺省都采用自动提交模式。用户通过 DM数据库的其他管理工具、编程接口访问 DM 数据库时,如果不手动/编程设置提交模式,所有的 SQL 语句都会在执行结束后提交,或者在执行失败时回滚,此时每个事务都只有一条SQL 语句。比如管理工具中,可在窗口→选项→查询分析器中关闭,如下图:

2.数据定义语句(DDL)

注:本章介绍的也只是DM_SQL中DDL的部分内容。如果没有特别说明,DM中文件大小的单位都是M。

2.1数据库修改语句

仅供有DBA权限的用户修改数据库。

一个数据库创建成功后,可以增加和重命名日志文件,修改日志文件大小;可以修改数据库的状态和模式;还可以进行归档配置。

语法格式:

alter database <修改数据库语句> ;

修改数据库语句:

RESIZE LOGFILE <文件路径> TO <文件大小>| #日志文件的绝对路径,只能增加大小

ADD LOGFILE <文件说明项>{,<文件说明项>}|

ADD NODE LOGFILE <文件说明项>,<文件说明项>{,<文件说明项>} | #DMDSC集群扩展节点时使用

RENAME LOGFILE <文件路径>{,<文件路径>} TO <文件路径>{,<文件路径>} | #重命名

MOVE DATAFILE <文件路径> TO <文件路径> [KEEP] [REUSE] | #移动数据文件

MOUNT | SUSPEND | OPEN [FORCE] | #三种状态 suspend:挂起,

NORMAL | PRIMARY| STANDBY | #三种模式

ARCHIVELOG | NOARCHIVELOG | #是否开启归档

<ADD|MODIFY|DELETE> ARCHIVELOG <归档配置语句> |

ARCHIVELOG CURRENT #把新生成的,还未归档的联机日志都进行归档;

<文件说明项> ::= <文件路径> SIZE <文件大小>

<归档配置语句>::= 'DEST = <归档目标>,TYPE = <归档类型>'

<归档类型>::=

LOCAL [<文件和空间设置>] | #本地归档

REALTIME| #远程实时归档

ASYNC ,TIMER_NAME = <定时器名称> | #远程异步归档

REMOTE ,INCOMING_PATH = <远程归档路径>[<文件和空间设置>] | #远程归档

TIMELY #主备即时归档

<归档目标> 指归档日志所在位置,若本地归档,则本地归档目录;若远程归档,则为远程服务实例名;删除操作,只需指定归档目标;

<文件和空间设置>::=[,FILE_SIZE = <文件大小>][,SPACE_LIMIT = <空间大小限制>]

空间大小限制范围:1024~4294967294 0表示无限制,仅本地归档有效。

归档模式下,不允许删除本地归档;只有 MOUNT 状态 NORMAL 模式下才能启用或关闭归档,添加、修改、删除归档,重命名日志文件;

归档的配置也可以通过 dm.ini 参数 ARCH_INI 和归档配置文件 dmarch.ini 进行,可参看《DM8 系统管理员手册》,SQL 语句提供了在 DM 服务器运行时对归档配置进行动态修改的手段,通过 SQL 语句修改成功后会将相关配置写入 dmarch.ini 中。

2.2管理用户

这里只简单举例,详细语法见DM_SQL使用手册。

创建用户:

create user " <用户名> " identifiend by " <口令> " [PASSWORD_POLICY口令策略]

[ limit <资源设置项>{,<资源设置项>} ] default tablespace "<表空间名>" 

default index tablespace "<索引表空间名>"

经过多次试验,在管理工具中,默认设置情况下:

用户名、口令、表空间名可以带双引号,也可以不带。

其中,表空间名不带双引号的时候,会被管理工具转换为大写;

表空间名带上双引号的时候,会保持原来的大小写。

而用户名不管加不加双引号,都会转换成大写。

口令不管加不加双引号,都会保持原来的大小写。

<口令策略>可以为以下值,或其任何组合:

0 无策略 (但总长度不得超过 48 个字节) ;

1 禁止与用户名相同;

2 口令长度不小于 9;(默认)

4 至少包含一个大写字母(A-Z);

8 至少包含一个数字(0-9);

16 至少包含一个标点符号(英文输入法状态下,除― 和空格外的所有符号)。

若为其他数字,则表示以上设置值的和,如 6=4+2,表示同时启用 2 和4 策略。另外,若不指定该项,则默认采用系统配置文件中 PWD_POLICY 所设值。

注意:DM8版本的dm.ini中,没有了PWD_POLICY这个参数。可以调用如下系统过程设置:

call SP_SET_PARA_VALUE(1,PWD_POLICY,14)

SP_SET_PARA_VALUE ( #设置 dm.ini 文件中非浮点和非字符串类型的参数值

scope int,

ini_param_name varchar(256),

value bigint

)

scope:

1 表示 dm.ini 文件和内存参数都修改,不需要重启服务器;

2 表示只修改 dm.ini 文件,服务器重启后生效。

<资源设置项> ::= ( 最小值都是1,缺省值都是无限制(连续注册失败次数缺省值为3),)

SESSION_PER_USER <参数设置>| #一个用户可以同时拥有的会话数量,最大32768

CONNECT_IDLE_TIME <参数设置>| #一个会话访问数据库的时间上限,min,最大1440

CONNECT_TIME <参数设置>| #会话最大空闲时间,min,最大1440(一天)

CPU_PER_CALL <参数设置>| #用户的一个请求能够使用的 CPU 时间上限,s,86400

CPU_PER_SESSION <参数设置>| #一个会话允许使用的CPU时间上限,s,3153600

MEM_SPACE <参数设置>| #会话占有的私有内存空间上限,M,2147483647

READ_PER_CALL <参数设置>| # 每个请求能够读取的数据页数,2147483646

READ_PER_SESSION <参数设置>|#会话能够读取的总数据页数上限,2147483646

FAILED_LOGIN_ATTEMPS <参数设置>| #将引起一个账户被锁定的连续注册失败的次数,最大100

PASSWORD_LIFE_TIME <参数设置>| #一个口令在其终止前可以使用的天数,365

PASSWORD_REUSE_TIME <参数设置>|#一个口令在可以重新使用前必须经过的天数,365

PASSWORD_REUSE_MAX <参数设置>| #一个口令在可以重新使用前必须改变的次数,32768

PASSWORD_LOCK_TIME <参数设置>| #连续注册失败后,一个账户将被锁定的时间,min,1440

PASSWORD_GRACE_TIME <参数设置> #口令过期宽限时间,过期口令超过该期限后,禁止执行除修改口令以外的其他操作,day,30

<参数设置> ::=<参数值>| UNLIMITED

修改用户:

ALTER USER <用户名> [IDENTIFIED <身份验证模式>] [PASSWORD_POLICY <口令策略>] [<锁定子句>] [<TABLESPACE子句>] [<INDEX_TABLESPACE 子句>] [<SCHEMA 子句>] [<资源限制子句>]

<锁定子句> ::= ACCOUNT LOCK | ACCOUNT UNLOCK

删除用户:

DROP USER [IF EXISTS] <用户名> [RESTRICT(默认) | CASCADE];

执行此语句将导致 DM 删除数据库中该用户建立的所有对象,且不可恢复。

若指定 IF EXISTS 关键字,删除不存在的用户,不会报错;

如果使用了 cascade (级联)选项,除数据库中该用户及其创建的所有对象被删除外,DM 还将自动删除相应的引用完整性约束及视图依赖关系;

否则使用默认的restrict(限制)选项,表示该表的删除是有限制条件的。如果该用户建立了数据库对象 (如表、视图、过程或函数),或其他用户对象引用了该用户的对象,或在该用户的表上存在其它用户建立的视图,DM 将返回错误信息,而不删除此用户。

2.3管理表空间

创建表空间:

KEEP必须加双引号,NORMAL和表空间名字可以不加双引号也可以加上双引号,不可以加单引号,路径必须加上单引号。为了方便记忆,表空间名、缓存池名都加上双引号。路径加上单引号即可。

create tablespace <表空间名> DATAFILE <文件说明项>{,<文件说明项>}

[ CACHE = < NORMAL(默认) | "KEEP" > ] [<存储加密子句>] [<指定 DFS 副本子句>] ;

<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小> [<自动扩展子句>]

<自动扩展子句> ::= AUTOEXTEND <ON [ NEXT <扩展大小> ] [MAXSIZE <最大大小> |OFF>

<存储加密子句> ::= ENCRYPT WITH <加密算法> [ [BY] <加密密码>]

<指定 DFS 副本子句> ::= [ COPY <副本数> ] [ GREAT (宏区)| MICRO (微区)]

<文件路径> 指明新生成的数据文件在操作系统下的路径+新数据文件名。数据文件的存放路径符合 DM 安装路径的规则,且该路径必须是已经存在的;

<文件大小> 整数值,指明新增数据文件的大小(单位 MB),取值范围 4096*页大小~2147483647*页大小;

NORMAL 缓冲区主要是提供给系统处理的一些数据页;KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为KEEP。

举例:

create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST_01.DBF' size 32 autoextend on next 1 maxsize 20480, '/dm8/data/DAMENG/TEST_02.DBF' size 32 autoextend on next 1 maxsize 20480 CACHE = NORMAL;

修改表空间:

根据本文1.3介绍,可知alter tablespace 语句总是自动提交,且会自动提交前面的事务。

ALTER TABLESPACE <表空间名>

<

ONLINE | OFFLINE| CORRUPT

| RENAME TO <表空间名>

|RENAME DATAFILE <文件路径>{,<文件路径>} TO <文件路径>{,<文件路径>}

|ADD DATAFILE <文件说明项>{,<文件说明项>}

|RESIZE DATAFILE <文件路径> TO <文件大小>

|DATAFILE <文件路径>{,<文件路径>}[<自动扩展子句>]

|CACHE = < NORMAL(默认) | "KEEP" > 

>;

<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小> [<自动扩展子句>]

<自动扩展子句> ::= AUTOEXTEND <ON [ NEXT <扩展大小> ] [MAXSIZE <最大大小> |OFF>

修改表空间数据文件大小(RESIZE DATAFILE)时,和修改日志文件大小一样,只能增加。

表空间如果发生损坏(表空间还原失败,或者数据文件丢失或损坏)的情况下,允许将表空间切换为 CORRUPT 状态,并删除损坏的表空间,如果表空间上定义有对象,需要先将所有对象删除,再删除表空间。

SYSTEM 表空间不允许关闭自动扩展,且不允许限制空间大小;

如果表空间有未提交事务时,表空间不能修改为 OFFLINE 状态;

重命名表空间数据文件时,表空间必须处于 OFFLINE 状态,修改成功后再将表空间修改为 ONLINE 状态;

举例:

重命名表空间 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;

删除表空间:

DROP TABLESPACE [IF EXISTS] <表空间名>;

若指定 IF EXISTS 关键字,删除不存在的表空间不会报错

SYSTEM、RLOG、ROLL 和 TEMP 表空间不允许删除;

系统只有处于 OPEN 状态下才允许删除表空间。只能删除未使用过的表空间(也许是表空间没有对象时,认为其未使用)。

如何知道表空间上定义了哪些对象呢?

表空间失效文件恢复

linux系统中表空间文件可能失效的问题及解决办法:

LINUX 操作系统中,被进程打开的文件仍可以在 OS 系统中被删除,因此存在 DM 数据文件可能被误删的风险。如果数据文件被删除,DM 系统能够及时检测出来,并立刻停止对其继续使用并通知用户。

在 dm.ini 中参数 FIL_CHECK_INTERVAL 的值指定 DM 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。也可以通过系统过程SP_FILE_SYS_CHECK()来手动的进行检查。

系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

如下三个系统过程只在 LINUX 操作系统下有效:

表空间失效文件检查:

SP_FILE_SYS_CHECK ();

表空间失效文件恢复准备:

SP_TABLESPACE_PREPARE_RECOVER(<表空间名>);

表空间失效文件恢复:

SP_TABLESPACE_RECOVER(<表空间名>);

表空格失效文件的恢复过程如下:

LINUX 系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd 中找到其对应的文件副本。其中<pid>指打开该文件的进程 id。利用该方法,结合 OS 命令,DM 提供失效文件的恢复方案如下:

1、 调用系统过程 SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;

2、 如果使用过程中 DM 报错表空间数据文件被删除,通过操作系统的 ps 命令找到当前dmserver 的 PID:ps –ef|grep dmserver;

3、 使用操作系统 ls 命令查看被删除文件对应的副本:ls /proc/<PID>/fd -l,会发现被删除的文件后有(deleted)字样;

4、 使用操作系统的 cp 命令将文件复制到原位置:cp bak_fildata_file_path_dir;

5、 复制成功后,调用系统过程 SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。

注意,要保证数据文件正确修复,需要保证在 SP_TABLESPACE_PREPARE_RECOVER

后进行数据文件的复制。

管理HTS表空间

创建HTS表空间

CREATE HUGE TABLESPACE <表空间名> PATH <表空间路径> [<指定 DFS 副本子句>];

CREATE HUGE TABLESPACE HTS_NAME PATH 'e:\HTSSPACE';

表空间名在服务器中必须唯一;

HTS 表空间不支持创建 MIRROR 镜像文件。

修改HTS表空间

ALTER HUGE TABLESPACE <表空间名> ADD PATH <路径>;

为表空间 HTS_NAME 添加路径,也就是说不能修改路径。

一个 HTS 表空间最多支持 255 个路径。

删除HTS表空间

DROP HUGE TABLESPACE [IF EXISTS] <表空间名>

该表空间必须未被使用才能被删除;

2.4管理表

表名字带双引号的时候会保持原来的大小写,不带的时候会转换成大写。

这里只做简单举例,完整语法见DM_SQL手册。

创建数据库基表

供 DBA 具有 CREATE_TABLE 权限的用户定义基表。

CREATE [[GLOBAL] TEMPORARY] TABLE [<模式名>.] <表名>

(<列名> <数据类型>{,<列名> <数据类型>}) [ <列定义子句>]

[ ,表级完整性约束 ] [<STORAGE 子句>] ;

<列定义子句> ::=

DEFAULT <列缺省值表达式> |

<IDENTITY 子句> |

<列级约束定义> |

DEFAULT <列缺省值表达式> <列级约束定义> |

<IDENTITY 子句> <列级约束定义> |

<列级约束定义> DEFAULT <列缺省值表达式> |

<列级约束定义> <IDENTITY 子句>

<IDENTITY 子句> ::= IDENTITY [(<种子>,<增量>)]

<列级约束定义> ::= <列级完整性约束>{,<列级完整性约束>}

<列级完整性约束>::=

NULL 指明指定列可以包含空值,为缺省选项。

NOT NULL 非空约束,指明指定列不可以包含空值;

UNIQUE 唯一性约束,指明指定列作为唯一关键字;

PRIMARY KEY 主键约束,指明指定列作为基表的主关键字;

CHECK 检查约束,指明指定列必须满足的条件。

NOT VISIBLE 列不可见,当指定某列不可见时,使用 SELECT *进行查询时将不添加该列作为选择列。使用 INSERT 无显式指定列列表进行插入时,值列表不能包含隐藏列的值。

<表级完整性约束>中的参数:

UNIQUE 唯一性约束,指明指定列或列的组合作为唯一关键字;

PRIMARY KEY 主键约束,指明指定列或列的组合作为基表的主关键字。指明 CLUSTER,表明是主关键字上聚集索引;指明 NOT CLUSTER,表明是主关键字上非聚集索引;

USING INDEX TABLESPACE <表空间名> 指定索引存储的表空间;

FOREIGN KEY 指明表级的引用约束,如果使用 WITH INDEX 选项,则为引用约束建立索引,否则不建立索引,通过其他内部机制保证约束正确性;

CHECK 检查约束,指明基表中的每一行必须满足的条件;

与列级约束之间不应该存在冲突。

<STORAGE 项> ::=(对于普通表和普通索引)

[INITIAL <初始簇数目>] |

[NEXT <下次分配簇数目>] |

[MINEXTENTS <最小保留簇数目>] |

[ON <表空间名>] |

[FILLFACTOR <填充比例>]

删除数据库基表

供具有 DBA 权限的用户该表的拥有者删除基表。

DROP TABLE [IF EXISTS] [<模式名>.]<表名> [RESTRICT|CASCADE];

该表删除后,在该表上所建索引也同时被删除;

该表删除后,所有用户在该表上的权限也自动取消,以后系统中再建同名基表是与该表毫无关系的表;

删除外部基表无需指定RESTRICT和CASCADE关键字。

删除基表数据

供具有 DBA 权限的用户该表的拥有者从表中删除所有记录

TRUNCATE TABLE [<模式名>.]<表名>[PARTITION <分区名>|(<分区名>)];

TRUNCATE命令一次性删除指定表的所有记录,比用DELETE命令删除记录快。但TRUNCATE不会触发表上的DELETE触发器;

如果TRUNCATE删除的表上有被引用关系,则此语句失败;

TRUNCATE不同于DROP命令,因为它保留了表结构及其上的约束和索引信息;

TRUNCATE 命令只能用来删除表的所有的记录,而DELETE命令可以只删除表的部分记录.

TRUNCATE 表会将该表所有失效索引置为生效;

2.5管理索引

创建索引

供 DBA 或该索引所属基表的拥有者具有 CREATE INDEX 权限的用户定义索引。

CREATE [OR REPLACE]

[ CLUSTER (聚簇) | NOT PARTIAL (非聚簇) ]

[UNIQUE (唯一) | BITMAP(位图) | SPATIAL(空间) ] INDEX <索引名>

ON [<模式名>.]<表名>( <索引列定义>{,<索引列定义>} ) [GLOBAL] [<STORAGE 子句>[NOSORT(无需排序) ] [ ONLINE(支持异步) ];

<索引列定义>::= <索引列表达式>[ASC|DESC]

<STORAGE 子句>::=<STORAGE 子句 1>|<STORAGE 子句 2>

<STORAGE 子句 1>::= STORAGE(<STORAGE1 项> {,<STORAGE1 项>})

<STORAGE1 项> ::=

[INITIAL <初始簇数目>] |

[NEXT <下次分配簇数目>] |

[MINEXTENTS <最小保留簇数目>] |

[ON <表空间名>] |

[FILLFACTOR <填充比例>] |

[BRANCH <BRANCH 数>] |

[BRANCH (<BRANCH 数>, <NOBRANCH 数>)] |

[NOBRANCH ] |

[<CLUSTERBTR>] |

[SECTION (<区数>)] |

[STAT NONE]

HUGE表的索引:

<STORAGE 子句 2>::= STORAGE(<STORAGE2 项> {,<STORAGE2 项>})

<STORAGE2 项> ::= [ON <表空间名>]|[STAT NONE]

修改索引:

供具有 DBA 角色的用户或该索引所属基表的拥有者具有 ALTER ANY INDEX 的用户修改索引;

ALTER INDEX [<模式名>.]<索引名> <修改索引定义子句>;

<修改索引定义子句> ::=

RENAME TO [<模式名>.]<索引名>|

<INVISIBLE | VISIBLE>

<UNUSABLE>|<REBUILD>[NOSORT][ONLINE]|

<MONITORING | NOMONITORING> USAGE

当指定 UNUSABLE 时,索引将被置为无效状态,系统将不再维护此索引,若此索引被用于保证数据唯一性时,则此时不能够对表更新数据,可以在 SYSOBJECTS VALID 字段查看该值。处于无效状态的索引,可以利用 REBUILD 来重建,或者先删除该索引再新建该索引。TRUNCATE 表会将该表所有失效索引置为生效;

删除索引:

供具有 DBA 角色的用户该索引所属基表的拥有者删除索引。

DROP INDEX [IF EXISTS] [<模式名>.]<索引名>;

2.6管理视图

创建视图

供 DBA 或该视图的拥有者具有 CREATE VIEW 权限的用户定义视图。

CREATE [OR REPLACE] VIEW [<模式名>.]<视图名>( <列名> {,<列名>} )

AS <查询说明>

[WITH [ LOCAL | CASCADED ] CHECK OPTION ] | [ WITH READ ONLY ] ;

<查询说明>::=<表查询> | <表连接>

<表查询>::=<子查询表达式>[ORDER BY 子句]

<视图名>后所带<列名>不得同名,个数必须与<查询说明>中 SELECT 后的<值表达式>的个数相等。<视图名>后的<列名>必须全部省略或全部写明。由于有些情况不能省略该列名,为了方便记忆,建议全部写明。

WITH CHECK OPTION:

插入行或更新行的数据必须满足视图定义中<查询说明>所指定的条件。

指定 LOCAL,要求数据必须满足当前视图定义中<查询说明>所指定的条件;

指定CASCADED(级联),数据必须满足当前视图,以及所有相关视图定义中<查询说明>所指定的条件。

MPP 系统下不支持该 WITH CHECK OPTION 操作。

视图一旦定义成功,对基表的所有查询操作都可用于视图。对于用户来说,视图和基表在进行查询操作时没有区别。

对视图数据的更新语句与对基表数据的更新语句在格式与功能方面是一致的。

编译视图

使用者必须拥有 DBA 权限是该视图的拥有者。

一个视图依赖于其基表或视图,如果基表定义发生改变,如增删一列,或者视图的相关权限发生改变,可能导致视图无法使用。此时,可对视图重新编译,检查视图的合法性。

ALTER VIEW [<模式名>.]<视图名> COMPILE;

删除视图

使用者必须拥有 DBA 权限是该视图的拥有者。

DROP VIEW [IF EXISTS][<模式名>.]<视图名> [RESTRICT | CASCADE];

dm.ini 中的参数 DROP_CASCADE_VIEW 值为 1的时候,删除语句中[restrict|cascade]的设置才能发挥作用。

级联删除视图的前提是用户具有删除参考视图的权限

更多相关资料参考达梦云适配中心:首页 | 达梦云适配中心 (dameng.com)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值