达梦管理员手册及客户端学习

一 达梦系统管理员手册学习

1. 达梦数据库逻辑结构

达梦数据库逻辑结构主要由以下方面构成:

数据库à表空间à数据文件à段à簇à页

数据库由一个或多个表空间组成;

每个表空间由一个或多个数据文件组成;

每个数据文件由一个或多个簇组成;

段是簇的上级逻辑单元,一个段可以跨多个数据文件;

簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;

页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元。

1) 表空间

表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

如图,数据库创建时会生成五种表空间,对应上图五个文件/目录

SYSTEM表空间:

系统表空间。存放达梦数据库的字典信息。用户无法在此处创建表和索引

ROLL表空间:

用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。用户无需干预

MAIN表空间:

默认表空间。如用户新建用户时未指定表空间,则会默认关联MIAN表空间

TEMP表空间:

临时表空间。当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从 TEMP 表空间分配临时段

HMAIN表空间:

属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。

2) 页

又称数据页或者数据块,为数据库的最小逻辑单位及逻辑存储单元。大小由数据库创建时指定,且不可更改。

页的主要内容包括页头控制信息,数据,空闲空间及行偏移数组

页头控制信息主要记录页类型与页地址等信息

行偏移数据用于标识页上的空间占用情况以便管理数据页自身的空间。

3) 簇

簇是数据页的上级逻辑单元,由同一个数据文件中16个或32个或64个连续的数据页组成。簇的大小同页一样,由数据库创建时指定,不可更改

4) 段

段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件。

A. 数据段

段可以被定义成特定对象的数据结构,如表数据段或索引数据段。表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储。

当用户使用create语句创建表/索引时,数据库会创建相应的数据段。

B. 临时段

在数据库中,所有的临时段都创建在临时表空间中,这样可以分流磁盘设备的I/O,也可以减少由于在SYSTEM或其他表空间内频繁创建临时数据段而造成的碎片。

临时段的分配和释放完全由系统自动控制,用户不能手工进行干预。

C. 回滚段

数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息。对于未提交事务,当执行回滚语句时,回滚记录被用来做回滚变更。在数据库恢复阶段,回滚记录被用来做任何未提交变更的回滚。在多个并发事务运行期间,回滚段还为用户提供读一致性,所有正在读取受影响行的用户将不会看到行中的任何变动,直到他们事务提交后发出新的查询。

2. 达梦数据库物理结构

1) 配置文件dm.ini

每创建一个达梦数据库,就会自动生成dm.ini文件。dm.ini是达梦数据库启动所必须的配置文件,通过配置该文件可以设置达梦数据库服务器的各种功能和性能选项,主要的配置模块包括:控制文件相关、实例名、内存相关、线程相关等。主要常见参数见下表:

参数名

缺省值

属性

说明

INSTANCE_NAME

DMSERVER

手动

实例名(长度不超过 16 个字节)

PORT_NUM

5236

静态

服务器监听通讯端口号,服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在 1024-65535 之间随机分配

ALTER_MODE_STATUS

1

动态,系统级

是否允许手工修改服务器的模式、状态和OGUID,1:允许;0:不允许。

注:数据守护环境下建议配置为0,实例处于主机或备机模式后,不允许用户直接通过SQL语句修改服务器的模式、状态和OGUID

ENABLE_OFFLINE_TS

1

动态,系统级

是否允许 OFFLINE 表空间,0:不允许;1:允许;2:备库不允许。

注:数据守护环境下建议配置为2

RLOG_SEND_APPLY_MON

64

静态

数据守护中,对于主库,用于指定统计最近 N次主库到每个备库的归档发送时间;对于备库,用于指定统计最近 N 次备库重演日志的时间,N为此参数设置的值。有效值范围(1~1024)

MAL_INI

0

静态

是否启用 MAL 系统,0:不启用;1:启用

ARCH_INI

0

动态,系统级

是否启用归档,0:不启用;1:启用

MPP_INI

0

静态

是否启用 MPP 系统,0:不启用;1:启用

2) dmmal.ini

项目

项目意义

字段

字段意义

MAL_CHECK_INTERVAL

检测线程检测间隔,默认30S,范围(0-1800),如果配置为 0,则表示不进行链路检测

MAL_CONN_FAIL_INTERVAL

检测线程认定链路断开的时间,默认10S,范围(2-1800)

MAL_BUF_SIZE

单个 MAL 缓存大小限制,以兆为单位。当此 MAL 的缓存邮件超过此大小,则会将邮件存储到文件中。有 效 值范围(0~500000),默认为100

MAL_SYS_BUF_SIZE

MAL 系统总内存大小限制,单位:M。有效值范围(0~500000),默认为0,表示 MAL 系统无总内存限制

MAL_COMPRESS_LEVEL

Mal 消息压缩等级,取值范围 0-10。0 代表不进行消息压缩,为默认值1 – 9 表示采用 zip算法,从 1 到 9 表示压缩速度依次递减,压缩率依次递增。10 表示采用 snappy算法,压缩速度高于 zip算法,压缩率相对低

MAL_TEMP_PATH

指定临时文件的目录。当邮件使用的内存超过MAL_BUF_SIZE或者MAL_SYS_BUF_SIZE时,将新产生的邮件保存到临时文件中。如果缺省,则新产生的邮件保存到TEMP.DBF文件中

[MAL_INST1]

实例配置

MAL_INST_NAME

实例名。MAL 系统中的各数据库实例不允许同名。

MAL_HOST

MAL系统监听 TCP 连接的IP地址

MAL_PORT

MAL 监听端口,用于数据守护、DSC、MPP 等环境中各节点实例之间

MAL 链路配置,监听端端口配置此参数,范围1024~65534,发起连接端的端口在1024~65535 之间随机分配

MAL_INST_PORT

MAL_INST_NAME 实例服务器监听通讯端口号,服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在1024-65535 之间随机分配。此参数的配置应与DM.INI 中的PORT_NUM 保持一致

MAL_INST_HOST

连接数据库服务器使用的 IP 地址。(在 MPP 下以及读写分离的即时归档主备系统下一定要配置)

MAL_DW_PORT

MAL_INST_NAME 实例守护进程的监听端口,其他守护进程或监视器使用 MAL_HOST+MAL_DW_PORT 创建与该实例守护进程的 TCP连接,监听端配置此参数,有效值范围(1024~65534),发起连接端的端口在1024-65535 之间随机分配

MAL_INST_DW_PORT

服务器监听守护进程连接求的端口,服务器配置此参数,有效值范围(1024~65534),发起连接端的端口在 1024-65535 之间随机分配。

MAL_LINK_MAGIC

MAL 链路网段标识,有效值范围(0-65535)。默认 0。设置此参数时,同一网段内的节点都设置相同,不同网段内的节点设置的值必须不同。搭建跨网段的DBLINK 时,如果内外网不通,则必须配置此参数;如果内外网互通,则可以不配

3) dmarch.ini

dmarch.ini 用于本地归档和远程归档。

项目

项目意义

字段

字段意义

全局配置项

ARCH_WAIT_APPLY

备库收到 Redo 日志后,是否需要重演完成后再响应主库。0 表示收到马上响应(高性能模式),1 表示重演完成后响应(事务一致模式)。配置为即时归档的读写分离集群时,默认值为 1;配置为实时归档的读写分离集群时,默认值为 0

ARCH_RESERVE_TIME

归档日志保留时间,单位分钟,取值范围(0~2147483647)。只对远程归档和本地归档有效。服务器每隔 5 分钟检查是否存在超过保留时间的归档并删除。默认为 0,表示不删除归档

ARCH_LOCAL_SHARE

DMDSC 集群本地归档是否共享给远程节点作为远程归档。0 表示不共享,1 表示共享,默认值为 0。此参数值在 DMDSC 集群各个节点的配置文件中需保持一致。配置为 1 时,本地归档路径和远程归档路径均需配置在 ASM 共享磁盘上,并且DMARCH.INI 中 ARCH_INCOMING_PATH为对应节点的本地归档路径;配置为 0 时,REMOTE 归档路径与对应节点LOCAL 归档路径不能指向共享存储的同一个目录

[ARCHIVE_LOCAL1]

本地归档配置

ARCH_TYPE

Redo 日志归档类型,LOCAL/REMOTE/REALTIME/TIMELY/ASYNC、分别表示本地归档/远程归档/实时归档/即时归档/异步归档

ARCH_DEST

归档路径

ARCH_FILE_SIZE

单个归档文件大小,单位MB,取值范围(64~2048),默认为1024MB,即 1G

ARCH_SPACE_LIMIT

本地归档文件空间限制。当同一节点号的本地归档文件达到限制值时,系统自动删除最早生成的本地归档日志文件。0 表示无空间限制,取值范围(1024M~2147483647M),缺省为 0

ARCHIVE_REALTIME

实时归档配置

ARCH_TYPE

归档类型

ARCH_DEST

归档目标实例名

4) dm_svc.conf

dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置

的一些参数。它必须和接口/客户端工具位于同一台机器上才能生效。

配置项

缺省值

概述

服务名

用于连接的服务名,参数值格式为:服务名=(IP[:PORT],IP[:PORT],......)。IP 为数据库所在的 IP 地址,如果是 IPV6 地址,为了区分端口,需要用[]封闭IP地址。PORT为数据库使用的TCP连接端口,可选配置,不配置则使用默认的端口

LOGIN_MODE

4

指定优先登录的服务器模式。0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式;1:只连接主库;2:只连接备库;3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式;4:优先连接NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY模式

SWITCH_TIMES

1

以服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数。有效值范围1~9223372036854775807

SWITCH_INTERVAL

200

在服务器之间切换的时间间隔,单位为毫秒,有效值范围1~9223372036854775807

5) sqllog.ini

sqllog.ini用于sql日志的配置,当且仅当INI参数SVR_LOG=1时使用。

参数名

缺省值

属性

说明

FILE_PATH

..\LOG

动态,系统级

SQL 日志文件所在的文件夹路径

SWITCH_LIMIT

128

动态,系统级

不同切换模式 SWITCH_MODE 下,意义不同:

u 按数量切换时,一个日志文件中的SQL记录条数达到多少条之后系统会自动将日志切换到另一个文件中。一个日志文件中的SQL记录条数达到多少条之后系统会自动将日志切换到另一个文件中。有效值范围(1000~ 10000000)

u 按文件大小切换时,一个日志文件达到该大小后,系统自动将日志切换到另一个文件中,单位为 M。有效值范围(1~ 2000)

u 按时间间隔切换时,每个指定的时间间隔,按文件新建时间进行文件切换,单位为分钟。有效值范围(1~ 30000)

ASYNC_FLUSH

1

动态,系统级

是否打开异步SQL日志功能。0:表示关闭;1:表示打开

FILE_NUM

5

动态,系统级

总共记录多少个日志文件,当日志文件达到这个设定值以后,再生成新的文件时,会删除最早的那个日志文件,日志文件的命令格式为 dmsql_实例名_日期_时间.log。

6) 控制文件dm.ctl

控制文件是一个二进制文件,它记录了数据库必要的初始信息,其中主要包含以下内容:

A. 数据库名称;

B. 数据库服务器模式;

C. OGUID唯一标识;

D. 数据库服务器版本;

E. 数据文件版本;

F. 数据库的启动次数;

G. 数据库最近一次启动时间;

H. 表空间信息,包括表空间名,表空间物理文件路径等,记录了所有数据库中使用的表空间,数组的方式保存起来;

I. 控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件合法性,防止文件损坏及手工修改。

7) 数据文件 *.dbf

数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个数据文件对应磁盘上的一个物理文件或者达梦分布式数据库中的一个逻辑文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。

当数据文件空间用完时,它可以自动扩展。可以在创建数据文件时通过MAXSIZE参数限制其扩展量,当然,也可以不限制。但是,数据文件的大小最终会受物理磁盘大小的限制。在实际使用中,一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择。

8) 重做日志文件(redolog)(联机日志)

重做日志(即REDO日志)指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以log为扩展名。每个DM数据库实例必须至少有2个重做日志文件,默认两个日志文件为DAMENG01.log、DAMENG02.log,这两个文件循环使用。重做日志主要用于数据库恢复操作。

9) 归档日志文件

与重做日志对应,记录数据库的增删查改操作。在数据库故障情况下,可用于数据库恢复操作。

重做日志与归档日志区别如下:

对比项目

联机日志

归档日志

安全等级

较低

生成方式

创建数据库时自动生成

用户手动开启归档模式,并指定文件参数及路径

写入模式

非归档模式也可写入

仅开启归档后

文件个数

默认两个

手动配置,理论上可以无限个

写入循坏

默认两个文件交替写入

旧文件写满后,自动生成新文件,最多不超过用户设置

恢复时间

仅可恢复到最早redo记录的时刻

在归档正常的情况下,可随时完全恢复或不完全恢复至任意时间点

10) 逻辑日志文件

如果在数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是一个流式的文件,它有自己的格式,且不在第一章所述的页,簇和段的管理之下。

逻辑日志文件内部存储按照复制记录的格式,一条记录紧接着一条记录,存储着复制源端的各种逻辑操作。用于发送给复制目的端。

11) 物理逻辑日志文件

物理逻辑日志,是按照特定的格式存储的服务器的逻辑操作,专门用于DBMS_LOGMNR包挖掘获取数据库系统的历史执行语句。当开启记录物理逻辑日志的功能时,这部分日志内容会被存储在重做日志文件中。

12) 备份文件

备份文件以.bak为结尾。数据库在执行备份作业时会按照设置参数生成对应的备份文件。可用于后续的数据库故障恢复。

13SQL日志文件

用户在dm.ini中配置SVR_LOG参数后就会打开SQL日志。

SQL日志内容包含系统各会话执行的SQL语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析。

14) 事件日志文件

数据库系统在运行过程中,会在log子目录下产生一个“dm_实例名_日期”命名的事件日志文件。事件日志文件对数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查看并定位问题。

15) 数据重演文件

重演文件用于数据重演,存储了从抓取开始到抓取结束时,数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调优提供了另一种分析手段。

3. 达梦系统管理员

为了保证数据库系统的安全性,数据库采用“三权分立”或“四权分立”的安全机制,“三权分立”时系统内置三种系统管理员,包括数据库管理员、数据库安全员和数据库审计员,“四权分立”时新增了一类用户,称为数据库对象操作员

1) 数据库管理员DBA

数据库管理员DBA负责评估数据库运行所需的软、硬件环境、安装和升级 DM 数据库、配置 DM 数据库参数、创建主要的数据库存储结构(表空间)和对象(如表、视图、索引、角色、用户等)、监控和优化数据库性能、数据导入导出以及数据库的备份和恢复等。

2) 数据库安全员SSO

主要任务为制定安全策略,定义新的数据库安全员,设置系统的安全等级、范围和组,并为主、客体定义安全标记,从而全面提升系统安全性。

3) 数据库审计员AUDITOR

数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录。通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。

4) 数据库对象操作员DBO

可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。

4. 数据库状态与模式

1) 数据库状态

A. 配置状态(MOUNT):不允许访问数据库对象,只能进行控制文件维护、归档配置、数据库模式修改等操作;

B. 打开状态(OPEN):不能进行控制文件维护、归档配置等操作,可以访问数据库对象,对外提供正常的数据库服务;

C. 挂起状态(SUSPEND):与OPEN状态的唯一区别就是,限制磁盘写入功能;一旦修改了数据页,触发 REDO 日志、数据页刷盘,当前用户将被挂起。

2) 数据库模式

A. 普通模式(NORMAL):用户可以正常访问数据库,操作没有限制;

B. 主库模式(PRIMARY):用户可以正常访问数据库,所有对数据库对象的修改强制生成 REDO 日志,在归档有效时,发送 REDO 日志到备库;

C. 备库模式(STANDBY):接收主库发送过来的 REDO 日志并重做。数据对用户只读。

以上几种模式,在进行切换时,必须将数据库置于mount状态

二 达梦数据库客户端基础操作学习

1. 达梦管理工具manager

1) 打开方式

在数据库安装目录/dmdbms/tool/下,找到manager程序,运行即可打开如下界面

输入正确的信息后即可正确的登录数据库

2) 基础信息

在对象库上右键-管理服务区即可看到当前数据库的基础信息

包含系统的基础信息,包括版本,主机名,实例名,归档模式,逻辑结构大小等

3) 基础配置操作

如上图可见,当前数据库处于非归档状态,安全性较低。为保证数据库正常使用,现尝试将数据库归档模式开启。

A. 选择系统管理,将数据库先置于“配置”状态,并点击转换

B. 选择归档配置,将归档模式设置为“归档”,并手动填写归档路径及归档文件名

C. 设置完毕后,将数据库切回“打开模式”

此时在归档路径下可正常查看到归档日志文件

归档日志可用于数据库恢复时的数据追溯

2. 达梦服务查看器dmserver

此工具可以通过图像化窗口来对达梦数据库的主要服务进行启动关闭

主要服务含义及作用如下:

A. DmJobMonitorService达梦数据库作业服务

此服务用于作业的实时监控。需要用户配置连接字符串

作业可在管理工具manager中查看到,主要的作业包括

SQL脚本、备份数据库、重组数据库、更新统计信息和数据迁移

B. DmInstanceMonitorService达梦数据库实例监控服务

此服务用于当前计算机数据库实例服务的实时监控

在安装数据库的第三方设备上配置监控服务,可以实时查看被监控方的数据库实例状态

C. DmAuditMonitorService达梦数据库实时审计服务

此服务用于审计的实时监控。需要用户配置连接字符串和指定dmamon.ini配置文件

D. DmAPService达梦数据库辅助插件服务

此服务为达梦数据库的辅助插件服务,用以辅助数据库的备份和还原功能

E. DmServiceDMSERVER达梦数据库实例服务

此服务为数据库服务。用户可设置启动方式和修改启动模式

在数据库初始化并后台注册后会生成对应实例名的实例服务,可以用于后台启动数据库实例

3. 达梦控制台工具console

“实例配置”用于查看/修改数据库的配置及参数

“归档配置”用于查看/修改数据库归档日志的配置及参数

“备份还原”用于对数据库进行备份与恢复工作

新建数据库备份(需要AP服务处于正常启动状态,并关闭实例服务)

备份完成后,可以在指定路径下看到备份集

4. 达梦审计分析工具analyer

达梦审计分析工具主要用于对达梦数据的用户行为进行记录并分析

开启达梦数据库审计日志步骤

A. 使用命令行或管理工具登录数据库的SYSAUDITOR审计员

执行如下命令:

SP_SET_ENABLE_AUDIT(1);

即可开启数据库审计日志,日志默认存放路径为实例目录下

邮件审计工具的审计日志查看器-审计日志查看-日志

选择已生成的审计日志文件,即可查看数据库近期的操作

5. 达梦数据库配置助手dbca

用于创建\删除数据库实例及服务

6. 达梦性能监视工具monitor

用于进行数据库性能监控,同时可以供修改简单的dm.ini的参数

7) 达梦数据迁移工具DTS

用于从别的类型的数据库上将数据想达梦迁移

支持主流的数据库迁移:Oracle,SQL,PGSQL,人大金仓等:

在被迁移的Oracle数据库中创建表作为标识,供后续验证

在迁移选项右键-新建迁移

下一步

选择类型为Oracle迁移至DM

填写Oracle环境信息,此时需保证客户端和数据库与被迁移数据库之前的网络端口通畅

填写需要迁移到的目的达梦数据库信息

勾选迁移的对象

开始迁移

迁移完成,使用管理工具登录到目的数据库查看

用户及表迁移成功

三 达梦数据库模式对象学习

用户的模式(SCHEMA)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、视图、索引和权限定义的对象。一个用户可以创建多个模式,一个模式中的对象(表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的数据库中有权限访问的任意模式中的对象。

达梦模式对象主要有以下类别:

表、视图、索引、触发器、存储过程/函数、序列、全文索引、包、同义词、类、外部链接;

在引用模式对象的时候,一般要在模式对象名前面加上模式名。具体格式如下:

[模式名].对象名

1. 单个操作创建多个模式对象

使用create schema语句可以创建一个空的模式对象,示例如下:

create schema test

create sequence address_seq increment by 1

create table address(

addressid int,

address1 varchar(60) not null,

address2 varchar(60),

city varchar(30) not null,

postalcode varchar(15) not null)

create table address_type(

address_typeid int primary key,

name varchar(50) not null);

为创建的对象的表插入值

insert into test.address values(1,'北京市海淀区中关村南大街2号数码大厦B座','北京市通州区经济开发区科谷一街信创园B区8号院5号楼9层','北京市',' 100000');

2. 重命名模式对象

重命名的主要方式:

1) 删除原有的模式对象,重新创建

2) 使用alter… rename语句(table)

重命名示例如下:

alter table test.address rename to address1;

重命名后重新连接数据库即可查看到变更

在重命名一个模式对象之前,需要考虑以下影响:

1) 所有基于重命名模式对象的视图和DMSQL语句块都将失效,在使用之前,必须重新编译;

2) 所有基于重命名模式对象的同义词在使用的时候都会报错。

3. 启停触发器

触发器(TRIGGER)定义当某些与数据库有关的事件发生时,数据库应该采取的操作。触发器是在相关的事件发生时由服务器自动地隐式激发的。触发器是激发它们的语句的一个组成部分,即直到一个语句激发的所有触发器执行完成之后该语句才结束,而其中任何一个触发器执行的失败都将导致该语句的失败,触发器所做的任何工作都属于激发该触发器的语句。

触发器状态分为以下两种:

1) 启用(enabled):处于开启状态的触发器在触发条件满足时,执行触发体。缺省

状态下,新创建的触发器都处于开启状态;

2) 禁止(disabled):处于禁止状态的触发器在触发条件满足时,也不会执行触发体。

要设置触发器的状态,可以通过 ALTER TRIGGER 语句来完成。用户必须满足以下条件:

A. 拥有该触发器;

B. 有alter any trigger权限。

启停触发器示例:

启动:alter trigger addr_trig enabled;停止:alter trigger addr_trig disabled;

4. 完整性约束

完整性约束规则,限制表中一个或者多个列的值。约束子句可以出现在create table或者alter table语句中,确定约束条件并指定受到约束的列。

1) 完整性约束状态

用户可以指定一个约束是启用(enable)或禁止(disabled)。如果启用一个约束,那么在插入数据或者是更新数据时会对数据进行检查,不符合约束的数据被阻止进入。如果约束是禁止(disabled)的,不符合约束的数据被允许进入数据库。

A. 禁止约束

要执行完整性约束定义的规则,约束应当设置为开启状态。但是,在下面的情况下,从性能的角度考虑,可以暂时将完整性约束禁用。

1) 导入大量的数据到一张表中;

2) 做批处理操作并对一张表做大规模修改时;

3) 导入导出一张表。

在上面三种情形下,暂时禁用完整性约束能提高系统的性能,特别是在数据仓库的情况下。在禁用约束的情况下,可以将违反约束规则的数据插入到表中,因此,用户应当在上面列表中的操作结束之后启用约束。

B.开启约束

在启用完整性约束的情况下,不满足约束规则的行是不能插入到表中的。

2) 定义完整性约束

示例如下:

先向对象中插入一张表:

create table t_con (id number(5) constraint t_con_pk primary key);然后执行alter语句,查看约束是否生效:

alter table t_con add constraint t_con_pk primary key (id);

如图,由于启用了完整性约束,导致报错

3) 修改或删除现有的完整性约束

示例:

A. 禁止已被启用的约束

alter table t_con disable constraint t_con_pk;

B. 删除完整性约束

alter table t_con drop constraint t_con_pk;

4) 查看约束信息

示例:

在SYSOBJECTS系统表中查找约束名为 T_CON_PK 的信息:

select * from sysobjects where name='t_con_pk';

查找所有约束信息:

select * from sysobjects where subtype$='cons';

5. 管理对象依赖性

在实际应用中,许多模式对象需要引用其他的对象。例如,一个视图中包含一个查询,其中引用了其他的表或视图。一个模式对象引用了别的对象被称为依赖对象,被引用的对象 称为被依赖对象。达梦数据库在对象被调用的时候自动重新编译,确保对象有效。

6. 管理对象的名称解析

SQL语句中的对象名字是由两部分组成,之间用点号隔开。下面描述的是达梦数据库管理系统怎样解析对象名字。

1) 如果只有一个名字,而没有点号。在当前模式下寻找是否存在相同名字的对象,如果找到,则返回;否则报错;

2) 如果有点号,首先检测对象名的第一部分,如在test.address中,test 就是第一部分。

a. 寻找哪一个模式的名字和第一部分相同,如果找到,以此模式进行步骤b;否则,以当前模式进行步骤B;

b. 在模式中需找是否有与对象名第二部分同名的对象,如果找到且待解析对象名只有两个部分,则返回;如果找到但待解析对象名多于两个部分,则转步骤c;否则报错;

c. 在模式中查找包含在前一个对象中并且和待解析对象名当前解析部分相同名字的对象,如果找到,循环步骤c,直至所有的部分检测结束后再返回;如果没有找到,则直接报错。如 test.school.class.student,在test模式下中的school对象中寻找class的对象,然后在class对象中寻找student对象。

7. 显示有关模式对象的信息

模式对象的信息主要记录在sysobjects系统表中。可以通过下面的语句来查询模式对象的相关信息。

select * from sysobjects where type$ = 'schobj' or type$ = 'tabobj';

但是,sysobjects系统表并不能将模式对象的所有信息存储起来。用户应该和其它系统表一起获得更加详细的信息。

如果用户想获得索引更详细的信息,可以查询sysindexes表;如果用户想了解存储过程、函数等的定义信息,可以查询systexts表;如果用户想了解更详细的约束的相关信息,可以查询syscons表。

四 达梦数据库非模式对象学习

达梦数据库的非模式对象主要有以下几种:

用户、角色、权限、表空间

1. 用户

1) 创建用户

创建用户的操作一般只能由系统预设用户sysdba、syssso 和sysauditor完成,如果普通用户需要创建用户,必须具有create user的数据库权限。创建用户的命令是create user,创建用户所涉及的内容包括为用户指定用户名、认证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账号的标识符,长度为1~128个字符。用户名可以用双引号括起来,也可以不用,但如果用户名以数字开头,必须用双引号括起来。

命令格式如下:

create user <用户名>identified<身份验证模式> [password_policy <口令策略>][<锁定子句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 ip 子句>][<禁止 ip子句>][<允许时间子句>][<禁止时间子句>][< tablespace 子句>];

<身份验证模式> ::= <数据库身份验证模式>|<外部身份验证模式>

<数据库身份验证模式> ::= BY <口令>[<散列选项>]

<散列选项> ::= HASH WITH [<密码引擎名>.]<散列算法> [<加盐选项>]

<散列算法> ::= MD5 | SHA1 | SHA224 | SHA256 | SHA384 | SHA512

<加盐选项> ::= [NO] SALT

<外部身份验证模式> ::= EXTERNALLY | EXTERNALLY AS <用户 DN>

<口令策略> ::= 口令策略项的任意组合

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

<存储加密密钥> ::= ENCRYPT BY <口令>

<空间限制子句> ::= DISKSPACE LIMIT <空间大小>| DISKSPACE UNLIMITED

<只读标志> ::= READ ONLY | NOT READ ONLY

<资源限制子句> ::= DROP PROFILE |

PROFILE <profile 名> |

[LIMIT <资源设置>]

<资源设置> ::= <资源设置项>{,<资源设置项>} |

<资源设置项>{ <资源设置项>}

<资源设置项> ::= SESSION_PER_USER <参数设置>|

CONNECT_IDLE_TIME <参数设置>|

CONNECT_TIME <参数设置>|

CPU_PER_CALL <参数设置>|

CPU_PER_SESSION <参数设置>|

MEM_SPACE <参数设置>|

READ_PER_CALL <参数设置>|

READ_PER_SESSION <参数设置>|

FAILED_LOGIN_ATTEMPS <参数设置>|

PASSWORD_LIFE_TIME <参数设置>|

PASSWORD_REUSE_TIME <参数设置>|

PASSWORD_REUSE_MAX <参数设置>|

PASSWORD_LOCK_TIME <参数设置>|

PASSWORD_GRACE_TIME <参数设置>

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

<允许 IP 子句> ::= ALLOW_IP <IP 项>{,<IP 项>}

<禁止 IP 子句> ::= NOT_ALLOW_IP <IP 项>{,<IP 项>}

<IP 项> ::= <具体 IP>|<网段>

<允许时间子句> ::= ALLOW_DATETIME <时间项>{,<时间项>}

<禁止时间子句> ::= NOT_ALLOW_DATETIME <时间项>{,<时间项>}

<时间项> ::= <具体时间段> | <规则时间段>

<具体时间段> ::= <具体日期><具体时间> TO <具体日期><具体时间>

<规则时间段> ::= <规则时间标志><具体时间> TO <规则时间标志><具体时间>

<规则时间标志> ::= MON | TUE | WED | THURS | FRI | SAT | SUN

<TABLESPACE 子句> ::=DEFAULT TABLESPACE <表空间名>

示例:

create user damengpxd identified by damengpxd limit connect_time 3;

2) 口令策略

用户口令最长为48字节,创建用户语句中的password policy子句用来指定该用户的口令策略,系统支持的口令策略有:

0=无策略

1=禁止与用户名相同

2=口令长度不小于9

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

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

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

口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略2和4,则设置口令策略为2+4=6即可。

A. 口令策略查询

使用如下语句可查询当前的口令策略:

select * from v$parameter where name= 'pwd_policy';

可以得知,目前口令策略为不少于9个字符

B. 修改口令策略

sp_set_para_value(1, 'pwd_policy',8);

如图,策略已被修改为至少包含一个数字

3) 用户身份验证模式

达梦提供数据库身份验证模式和外部身份验证模式来保护对数据库访问的安全。数据库身份验证模式需要利用数据库口令,即在创建或修改用户时指定用户口令,用户在登录时输入对应口令进行身份验证;外部身份验证模式支持基于操作系统(OS)的身份验证、LDAP身份验证和KERBEROS身份验证。

A. 基于操作系统的身份验证

示例:

修改dm.ini中的ENABLE_LOCAL_OSAUTH参数为1,允许操作系统验证方式

ENABLE_REMOTE_OSAUTH 参数设置为 1,允许远程验证

ENABLE_ENCRYPT 参数设置为 1,采用 SSL 安全连接

SP_SET_PARA_VALUE(2,'ENABLE_LOCAL_OSAUTH',1);

SP_SET_PARA_VALUE(2,'ENABLE_REMOTE_OSAUTH',1);

SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',1);

由于普通版本要求,仅默认管理员带有默认的证书,可以登录。其他管理员由于证书缺失导致无法使用操作系统认证方式登录。且按照上限要求,ENABLE_ENCRYPT参数被要求设置为0,禁止SSL验证。故按照《DM8安全管理》中的方式设置的操作系统登录无法实现:

B. LDAP身份验证

LDAP(Lightweight Directory Access Protocol),即轻型目录访问协议。搭载LADP的服务器一般用于提供用户身份认证,与CA服务器所对应。

达梦数据库提供对LDAP的支持,主要利用LDAP服务器存储的账户数据信息,验证账户是否是数据库的合法用户。

要使用LDAP身份验证,首先要在配置文件dm.ini中添加参数LDAP_HOST。此参数为LDAP数据源所在机器的主库名。

LDAP身份验证创建用户的语法如下:

create user <用户名> identified externally as <用户 DN> ......

C. KERBEROS身份验证

KERBEROS是为TCP/IP网络系统设计的可信的第三方认证协议,达梦数据库支持KERBEROS身份验证。语法如下:

create user <用户名>identified externally ......;

D. UKEY身份验证

达梦数据库支持UKEY身份验证,通过INI参数CLIENT_UKEY进行UKEY验证设置,默认值

为0:

0:支持所有登录方式,是否采用UKEY验证由客户端驱动。当客户端输入UKEY名称和UKEY_PIN则采用UKEY验证,否则不使用UKEY验证;

1:客户端强制使用UKEY验证。

4) 修改用户信息

修改范围如下:

[IDENTIFIED <身份验证模式>]

[PASSWORD_POLICY <口令策略>]

[<锁定子句>]

[<存储加密密钥>]

[<空间限制子句>]

[<只读标志>]

[<资源限制子句>]

[<允许 IP 子句>]

[<禁止 IP子句>]

[<允许时间子句>]

[<禁止时间子句>]

[<TABLESPACE 子句>]

[<SCHEMA 子句>]

语法如下:

alter user <用户名> [修改词条]

5) 删除用户

删除用户的用户需要有DROP USER权限,例如SYSDBA、SYSSSO、SYSAUDITOR。

当一个用户被删除后,这个用户本身的信息,以及它所拥有的数据库对象的信息都将从数据字典中被删除。

删除用户语法如下:

drop user [if exists] <用户名> [restrict | cascade];

if exists:删除不存在的用户时不会报错,否则会报错

restrict | cascade:使用了CASCADE选项,除数据库中该用户及其创建的所有对象被删除外,若其他用户创建的对象引用了该用户的对象,数据库还将自动删除相应的引用完整性约束及依赖关系;否则返回错误信息并不删除用户。

2. 权限

用户权限有两类:数据库权限和对象权限。数据库权限主要是指针对数据库对象的创建、

删除、修改的权限,对数据库备份等权限。而对象权限主要是指对数据库对象中的数据的访问权限。数据库权限一般由SYSDBA、SYSAUDITOR 和 SYSSSO指定,也可以由具有特权的其他用户授予。对象权限一般由数据库对象的所有者授予用户,也可由SYSDBA用户指定,或者由具有该对象权限的其他用户授权。

1) 数据库权限

常见的权限如下:

CREATE TABLE:在自己的模式中创建表的权限

CREATE VIEW:在自己的模式中创建视图的权限

CREATE USER:创建用户的权限

CREATE TRIGGER:在自己的模式中创建触发器的权限

ALTER USER:修改用户的权限

ALTER DATABASE:修改数据库的权限

CREATE PROCEDURE:在自己模式中创建存储程序的权限

表对象的权限:

CREATE TABLE:创建表

CREATE ANY TABLE:在任意模式下创建表

ALTER ANY TABLE:修改任意表

DROP ANY TABLE:删除任意表

INSERT TABLE:插入表记录

INSERT ANY TABLE:向任意表插入记录

UPDATE TABLE:更新表记录

UPDATE ANY TABLE:更新任意表的记录

DELETE TABLE:删除表记录

DELETE ANY TABLE:删除任意表的记录

SELECT TABLE:查询表记录

SELECT ANY TABLE:查询任意表的记录

REFERENCES TABLE:引用表

REFERENCES ANY TABLE:引用任意表

DUMP TABLE:导出表

DUMP ANY TABLE:导出任意表

GRANT TABLE:向其他用户进行表上权限的授权

GRANT ANY TABLE:向其他用户进行任意表上权限的授权

存储对象的权限:

CREATE PROCEDURE:创建存储程序

CREATE ANY PROCEDURE:在任意模式下创建存储程序

DROP PROCEDURE:删除存储程序

DROP ANY PROCEDURE:删除任意存储程序

EXECUTE PROCEDURE:执行存储程序

EXECUTE ANY PROCEDURE:执行任意存储程序

GRANT PROCEDURE:向其他用户进行存储程序上权限的授权

GRANT ANY PROCEDURE:向其他用户进行任意存储程序上权限的授权

2) 对象权限

对象权限主要是对数据库对象中的数据的访问权限,主要用来授予需要对某个数据库对象的数据进行操纵的数据库普通用户。

常见的对象权限:

视图

存储程序

类型

序列

目录

select

insert

delete

update

references

dunp

execute

read

write

usage

select、insert、delete和update权限分别是针对数据库对象中的数据的查询、插入、删除和修改的权限。对于表和视图来说,删除操作是整行进行的,而查询、插入和修改却可以在一行的某个列上进行,所以在指定权限时,delete权限只要指定所要访问的表就可以了,而 select、insert 和update权限还可以进一步指定是对哪个列的权限。

表对象的references权限是指可以与一个表建立关联关系的权限,如果具有了这个权限,当前用户就可以通过自己的一个表中的外键,与对方的表建立关联。关联关系是通过主键和外键进行的,所以在授予这个权限时,可以指定表中的列,也可以不指定。

存储程序等对象的execute权限是指可以执行这些对象的权限。有了这个权限,一个用户就可以执行另一个用户的存储程序、包、类等。

目录对象的read和write权限指可以读或写访问某个目录对象的权限。

域对象的usage权限指可以使用某个域对象的权限。拥有某个域的usage权限的用户可以在定义或修改表时为表列声明使用这个域。

3. 角色

角色即为一批权限的集合,角色中的权限既可以是数据库权限,也可以是对象权限,还可以是别的角色。为了使用角色,首先在数据库中创建一个角色,这时角色中没有任何权限。然后向角色中添加权限。最后将这个角色授予用户,这个用户就具有了角色中的所有权限。在使用角色的过程中,可以随时向角色中添加权限,也可以随时从角色中删除权限,用户的权限也随之改变。如果要回收所有权限,只需将角色从用户回收即可。

1) 角色的创建与删除

A. 系统预设角色

常见的预设角色如下:

DBA:DM数据库系统中对象与数据操作的最高权限集合,拥有构建数据库的全部特权,只有DBA才可以创建数据库结构

RESOURCE:可以创建数据库对象,对有权限的数据库对象进行数据操纵,不可以创建数据库结构

PUBLIC:不可以创建数据库对象,只能对有权限的数据库对象进行数据操纵

VTI:具有系统动态视图的查询权限,VTI默认授权给DBA且可转授

SOI:具有系统表的查询权限

DB_AUDIT_ADMIN:数据库审计的最高权限集合,可以对数据库进行各种审计操作,并创建新的审计用户

DB_AUDIT_OPER:可以对数据库进行各种审计操作,但不能创建新的审计用户

DB_AUDIT_PUBLIC:不能进行审计设置,但可以查询审计相关字典表

DB_AUDIT_VTI:具有系统动态视图的查询权限,DB_AUDIT_VTI默认授权给DB_AUDIT_ADMIN且可转授

DB_AUDIT_SOI:具有系统表的查询权限

DB_POLICY_ADMIN:数据库强制访问控制的最高权限集合,可以对数据库进行强制访问控制管理,并创建新的安全管理用户

DB_POLICY_OPER:可以对数据库进行强制访问控制管理,但不能创建新的安全管理用户

DB_POLICY_PUBLIC:不能进行强制访问控制管理,但可以查询强制访问控制相关字典表

DB_POLICY_VTI:具有系统动态视图的查询权限,DB_POLICY_VTI默认授权给DB_POLICY_ADMIN且可转授

DB_POLICY_SOI:具有系统表的查询权限

B. 创建角色

创建角色及赋权的语法如下:

create role <角色名>;

grant [权限] to <角色名>;

创建角色及赋权需要注意以下几点:

※创建者必须具有create role数据库权限;

※角色名的长度不能超过128个字符;

※角色名不允许和系统已存在的用户名重名;

※角色名不允许是DM保留字。

C. 删除角色

删除角色的语法如下:

drop role [if exists] <角色名>;

if exists:删除不存在的角色时不会报错,否则会报错。

2) 角色的启用与禁用

角色的启用禁用可以通过系统过程SP_SET_ROLE来进行设置,具体语法如下

SP_SET_ROLE('<角色名>', 0/1);

其中0表示禁用,1表示启用

4. 权限的分配与回收

1) 权限的分配

语法如下:

grant <特权> to <用户或角色>{,<用户或角色>} [with admin option];<特权> ::= <数据库权限>{,<数据库权限>};<用户或角色>::= <用户名> | <角色名>

授权时有以下需要注意的地方:

※授权者必须具有对应的数据库权限以及其转授权;

※接受者必须与授权者用户类型一致;

※如果有 WITH ADMIN OPTION 选项,接受者可以再把这些权限转授给其他用户/角色。

示例:将建表和建视图的权限授给用户damengpxd,并允许其转授。grant create table, create view to damengpxd with admin option;

如图所见,damengpxd用户已拥有建表及建视图的权限,并可以转授

2) 权限的收回

语法如下:

revoke [admin option for]<特权> from <用户或角色>{,<用户或角色>} ;<特权> ::= <数据库权限>{,<数据库权限>}<用户或角色>::= <用户名> | <角色名>收回权限时需要注意的地方:

※权限回收者必须是具有回收相应数据库权限以及转授权的用户;

※admin option for选项的意义是取消用户或角色的转授权限,但是权限不回收。

示例1:收回damengpxd用户的建表权限

revoke create table from damengpxd;

如图所见,此时damengpxd的建表权限已被收回

示例2:收回damengpxd可转授创建视图的权限,但保留创建视图的权限

revoke admin option for create view from damengpxd;

如图所见,转授的权限已被收回

3) 限制相关数据库权限的授予与回收

通过INI参数ENABLE_DDL_ANY_PRIV限制DDL相关的ANY数据库权限的授予与回收,有2个取值:

1:可以授予和回收DDL相关的ANY系统权限;

0:不可以授予和回收DDL相关的ANY系统权限。缺省为0。

示例:禁止赋予或收回create any trigger权限

赋予:grant create any trigger to damengpxd;

收回:revoke create any trigger from damengpxd;

如上图,在dm.ini的ENABLE_DDL_ANY_PRIV参数为0时,限制any权限的赋予及回收

5. 角色权限的分配与回收

1) 角色权限的分配

角色权限分配语法如下:

grant <角色名>{, <角色名>} to <用户或角色>{,<用户或角色>} [with admin option];<用户名或角色名> ::= <用户名> | <角色名>

分配角色权限时需要注意的地方:

※角色的授予者必须为拥有相应的角色以及其转授权的用户;

※接受者必须与授权者类型一致(譬如不能把审计角色授予标记角色);

※支持角色的转授;

※不支持角色的循环转授,如将 bookshop_role1 授予 bookshop_role2,

bookshop_role2 不能再授予 bookshop_role1。

2 角色权限的回收

角色权限回收语法如下:

revoke [admin option for] <角色名>{,<角色名>} from <角色名或用户名>;<角色名或用户名> ::= <用户名> | <角色名>

回收角色权限时需要注意的地方:

※权限回收者必须是具有回收相应角色以及转授权的用户;

※使用 admin option for 选项的目的是收回用户或角色权限转授的权利,而不回收用户或角色的权限。

6. 对象权限的分配与回收

1 对象权限的分配

对象授权的语法为:

grant <特权> on [<对象类型>] <对象> to <用户或角色>{,<用户或角色>} [with grant option];

<特权>::= all [privileges] | <动作> {, <动作>}

<动作>::= select[(<列清单>)] |

insert[(<列清单>)] |

update[(<列清单>)] |

delete |

references[(<列清单>)] |

execute|

read|

write|

usage|

index|

alter

<列清单>::= <列名> {,<列名>}

<对象类型>::= table | view | procedure | package | class | type | sequence |

directory | domain

<对象> ::= [<模式名>.]<对象名>

<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> |<序列名> | <目录名> | <域名>

<用户或角色>::= <用户名> | <角色名>

授权对象时需要注意的地方:

※授权者必须是具有对应对象权限以及其转授权的用户;

※如未指定对象的<模式名>,模式为授权者所在的模式。directory为非模式对象,

没有模式;

※如设定了对象类型,则该类型必须与对象的实际类型一致,否则会报错;

※带with grant option授予权限给用户时,则接受权限的用户可转授此权限;

※不带列清单授权时,如果对象上存在同类型的列权限,会全部自动合并;

※对于用户所在的模式的表,用户具有所有权限而不需特别指定;

※index动作向其他用户授予指定表的创建和删除索引(包含全文索引)的权限;

※alter动作仅支持向其他用户授予指定表的修改权限。

2) 对象权限的回收

对象权限回收的语法为:

revoke [grant option for] <特权> on [<对象类型>]<对象> from <用户或角色> {,<用户或

角色>} [<回收选项>];

<特权>::= all [privileges] | <动作> {, <动作>}

<动作>::= select |

insert |

update |

delete |

references |

execute|

read|

write|

usage|

index|

alter

<对象类型>::= table | view | procedure | package | class | type | sequence |

directory | domain

<对象> ::= [<模式名>.]<对象名>

<对象名> ::= <表名> | <视图名> | <存储过程/函数名> |<包名> |<类名> |<类型名> | <序列名>

| <目录名> | <域名>

<用户或角色>::= <用户名> | <角色名>

<回收选项> ::= restrict | cascade

回收对象授权时需要注意的地方:

※权限回收者必须是具有回收相应对象权限以及转授权的用户;

※回收时不能带列清单,若对象上存在同类型的列权限,则一并被回收;

※使用grant option for选项的目的是收回用户或角色权限转授的权利,而不回收用户或角色的权限;并且grant option for选项不能和restrict一起使用,否则会报错;

※在回收权限时,设定不同的回收选项,其意义不同。具体如下:

l 若不设定回收选项,无法回收授予时带with grant option的权限,但也不会检查要回收的权限是否存在限制;

l 若设定为restrict,无法回收授予时带with grant option的权限,也无法回收存在限制的权限,如角色上的某权限被别的用户用于创建视图等;

l 若设定为cascade,可回收授予时带或不带with grant option的权限,若带with grant option还会引起级联回收。利用此选项时也不会检查权限是否存在限制。另外,利用此选项进行级联回收时,若被回收对象上存在另一条路径授予同样权限给该对象时,则仅需回收当前权限。

7. 表空间

1) 创建表空间

创建表空间时需要指定表空间名和其拥有的数据文件列表。

示例如下:创建一个名为bookshop的表空间并关联两个128M大小的数据文件

create tablespace bookshop datafile '/home/dmdba/dmdbms/data/DAMENG/bookshop1.dbf' size 128, '/home/dmdba/dmdbms/data/DAMENG/bookshop2.dbf' size 128;

如图,表空间及对应数据文件已被创建

理论上最多允许有65535个表空间,但用户允许创建的表空间ID取值范围为0~32767,超过32767的只允许系统使用,ID由系统自动分配,ID不能重复使用,即使删除掉已有表空间,也无法重复使用已用ID号,也就是说只要创建32768次表空间后,用户将无法再创建表空间。

2) 扩展表空间

表空间通过数据文件来扩展,表空间的大小等于构成该表空间的所有数据文件的大小之和。所以要扩展表空间可以通过添加新的数据文件或者扩展表空间中已有的数据文件完成。示例如下:将数据文件大小扩展至256M

alter tablespace bookshop resize datafile '/home/dmdba/dmdbms/data/DAMENG/bookshop1.dbf' to 256;

如图,表空间大小已被扩展

3) 删除表空间

表空间删除语法如下:

drop tablespace bookshop;

如图,表空间已被删除,同时对应的数据文件也被同步删除

4) 修改表空间名

表空间名修改语法如下:

alter tablespace bookshop rename to books;

如图,表空间名已完成修改

5) 修改表空间状态

用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。脱机后可对表空间的数据进行备份。

示例:修改表空间books为脱机/联机状态

alter tablespace books offline/online;

如图,books表空间已脱机

6) 修改表空间数据缓冲区

用户表空间可以切换使用的数据缓冲区,系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许修改数据缓冲区。可以使用的数据缓冲区有normal和keep。表空间修改成功后,并不会立即生效,而是需要服务器重启。缓冲池名keep是达梦的保留关键字,使用时必须加双引号。

示例:将books表空间绑定到KEEP缓冲区

alter tablespace books cache= "keep";

如图,用户表空间的cache无法修改为keep

7) 查询表空间与数据文件对应关系

示例:查询表空间的数据文件

select ts.name, df.path from v$tablespace as ts, v$datafile as df where ts.id = df.group_id;

如图,所有表空间的数据文件

8) 表空间文件失效检查linux操作系统中,被进程打开的文件仍可以在系统中被删除,因此存在达梦数据文件可能被误删的风险。如果数据文件被删除,数据库系统能够及时检测出来,并立刻停止对其继续使用并通知用户。

在dm.ini中参数fil_check_interval的值指定 dm 系统检查数据文件是否仍存在的时间间隔。将其设为 0 表示不进行检查。

也可以通过系统过程sp_file_sys_check()来手动的进行检查。系统一旦检测出某个表空间内的数据文件被删除,则与该表空间所有的操作都将会失败,并报错该表空间内有数据文件被删除。

9) 表空间失效文件恢复

linux系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd中找

到其对应的文件副本。其中<pid>指打开该文件的进程 id。

利用该方法,结合os命令,数据库提供失效文件的恢复方案如下:

A. 调用系统过程 sp_tablespace_prepare_recover(tablespace_name)准备

进行恢复;

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

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

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

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

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

后进行数据文件的复制。

https://eco.dameng.com

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值