一、表空间管理
1.1 DM 逻辑存储架构
DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库
内 部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对
象都 存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。通过这
种细分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。
在 DM8 中存储的层次结构如下:
- 数据库由一个或多个表空间组成;
- 每个表空间由一个或多个数据文件组成;
- 每个数据文件由一个或多个簇组成;
- 段是簇的上级逻辑单元,一个段可以跨多个数据文件;
- 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
- 页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元
1.2、表空间
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN
表空间、TEMP 表空间和 HMAIN 表空间。
- SYSTEM 表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间
创建表和索引。 - ROLL 表空间完全由 DM 数据库自动维护,用户无需干预。该表空间用来存放事务
运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视
图。 - MAIN 表空间在初始化库的时候,就会自动创建一个大小为 128M 的数据文件
MAIN.DBF。在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为
用户默认的表空间。 - TEMP 表空间完全由 DM 数据库自动维护。当用户的 SQL 语句需要磁盘空间来完
成某个操作时,DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完
成的排序操作、SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP 表空间。 - HMAIN 表空间属于 HTS 表空间,完全由 DM 数据库自动维护,用户无需干涉。
当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,充当默认 HTS 表空间。
1.3、表空间使用常用语法
1.3.1、语法格式
CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>]
<数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>}
<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>]
<自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句> |OFF>
<每次扩展大小子句> ::= NEXT <扩展大小>
<最大大小子句> ::= MAXSIZE <文件最大大小>
<数据页缓冲池子句> ::= CACHE = <缓冲池名>
<存储加密子句> ::= ENCRYPT WITH <加密算法> [[BY] <加密密码>]
1.3.2、注意事项
在创建表空间时,通常只需要指定表空间名称,数据文件路径、数据文件大小、其他属
性。有几点需要注意:
- 单个表空间的数据文件数量不能超过 256 个
- 达梦数据库最多支持 65535 个表空间
- 数据文件的单位是 MB,在创建的时候只需要写数字。不需要额外添加单位。数据文
件大小取决于页大小。
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录最大字段外其他字段总长度(字节) | 表空间单个数据文件 最小/最大(MB) |
---|---|---|---|
4KB | 1938 | 2047 | 16/8388608 |
8KB | 3878 | 4095 | 32/16777216 |
16KB | 8000 | 8195 | 64/33554432 |
32KB | 8188 | 16176 | 128/67108864 |
1.3.3、创建表空间
SQL> create tablespace test datafile '+DMDATA/data/dsc/test.dbf' size 512;
操作已执行
已用时间: 00:00:03.122. 执行号:932.
SQL> select file_name, tablespace_name, status, autoextensible from dba_data_files
where tablespace_name='TEST';
行号 FILE_NAME TABLESPACE_NAME STATUS AUTOEXTENSIBLE
---------- ------------------------- --------------- --------- --------------
1 +DMDATA/data/dsc/test.dbf TEST AVAILABLE YES
已用时间: 4.082(毫秒). 执行号:933.
--创建表空间指定两个数据文件
SQL> create tablespace test1 datafile '+DMDATA/data/dsc/test1_01.dbf' size
256,'+DMDATA/data/dsc/test1_02.dbf' size 256;
操作已执行
已用时间: 00:00:07.732. 执行号:934.
SQL>
SQL> select file_name, tablespace_name, status, autoextensible from dba_data_files
where tablespace_name='TEST1';
行号 FILE_NAME TABLESPACE_NAME STATUS AUTOEXTENSIBLE
---------- ----------------------------- --------------- --------- --------------
1 +DMDATA/data/dsc/test1_01.dbf TEST1 AVAILABLE YES
2 +DMDATA/data/dsc/test1_02.dbf TEST1 AVAILABLE YES
已用时间: 2.341(毫秒). 执行号:935.
1.3.4、扩展表空间
扩展表空间有两种方法:(1)、增加数据文件(2)、resize 原数据文件大小
例:扩展表空间 TEST
--resize 数据文件
SQL> alter tablespace test resize datafile '+DMDATA/data/dsc/test.dbf' to 500;
操作已执行
已用时间: 00:00:02.357. 执行号:936.
--增加数据文件
SQL> alter tablespace test add datafile '+DMDATA/data/dsc/test_02.dbf' size 256;
操作已执行
已用时间: 00:00:03.276. 执行号:937.
--查询表空间情况
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible from dba_data_files where tablespace_name='TEST';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE
---------- ---------------------------- --------------- --------------------
--------- --------------
1 +DMDATA/data/dsc/test.dbf TEST 500
AVAILABLE YES
2 +DMDATA/data/dsc/test_02.dbf TEST 256
AVAILABLE YES
已用时间: 5.102(毫秒). 执行号:939.
SQL>
1.3.5、修改数据文件扩展属性
表空间默认是自动扩展的,用户可以修改表空间的相应属性。
(1)是否开启自动扩展属性 autoextend
(2)每次扩展的大小,取值范围 0~2048 单位 MB
(3)数据文件最大大小,maxsize <文件限制大小> 单位 MB
--关闭自动扩展
SQL> alter tablespace test datafile '+DMDATA/data/dsc/test.dbf' autoextend off;
操作已执行
已用时间: 122.623(毫秒). 执行号:940.
SQL>
--开启自动扩展并设置最大限制
SQL> alter tablespace test datafile '+DMDATA/data/dsc/test_02.dbf' autoextend on
next 10 maxsize 10240;
操作已执行
已用时间: 186.332(毫秒). 执行号:941.
SQL>
--查询数据文件自动扩展信息
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from dba_data_files where tablespace_name='TEST';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ---------------------------- --------------- --------------------
--------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test.dbf TEST 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test_02.dbf TEST 256
AVAILABLE YES 10 10240
已用时间: 2.341(毫秒). 执行号:943.
1.3.6、修改表空间名以及移动数据文件
--在线修改表空间名称
SQL> alter tablespace test rename to test3;
操作已执行
已用时间: 232.025(毫秒). 执行号:944.
--查询表空间信息
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from
dba_data_files where tablespace_name='TEST3';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ---------------------------- --------------- -------------------- --------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test.dbf TEST3 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test_02.dbf TEST3 256
AVAILABLE YES 10 10240
已用时间: 4.232(毫秒). 执行号:945.
SQL>
--RENAME 数据文件位置,自动帮你移动不需要人为手动
SQL> alter tablespace test3 offline;
操作已执行
已用时间: 173.767(毫秒). 执行号:946.
SQL>
SQL> alter tablespace test3 rename datafile '+DMDATA/data/dsc/test.dbf' to
'+DMDATA/data/dsc/test3_01.dbf';
操作已执行
已用时间: 00:00:05.531. 执行号:947.
SQL>
SQL> alter tablespace test3 rename datafile '+DMDATA/data/dsc/test_02.dbf' to
'+DMDATA/data/dsc/test3_02.dbf';
操作已执行
已用时间: 00:00:02.654. 执行号:948.
SQL>
SQL> alter tablespace test3 online;
操作已执行
已用时间: 157.354(毫秒). 执行号:949.
SQL>
SQL> select file_name, tablespace_name, BYTES/1024/1024 "Size (MB)", status,
autoextensible, INCREMENT_BY, MAXBYTES/1024/1024 "MaxSize(MB)" from
dba_data_files where tablespace_name='TEST3';
行 号 FILE_NAME TABLESPACE_NAME Size (MB)
STATUS AUTOEXTENSIBLE INCREMENT_BY MaxSize(MB)
---------- ----------------------------- --------------- --------------------
--------- -------------- ------------ -----------
1 +DMDATA/data/dsc/test3_01.dbf TEST3 500
AVAILABLE NO 0 0
2 +DMDATA/data/dsc/test3_02.dbf TEST3 256
AVAILABLE YES 10 10240
已用时间: 3.654(毫秒). 执行号:950.
1.3.7、数据文件被删除如何恢复
1.3.7.1、准备测试环境
--创建测试表空间
SQL> create tablespace TY datafile '/dm8/data/DAMENG/TY_01.dbf' size 256;
操作已执行
已用时间: 23.546(毫秒). 执行号:76303.
--创建测试用户以及数据
SQL> create user TY identified by TY123456 default tablespace TY default index
tablespace TY;
操作已执行
已用时间: 2.365(毫秒). 执行号:76304.
SQL>
SQL> grant "PUBLIC","RESOURCE","SOI","VTI" to TY;
操作已执行
已用时间: 5.284(毫秒). 执行号:76305.
SQL> conn TY/TY123456:5238
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 1.142(ms)
SQL>
SQL> create table test(id number);
操作已执行
已用时间: 3.214(毫秒). 执行号:76700.
SQL>
SQL> insert into test values(1);
影响行数 1
已用时间: 1.128(毫秒). 执行号:76701.
SQL> insert into test values(2);
影响行数 1
已用时间: 0.412(毫秒). 执行号:76702.
SQL> insert into test values(3);
影响行数 1
已用时间: 0.792(毫秒). 执行号:76703.
SQL> insert into test values(4);
影响行数 1
已用时间: 0.722(毫秒). 执行号:76704.
SQL> commit;
操作已执行
已用时间: 1.612(毫秒). 执行号:76705.
SQL>
SQL> select * from test;
行号 ID
---------- --
1 1
2 2
3 3
4 4
已用时间: 1.232(毫秒). 执行号:76706.
SQL>
1.3.7.2、删除表空间数据文件
[dmdba@dmdw01 data]$ cd DAMENG/
[dmdba@dmdw01 DAMENG]$ ls
arch bak ctl_bak DAMENG01.log DAMENG02.log dmarch.ini dm.ctl dm.ini
dminit20220621104445.log dm_service.prikey HMAIN TY_01.dbf MAIN.DBF
rep_conflict.log ROLL.DBF sqllog.ini SYSTEM.DBF TEMP.DBF trace
[dmdba@dmdw01 DAMENG]$ rm -fr TY_01.dbf
1.3.7.3、查询数据以及表空间情况
SQL> conn SYSDBA/SYSDBA:5238
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 2.487(ms)
SQL>
SQL> select * from TY.test;
行号 ID
---------- --
1 1
2 2
3 3
4 4
已用时间: 0.354(毫秒). 执行号:76709.
SQL> select file_name, tablespace_name, status from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME STATUS
---------- --------------------------- --------------- ---------
1 /dm8/data/DAMENG/SYSTEM.DBF SYSTEM AVAILABLE
2 /dm8/data/DAMENG/TY_01.dbf TY AVAILABLE
3 /dm8/data/DAMENG/MAIN.DBF MAIN AVAILABLE
4 /dm8/data/DAMENG/TEMP.DBF TEMP AVAILABLE
5 /dm8/data/DAMENG/ROLL.DBF ROLL AVAILABLE
已用时间: 14.233(毫秒). 执行号:76800.
SQL>
SQL> SELECT GROUP_ID,PATH,CLIENT_PATH FROM v$datafile;
行号 GROUP_ID PATH CLIENT_PATH
---------- ----------- --------------------------- -----------
1 0 /dm8/data/DAMENG/SYSTEM.DBF SYSTEM.DBF
2 1 /dm8/data/DAMENG/ROLL.DBF ROLL.DBF
3 3 /dm8/data/DAMENG/TEMP.DBF TEMP.DBF
4 4 /dm8/data/DAMENG/MAIN.DBF MAIN.DBF
5 6 /dm8/data/DAMENG/TY_01.dbf TY_01.dbf
已用时间: 1.235(毫秒). 执行号:76801.
1.3.7.4、模拟插入数据
--模拟插入数据
SQL> insert into test values(5);
影响行数 1
已用时间: 0.780(毫秒). 执行号:76802.
SQL> commit;
操作已执行
已用时间: 0.675(毫秒). 执行号:76803.
SQL>
SQL> select * from TY.test;
行号 ID
---------- --
1 1
2 2
3 3
4 4
5 5
已用时间: 0.433(毫秒). 执行号:76804.
1.3.7.5、进行数据文件检查
--执行检查
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 0.564(毫秒). 执行号:76805.
SQL>
--查询数据
SQL> select * from TY.test;
select * from TY.test;
[-3433]:表空间处于脱机状态.
已用时间: 0.459(毫秒). 执行号:0.
SQL> SELECT GROUP_ID,PATH,CLIENT_PATH FROM v$datafile;
行号 GROUP_ID PATH CLIENT_PATH
---------- ----------- --------------------------- -----------
1 0 /dm8/data/DAMENG/SYSTEM.DBF SYSTEM.DBF
2 1 /dm8/data/DAMENG/ROLL.DBF ROLL.DBF
3 3 /dm8/data/DAMENG/TEMP.DBF TEMP.DBF
4 4 /dm8/data/DAMENG/MAIN.DBF MAIN.DBF
5 6 /dm8/data/DAMENG/TY_01.dbf TY_01.dbf
已用时间: 0.434(毫秒). 执行号:76806.
SQL> select tablespace_name, file_name, status from dba_data_files;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- --------------------------- ---------
1 SYSTEM /dm8/data/DAMENG/SYSTEM.DBF AVAILABLE
2 TY /dm8/data/DAMENG/TY_01.dbf INVALID
3 MAIN /dm8/data/DAMENG/MAIN.DBF AVAILABLE
4 TEMP /dm8/data/DAMENG/TEMP.DBF AVAILABLE
5 ROLL /dm8/data/DAMENG/ROLL.DBF AVAILABLE
已用时间: 1.210(毫秒). 执行号:76807.
上面看得到如果未做数据文件检查的话,被删除的数据文件上的表和对象可以查询并且
插入数据,在做了数据文件校验之后将无法正常查询。
数据文件的状态 STATUS=INVALID
1.3.7.6、先执行恢复前的准备工作
SQL> call sp_tablespace_prepare_recover('TY');
DMSQL 过程已成功完成
已用时间: 0.320(毫秒). 执行号:76808.
1.3.7.7、查看数据库进程号,找到未释放的文件句柄号和被删除的数据文件
[dmdba@dmdw01 DAMENG]$ ps -ef |grep dmserver
dmdba 2270 1 0 09:17 ? 00:00:56 /dm8/bin/dmserver path=/dm8/d
sc/config/dsc2_config/dm.ini dcr_ini=/dm8/dsc/config/dmdcr.ini -noconsole
dmdba 6305 2287 0 10:97 pts/0 00:00:14 dmserver path=/dm8/data/DAME
NG/dm.ini
dmdba 8099 6624 0 11:24 pts/2 00:00:00 grep --color=auto dmserver
[dmdba@dmdw01 DAMENG]$
[dmdba@dmdw01 DAMENG]$ cd /proc/6305/fd
[dmdba@dmdw01 fd]$ ls -ltr
总用量 0
lrwx------ 1 dmdba dinstall 64 1 月 23 11:24 2 -> /dev/pts/0
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 9 -> /dm8/data/DAMENG/DAMENG02.log
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 8 -> /dm8/data/DAMENG/DAMENG01.log
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 7 -> /dm8/data/DAMENG/TEMP.DBF
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 6 -> /dm8/data/DAMENG/SYSTEM.DBF
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 5 -> socket:[65217]
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 46 -> /dm8/data/DAMENG/TY_01.dbf
(deleted)
lrwx------ 1 dmdba dinstall 64 1 月 21 11:25 45 ->
/dm8/data/DAMENG/arch/ARCHIVE_LOCAL1_0x33956438_EP0_2022-06-21_10-51-27.log
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 44 -> socket:[77886]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 43 -> pipe:[65242]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 42 -> pipe:[65242]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 41 -> pipe:[65241]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 40 -> pipe:[65241]
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 4 -> socket:[65216]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 39 -> pipe:[65240]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 38 -> pipe:[65240]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 37 -> pipe:[65239]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 36 -> pipe:[65239]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 35 -> pipe:[65238]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 34 -> pipe:[65238]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 33 -> pipe:[65237]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 32 -> pipe:[65237]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 31 -> pipe:[65236]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 30 -> pipe:[65236]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 3 -> /dev/urandom
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 29 -> pipe:[65235]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 28 -> pipe:[65235]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 27 -> pipe:[65234]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 26 -> pipe:[65234]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 25 -> pipe:[65233]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 24 -> pipe:[65233]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 23 -> pipe:[65232]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 22 -> pipe:[65232]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 21 -> pipe:[65231]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 20 -> pipe:[65231]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 19 -> pipe:[65230]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 18 -> pipe:[65230]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 17 -> pipe:[65229]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 16 -> pipe:[65229]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 15 -> pipe:[65228]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 14 -> pipe:[65228]
l-wx------ 1 dmdba dinstall 64 1 月 23 11:25 13 -> pipe:[65227]
lr-x------ 1 dmdba dinstall 64 1 月 23 11:25 12 -> pipe:[65227]
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 11 -> /dm8/data/DAMENG/MAIN.DBF
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 10 -> /dm8/data/DAMENG/ROLL.DBF
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 1 -> /dev/pts/0
lrwx------ 1 dmdba dinstall 64 1 月 23 11:25 0 -> /dev/pts/0
1.3.7.8、将数据文件复制回去
[dmdba@dmdw01 fd]$ cp 46 /dm8/data/DAMENG/TY_01.dbf
1.3.7.9、然后执行数据文件恢复过程并检查
--然后执行数据文件恢复过程
SQL> call sp_tablespace_recover('TY');
DMSQL 过程已成功完成
已用时间: 0.320(毫秒). 执行号:76809.
SQL> call SP_FILE_SYS_CHECK();
DMSQL 过程已成功完成
已用时间: 0.433(毫秒). 执行号:76810.
--查询数据和表空间进行数据验证
SQL> select tablespace_name, file_name, status from dba_data_files;
行号 TABLESPACE_NAME FILE_NAME STATUS
---------- --------------- --------------------------- ---------
1 SYSTEM /dm8/data/DAMENG/SYSTEM.DBF AVAILABLE
2 TY /dm8/data/DAMENG/TY_01.dbf AVAILABLE
3 MAIN /dm8/data/DAMENG/MAIN.DBF AVAILABLE
4 TEMP /dm8/data/DAMENG/TEMP.DBF AVAILABLE
5 ROLL /dm8/data/DAMENG/ROLL.DBF AVAILABLE
已用时间: 3.875(毫秒). 执行号:76811.
SQL>
SQL> SELECT GROUP_ID,PATH,CLIENT_PATH FROM v$datafile;
行号 GROUP_ID PATH CLIENT_PATH
---------- ----------- --------------------------- -----------
1 0 /dm8/data/DAMENG/SYSTEM.DBF SYSTEM.DBF
2 1 /dm8/data/DAMENG/ROLL.DBF ROLL.DBF
3 3 /dm8/data/DAMENG/TEMP.DBF TEMP.DBF
4 4 /dm8/data/DAMENG/MAIN.DBF MAIN.DBF
5 6 /dm8/data/DAMENG/TY_01.dbf TY_01.dbf
已用时间: 0.776(毫秒). 执行号:76812.
SQL> select * from TY.test;
行号 ID
---------- --
1 1
2 2
3 3
4 4
5 5
已用时间: 0.778(毫秒). 执行号:76813.
1.3.8、修改表空间数据缓冲区
可以使用的数据缓冲区有 NORMAL 和 KEEP
SQL> select id, name, cache, status$ from v$tablespace;
行号 ID NAME CACHE STATUS$
---------- ----------- -------- ------ -----------
1 0 SYSTEM 0
2 1 ROLL 0
3 3 TEMP 0
4 4 MAIN 0
5 5 TY 0
6 7 DTS_TEST NORMAL 0
7 8 TEST3 NORMAL 0
7 rows got
已用时间: 3.438(毫秒). 执行号:969.
SQL>
--修改表空间数据缓冲区
SQL> alter tablespace TEST3 cache="KEEP";操作已执行
已用时间: 120.132(毫秒). 执行号:970.
SQL>
SQL> select id, name, cache, status$ from v$tablespace;
行号 ID NAME CACHE STATUS$
---------- ----------- -------- ------ -----------
1 0 SYSTEM 0
2 1 ROLL 0
3 3 TEMP 0
4 4 MAIN 0
5 5 TY 0
6 7 DTS_TEST NORMAL 0
7 8 TEST3 KEEP 0
7 rows got
已用时间: 0.553(毫秒). 执行号:971.
1.3.9、删除表空间
SQL> select file_name, tablespace_name from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME
---------- ----------------------------- ---------------
1 +DMDATA/data/dsc/system.dbf SYSTEM
2 +DMDATA/data/dsc/test1_02.dbf TEST1
3 +DMDATA/data/dsc/test1_01.dbf TEST1
4 +DMDATA/data/dsc/test3_02.dbf TEST3
5 +DMDATA/data/dsc/test3_01.dbf TEST3
6 +DMDATA/data/dsc/DTS_TEST.dbf DTS_TEST
7 +DMDATA/data/dsc/TY.dbf TY
8 +DMDATA/data/dsc/main.dbf MAIN
9 +DMDATA/data/dsc/TEMP2.DBF TEMP
10 +DMDATA/data/dsc/roll.dbf ROLL
10 rows got
已用时间: 43.243(毫秒). 执行号:100.
--删除表空间
SQL> drop tablespace test1;
操作已执行
已用时间: 113.654(毫秒). 执行号:101.
SQL> select file_name, tablespace_name from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME
---------- ----------------------------- ---------------
1 +DMDATA/data/dsc/system.dbf SYSTEM
2 +DMDATA/data/dsc/test3_02.dbf TEST3
3 +DMDATA/data/dsc/test3_01.dbf TEST3
4 +DMDATA/data/dsc/DTS_TEST.dbf DTS_TEST
5 +DMDATA/data/dsc/TY.dbf TY
6 +DMDATA/data/dsc/main.dbf MAIN
7 +DMDATA/data/dsc/TEMP2.DBF TEMP
8 +DMDATA/data/dsc/roll.dbf ROLL
8 rows got
已用时间: 5.322(毫秒). 执行号:102.
SQL> exit
--查询数据文件是否删除
[dmdba@dmdw01 dm8]$ dmasmtool dcr_ini=/dm8/dsc/config/dmdcr.ini
DMASMTOOL V8
ASM>ls
+
disk groups total [4]......
NO.1 name: DMLOG
NO.2 name: DMDATA
NO.3 name: VOTE
NO.4 name: DCR
Used time: 8.130(ms).
ASM>cd DMDATA
+DMDATA
Used time: 5.933(ms).
ASM>ls
dir : data
dir : DSC0
dir : DSC1
dir : DSC2
total count 4.
Used time: 6.533(ms).
ASM>cd data
+DMDATA/data
Used time: 4.434(ms).
ASM>ls
dir : dsc
total count 1.
Used time: 4.232(ms).
ASM>cd dsc
+DMDATA/data/dsc
Used time: 4.022(ms).
ASM>ls
dir : bak
file : dm.ctl
dir : ctl_bak
dir : HMAIN
file : TEMP0.DBF
file : TEMP1.DBF
file : rep_conflict.log
file : TEMP2.DBF
file : system.dbf
file : roll.dbf
file : main.dbf
file : TY.dbf
file : dm_service.prikey
file : DTS_TEST.dbf
file : test3_01.dbf
file : test3_02.dbf
total count 16.
Used time: 17.351(ms).
ASM>
二、用户管理
DM 数据库采用“三权分立”或“四权分立”的安全机制,将系统中所有的权限按照类型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而使整个系统具有较高的安全性和较强的灵活性。可在创建 DM 数据库时通过建库参数 PRIV_FLAG 设置使用“三权分立”或“四权分立”安全机制,0 表示“三权分立”,1 表示“四权分立”。此参数仅在 DM 安全版本下提供, 即仅 DM 安全版本提供“四权分立”安全机制,缺省采用“三权分立”安全机制。
2.1、用户创建介绍
创建用户的操作一般只能由系统预设用户 SYSDBA、SYSSSO 和 SYSAUDITOR 完成,
如果普通用户需要创建用户,必须具有 CREATE USER 的数据库权限。
创建用户的命令是 CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认
证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账
号的标识符,长度为 1~128 个字符。用户名可以用双引号括起来,也可以不用,但如果用
户名以数字开头,必须用双引号括起来
2.2、用户创建常用语法
2.2.1、语法格式
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 <表空间名>
2.2.2、口令策略
用户口令最长为 48 字节,创建用户语句中的 PASSWORD POLICY 子句用来指定该
用
户的口令策略,系统支持的口令策略有:
0 无策略
1 禁止与用户名相同
2 口令长度不小于 9
4 至少包含一个大写字母(
A-Z)
8 至少包含一个数字(0-9)
16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置
口令策略为 2+4=6 即可。
--查询当前数据库口令策略,默认是 2
SQL> SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
DEFAULT_VALUE ISDEFAULT
---------- ----------- ---------- ---- ----- --------- ---------- -------------
---------- ------------- -----------
1 463 PWD_POLICY SYS 2 2 2 Flag of passw
ord policy 2 1
--修改口令策略
例如,将 PWD_POLICY 置为 8,同时修改文件和内存参数,由于 PWD_POLICY 为动态 INI
参数,这样设置后新的参数值可以立即生效。
--调用过程进行修改,1 代表的是 both,2 代表 spfile
SQL> SP_SET_PARA_VALUE(1, 'PWD_POLICY',8);
DMSQL 过程已成功完成
已用时间: 4.663(毫秒). 执行号:975.
--修改完查询结果
SQL> SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
行号 ID NAME TYPE VALUE SYS_VALUE FILE_VALUE DESCRIPTION
DEFAULT_VALUE ISDEFAULT
---------- ----------- ---------- ---- ----- --------- ---------- -------------
---------- ------------- -----------
1 463 PWD_POLICY SYS 8 8 8 Flag of passw
ord policy 2 0
已用时间: 5.226(毫秒). 执行号:976.
2.2.3、资源限制
用户的资源限制管理有两种方式:
方式一,将用户关联到某个已存在的 PROFILE 对象上,之后用户的资源限制由关联
的 PROFILE 统一管理配置,且无法再使用方式二中的 LIMIT <资源设置>设置资源设置
项。
方式二,未关联 PROFILE 的用户使用 LIMIT <资源设置>设置资源设置项。 新建用
户默认使用方式二管理资源设置,在关联到 PROFILE 时,之前已设置的资源限制项会立
即失效。
资源设置项 | 说明 | 最大值 | 最小值 | 缺省值 |
---|---|---|---|---|
SESSION_PER_USER | 在一个实例中,一个用户可以同时拥有的会话数量 | 32768 | 1 | 安全版本中默认值为 4096;其他版本中默认值为系统所能提供的最大值 |
CONNECT_TIME | 一个会话连接、访问和操 作数据库服务器的时间 上限(单位:1 分钟) | 1440(1 天) | 1 | 无限制 |
CONNECT_IDLE_TIME | 会话最大空闲时间(单 位:1 分 钟) | 1440(1 天) | 1 | 无限制 |
FAILED_LOGIN_ATTEMPS | 将引起一个账户被锁定的连续注 册失败的次数 | 100 | 1 | 3 |
CPU_PER_SESSION | 一个会话允许使用的CPU 时间 上限(单位:秒) | 31536000(365 天) | 1 | 无限制 |
CPU_PER_CALL | 用户的一个请求能够使用的 CPU 时间上限(单位:秒) | 86400(1 天) | 1 | 无限制 |
READ_PER_SESSION | 会话能够读取的总数据页数上限 | 2147483646 | 1 | 无限制 |
READ_PER_CALL | 每个请求能够读取的数据页数 | 2147483646 | 1 | 无限制 |
MEM_SPACE | 会话占有的私有内存空间上限 (单位:MB) | 2147483647 | 1 | 无限制 |
PASSWORD_LIFE_TIME | 一个口令在其终止前可以使用的天数 | 365 | 1 | 无限制 |
PASSWORD_REUSE_TIME | 一个口令在可以重新使用前必须经过的天数 | 365 | 1 | 无限制 |
PASSWORD_REUSE_MAX | 一个口令在可以重新使用前必须改变的次数 | 32768 | 1 | 无限制 |
PASSWORD_LOCK_TIME | 如果超过 FAILED_LOGIN_ATTE MPS 设置 值,一个账户将被锁定的分钟数 | 1440(1 天) | 1 | 1 |
PASSWORD_GRACE_TIME | 以天为单位的口令过期宽限时 间,过期口令超过该期限后,禁 止执行除修改口令以外的其他操作 | 30 | 1 | 10 |
2.2.4、创建用户
--创建用户失败的登录次数达到 3 次被锁定 5 分钟
SQL> create user t1 identified by t12345678 limit failed_login_attemps 3, passw
ord_lock_time 5;
操作已执行
已用时间: 132.451(毫秒). 执行号:979.
SQL>
--创建用户在 30 天内修改过 5 次后,才能重新使用过去口令
SQL> create user t2 identified by t12345678 limit password_reuse_time 30, passw
ord_reuse_max 5;
操作已执行
已用时间: 112.136(毫秒). 执行号:980.
--创建允许的 IP 段和工作时间段可以访问的用户
SQL> create user t3 identified by t12345678 allow_ip "192.168.10.*" allow_datet
ime mon "8:30:00" to fri "17:30:00";
操作已执行
已用时间: 75.151(毫秒). 执行号:981.
--创建允许具体 IP 和具体时间可以访问的用户
SQL> create user t4 identified by t12345678 allow_ip "192.168.10.100" allow_dat
etime "2022-6-21" "8:30:00" to "2022-6-22" "17:30:00";
操作已执行
已用时间: 70.991(毫秒). 执行号:982.
SQL>
2.2.5、修改用户
ALTER USER <用户名> [IDENTIFIED <身份验证模式>][PASSWORD_POLICY <口令策略>][<锁
定子 句>][<存储加密密钥>][<空间限制子句>][<只读标志>][<资源限制子句>][<允许 IP
子句>][<禁止 IP 子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE 子句>][<SCHE
MA 子句>];
例子:
–修改用户的资源属性,登录失败 5 次锁定时间 5 分钟,口令终止前可以使用 30 天,最大宽限时间 30 天,超过只能修改口令,不允许其他操作
SQL> alter user t1 identified by t123456789 limit failed_login_attemps 5, passw
ord_lock_time 5, password_life_time 30, password_grace_time 30;
操作已执行
已用时间: 38.130(毫秒). 执行号:0.
SQL>
--修改用户的默认表空间
SQL> select file_name, tablespace_name from dba_data_files;
行号 FILE_NAME TABLESPACE_NAME
---------- ----------------------------- ---------------
1 +DMDATA/data/dsc/system.dbf SYSTEM
2 +DMDATA/data/dsc/test3_02.dbf TEST3
3 +DMDATA/data/dsc/test3_01.dbf TEST3
4 +DMDATA/data/dsc/DTS_TEST.dbf DTS_TEST
5 +DMDATA/data/dsc/TY.dbf TY
6 +DMDATA/data/dsc/main.dbf MAIN
7 +DMDATA/data/dsc/TEMP0.DBF TEMP
8 +DMDATA/data/dsc/roll.dbf ROLL
8 rows got
已用时间: 16.083(毫秒). 执行号:1.
SQL>
SQL> alter user t1 default tablespace TY default index tablespace TY;
操作已执行
已用时间: 11.345(毫秒). 执行号:2.
SQL>
SQL> select username, user_id, default_tablespace from dba_users where username
in ('T1','T2','T3','T4');
行号 USERNAME USER_ID DEFAULT_TABLESPACE
---------- -------- ----------- ------------------
1 T3 50331753 MAIN
2 T1 50331751 TY
3 T4 50331754 MAIN
4 T2 50331752 MAIN
已用时间: 39.811(毫秒). 执行号:4.
SQL>
2.2.6、删除用户
DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE];
指定 IF EXISTS 关键字后,删除不存在的用户时不会报错,否则会报错。
如果在删除用户时未使用 CASCADE 选项(缺省使用 RESTRICT 选项),若该用户建立
了数据库对象,DM 将返回错误信息,而不删除此用户。
如果在删除用户时使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删
除外,若其他用户创建的对象引用了该用户的对象,DM 还将自动删除相应的引用完整性约
束及依赖关系。
--删除用户 t1
SQL> drop user t1 cascade;
操作已执行
已用时间: 503.633(毫秒). 执行号:5.
社区地址:https://eco.dameng.com