签到成功

知道了

CNDBA社区CNDBA社区

DM7 达梦数据库 表空间 管理 说明

2019-08-26 23:48 1657 0 原创 DM 达梦
作者: Dave

在之前DM7 的逻辑结构中,我们了解到了表空间的概念:

https://www.cndba.cn/dave/article/3569

DM7 达梦数据库的逻辑结构
https://www.cndba.cn/dave/article/3568https://www.cndba.cn/dave/article/3569

在DM7中,逻辑关系如下:

https://www.cndba.cn/dave/article/3569

页(4k/8k/16k/32k)—>簇(16或32个连续的页)—>段(表段/索引段:N个簇)

https://www.cndba.cn/dave/article/3569

这些页就是在数据文件上分配的空间,数据文件的集合就是表空间。所以表空间一个逻辑的概念。 本篇我们继续来学习DM 表空间的管理。

1理论说明

1.1 创建表空间

语法格式:

https://www.cndba.cn/dave/article/3569

CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>]
<数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>}
<文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>]
<自动扩展子句> ::= AUTOEXTEND ][<最大大小子句> |OFF>
<每次扩展大小子句> ::= NEXT <扩展大小> <最大大小子句> ::= MAXSIZE <文件最大大小> <数据页缓冲池子句> ::= CACHE = <缓冲池名> <存储加密子句> ::= ENCRYPT WITH <加密算法> [[BY] <加密密码>]

参数说明:

  1. <表空间名> 表空间的名称,表空间名称最大长度 128 字节;
  2. <文件路径> 指明新生成的数据文件在操作系统下的路径+新数据文件名。数据文件的存放路径符合 DM 安装路径的规则,且该路径必须是已经存在的;
  3. MIRROR 数据文件镜像,用于在数据文件出现损坏时替代数据文件进行服务。MIRROR 数据文件的<文件路径>必须是绝对路径。MIRROR 要使用数据文件镜像,必须在建库时开启页校验的参数 page_check。
  4. <文件大小> 整数值,指明新增数据文件的大小(单位 MB),取值范围 4096页大小~2147483647页大小;这里按默认的8k页计算,单个数据文件最小是32M,最大值约16T。
  5. <缓冲池名> 系统数据页缓冲池名 NORMAL 或 KEEP。缓冲池名 KEEP 是达梦的保留关键字,使用时必须加双引号;
  6. <加密算法> 可通过查看动态视图 V$CIPHERS 获取算法名;
  7. <加密密码> 最大长度 128 字节,若未指定,由 DM 随机生成。

注意事项:

  1. 表空间名在服务器中必须唯一;
  2. 一个表空间中,数据文件和镜像文件一起不能超过 256 个;
  3. DM 7中理论上最多允许有 65535 个表空间,但用户允许创建的表空间 ID 取值范围为0~32767,超过 32767 的只允许系统使用,ID 由系统自动分配,ID 不能重复使用,即使删除掉已有表空间,也无法重复使用已用 ID 号,也就是说只要创建 32768 次表空间后,用户将无法再创建表空间。
  4. 如果全库已经加密,就不再支持表空间加密。

1.2 修改表空间

语法格式:

ALTER TABLESPACE <表空间名> [ONLINE|OFFLINE|CORRUPT|<表空间重命名子句>|<数据
文件重命名子句>|<增加数据文件子句>|<修改文件大小子句>|<修改文件自动扩展子句>|<数据页缓冲
池子句><表空间重命名子句> ::= RENAME TO <表空间名> <数据文件重命名子句>::= RENAME DATAFILE <文件路径>{,<文件路径>} TO <文件路径>{,<
文件路径>}
<增加数据文件子句> ::= ADD <数据文件子句> <数据文件子句>见上一节表空间定义语句
<修改文件大小子句> ::= RESIZE DATAFILE <文件路径> TO <文件大小> <修改文件自动扩展子句> ::= DATAFILE <文件路径>{,<文件路径>}[<自动扩展子句>]

参数说明:https://www.cndba.cn/dave/article/3569

  1. <表空间名> 表空间的名称;
  2. <文件路径> 指明数据文件在操作系统下的路径+新数据文件名。数据文件的存
    放路径符合 DM 安装路径的规则,且该路径必须是已经存在的;
  3. <文件大小> 整数值,指明新增数据文件的大小(单位 MB);
  4. <缓冲池名> 系统数据页缓冲池名 NORMAL 或 KEEP。

注意事项:

  1. 不论 dm.ini 的 DDL_AUTO_COMMIT 设置为自动提交还是非自动提交,ALTER TABLESPACE 操作都会被自动提交;
  2. 修改表空间数据文件大小时,其大小必须大于自身大小;
  3. 如果表空间有未提交事务时,表空间不能修改为 OFFLINE 状态;
  4. 重命名表空间数据文件时,表空间必须处于 OFFLINE 状态,修改成功后再将表空间修改为 ONLINE 状态;
  5. 表空间如果发生损坏(表空间还原失败,或者数据文件丢失或损坏)的情况下,允许将表空间切换为 CORRUPT 状态,并删除损坏的表空间,如果表空间上定义有对象,需要先将所有对象删除,再删除表空间。

1.3 删除表空间

语法格式

DROP TABLESPACE <表空间名>https://www.cndba.cn/dave/article/3569

注意事项:

  1. SYSTEM、RLOG、ROLL 和 TEMP 表空间不允许删除;
  2. 系统处于 SUSPEND 或 MOUNT 状态时不允许删除表空间,系统只有处于 OPEN 状态下才允许删除表空间。

2 操作示例

2.1 创建表空间

#查看现有表空间:
SQL> select tablespace_name from dba_tablespaces;

行号     TABLESPACE_NAME
---------- ---------------
1          SYSTEM
2          ROLL
3          TEMP
4          MAIN
5          BOOKSHOP
6          DMHR
7          HMAIN

7 rows got

#查看数据文件:
SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号     TABLESPACE_NAME FILE_NAME                          STATUS   
---------- --------------- ---------------------------------- ---------
1          BOOKSHOP        /dm/dmdbms/data/cndba/BOOKSHOP.DBF AVAILABLE
2          DMHR            /dm/dmdbms/data/cndba/DMHR.DBF     AVAILABLE
3          MAIN            /dm/dmdbms/data/cndba/MAIN.DBF     AVAILABLE
4          ROLL            /dm/dmdbms/data/cndba/ROLL.DBF     AVAILABLE
5          SYSTEM          /dm/dmdbms/data/cndba/SYSTEM.DBF   AVAILABLE
6          TEMP            /dm/dmdbms/data/cndba/TEMP.DBF     AVAILABLE

6 rows got


#创建表空间dave:有2个32M的数据文件:
SQL> create tablespace dave datafile '/dm/dmdbms/data/cndba/DAVE01.DBF' size 32, '/dm/dmdbms/data/cndba/DAVE02.DBF' size 32;

SQL> select tablespace_name, file_name, status from dba_data_files order by 1;

行号     TABLESPACE_NAME FILE_NAME                          STATUS   
---------- --------------- ---------------------------------- ---------
1          BOOKSHOP        /dm/dmdbms/data/cndba/BOOKSHOP.DBF AVAILABLE
2          DAVE            /dm/dmdbms/data/cndba/DAVE02.DBF   AVAILABLE
3          DAVE            /dm/dmdbms/data/cndba/DAVE01.DBF   AVAILABLE
4          DMHR            /dm/dmdbms/data/cndba/DMHR.DBF     AVAILABLE
5          MAIN            /dm/dmdbms/data/cndba/MAIN.DBF     AVAILABLE
6          ROLL            /dm/dmdbms/data/cndba/ROLL.DBF     AVAILABLE
7          SYSTEM          /dm/dmdbms/data/cndba/SYSTEM.DBF   AVAILABLE
8          TEMP            /dm/dmdbms/data/cndba/TEMP.DBF     AVAILABLE

8 rows got

2.2 扩展表空间

表空间的扩展有两种方式:

1)扩展现有数据文件大小
2)增加新的数据文件https://www.cndba.cn/dave/article/3569

#添加数据文件
SQL> alter tablespace dave add datafile '/dm/dmdbms/data/cndba/DAVE03.DBF' size 32;
操作已执行
已用时间: 14.224(毫秒). 执行号:2136.
SQL> select tablespace_name,file_id,bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE';

行号     TABLESPACE_NAME FILE_ID     size                 FILE_NAME                       
---------- --------------- ----------- -------------------- --------------------------------
1          DAVE            0           32                   /dm/dmdbms/data/cndba/DAVE01.DBF
2          DAVE            2           32                   /dm/dmdbms/data/cndba/DAVE03.DBF
3          DAVE            1           32                   /dm/dmdbms/data/cndba/DAVE02.DBF

已用时间: 10.822(毫秒). 执行号:2141.

#扩展现有数据文件的大小:
SQL> alter tablespace dave resize datafile '/dm/dmdbms/data/cndba/DAVE01.DBF' to 64;
操作已执行
已用时间: 13.610(毫秒). 执行号:2142.
SQL> 
SQL> select tablespace_name,file_id,bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE';

行号     TABLESPACE_NAME FILE_ID     size                 FILE_NAME                       
---------- --------------- ----------- -------------------- --------------------------------
1          DAVE            0           64                   /dm/dmdbms/data/cndba/DAVE01.DBF
2          DAVE            2           32                   /dm/dmdbms/data/cndba/DAVE03.DBF
3          DAVE            1           32                   /dm/dmdbms/data/cndba/DAVE02.DBF

已用时间: 3.943(毫秒). 执行号:2143.

2.3 修改数据文件的扩展属性

子句的语法为:

AUTOEXTEND OFF|ON [NEXT <文件扩展大小>] [MAXSIZE <文件限制大小>]
OFF 表示文件不可扩展,ON 表示文件可扩展。
文件扩展大小表示当需要扩展文件时,文件一次增大的空间大小,取值范围是 0—2048,单位是 M。
文件限制大小表示文件可扩展的最大空间大小,为 0 或者 UNLIMITED 表示无限制,单位是 M。
缺省情况下,文件扩展大小是 1M,文件的最大大小是无限制的。https://www.cndba.cn/dave/article/3569

#创建表空间时可指定文件的扩展属性。
SQL> create tablespace cndba datafile '/dm/dmdbms/data/cndba/CNDBA01.DBF' size 32 autoextend on next 10 maxsize 200;
操作已执行
已用时间: 38.032(毫秒). 执行号:2160.

2.4 修改表空间名

可修改已存在的由用户创建的表空间的名称。

SQL> alter tablespace cndba rename to dave;
操作已执行
已用时间: 12.583(毫秒). 执行号:2161.
SQL> select tablespace_name,file_id,bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE';

行号     TABLESPACE_NAME FILE_ID     size                 FILE_NAME                        
---------- --------------- ----------- -------------------- ---------------------------------
1          DAVE            0           32                   /dm/dmdbms/data/cndba/CNDBA01.DBF

已用时间: 11.746(毫秒). 执行号:2162.
SQL>

2.5 修改表空间状态及移动数据文件

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

在脱机状态下,还可以修改数据文件的位置。

SQL> alter tablespace dave offline;
操作已执行
已用时间: 107.630(毫秒). 执行号:2163.
SQL> alter tablespace dave rename datafile '/dm/dmdbms/data/cndba/CNDBA01.DBF' TO '/dm/dmdbms/data/CNDBA01.DBF';
操作已执行
已用时间: 102.355(毫秒). 执行号:2164.
SQL> alter tablespace dave online;
操作已执行
已用时间: 8.128(毫秒). 执行号:2165.
SQL> select tablespace_name,file_id,bytes/1024/1023 as "size",file_name from dba_data_files where tablespace_name='DAVE';

行号     TABLESPACE_NAME FILE_ID     size                 FILE_NAME                  
---------- --------------- ----------- -------------------- ---------------------------
1          DAVE            0           32                   /dm/dmdbms/data/CNDBA01.DBF

已用时间: 4.322(毫秒). 执行号:2166.

注意这里的移动是操作系统物理的上移动,这种特性Oracle 直到12c以后才支持:https://www.cndba.cn/dave/article/3569

[dave@www.cndba.cn cndba]$ cd /dm/dmdbms/data/
[dave@www.cndba.cn data]$ ls
cndba  CNDBA01.DBF
[dave@www.cndba.cn data]$ cd cndba/
[dave@www.cndba.cn cndba]$ ls CN*
ls: 无法访问CN*: 没有那个文件或目录
[dave@www.cndba.cn cndba]$

2.6 修改表空间数据缓冲区

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

SQL> alter tablespace dave cache= "KEEP";
操作已执行
已用时间: 11.701(毫秒). 执行号:2167.

2.7 标记表空间为CORRUPT 状态

修改表空间为 CORRUPT 状态,注意只有在表空间处于 OFFLINE 状态或表空间损坏的情况下才允许使用。

SQL> alter tablespace dave corrupt;
alter tablespace dave corrupt;
第1 行附近出现错误[-3440]:表空间[DAVE]不允许切换CORRUPT状态.
已用时间: 0.750(毫秒). 执行号:0.
SQL> alter tablespace dave offline;
操作已执行
已用时间: 96.442(毫秒). 执行号:2168.
SQL> alter tablespace dave corrupt;
操作已执行
已用时间: 11.183(毫秒). 执行号:2169.
SQL> 

SQL>  select name,cache,status$ from v$tablespace where name='DAVE';

行号     NAME CACHE STATUS$    
---------- ---- ----- -----------
1          DAVE KEEP  3

已用时间: 1.880(毫秒). 执行号:2175.

这里的状态有4种值:
0 ONLINE,
1 OFFLINE,
2 RES_OFFLINE 
3 CORRUPT

2.8 删除表空间

只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。例如删除 bookshop 表空间。

SQL> drop tablespace dave;
操作已执行
已用时间: 517.283(毫秒). 执行号:2159.
SQL>

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Dave

Dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 1835
    原创
  • 2
    翻译
  • 423
    转载
  • 123
    评论
  • 访问:3272676次
  • 积分:2903
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by ZhiXinTech · 皖ICP备19020168号·

        QQ交流群