表空间是一个比较重要的逻辑概念,表空间是由物理数据文件组成。在实际的系统中,我们都会为业务用户创建独立的表空间和用户。
创建表空间的语法如下:
CREATE TABLESPACE <表空间名> <数据文件子句>[<数据页缓冲池子句>][<存储加密子句>] <数据文件子句> ::= DATAFILE <文件说明项>{,<文件说明项>} <文件说明项> ::= <文件路径> [ MIRROR <文件路径>] SIZE <文件大小>[<自动扩展子句>] <自动扩展子句> ::= AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句> |OFF> <每次扩展大小子句> ::= NEXT <扩展大小> <最大大小子句> ::= MAXSIZE <文件最大大小> <数据页缓冲池子句> ::= CACHE = <缓冲池名> <存储加密子句> ::= ENCRYPT WITH <加密算法> [[BY] <加密密码>] |
在创建表空间时,通常只需要指定表空间名称,数据文件路径、数据文件大小、其他属性。有几点需要注意:
1) 单个表空间的数据文件数量不能超过256个
2) 达梦数据库最多支持65535个表空间
3) 数据文件的单位是MB,在创建的时候只需要写数字。不需要额外添加单位。数据文件大小取决于页大小。
数据库页大小 | 每个字符类型字段实际最大长度(字节) | 每行记录最大字段外其他字段总长度(字节) | 表空间单个数据文件最小 (MB)/最大 (MB) |
---|---|---|---|
4 KB | 1938 | 2047 | 16/8388608 |
8 KB | 3878 | 4095 | 32/16777216 |
16 KB | 8000 | 8195 | 64/33554432 |
32 KB | 8188 | 16176 | 128/67108864 |
1.创建表空间
SQL> create tablespace tbs_aa datafile '/dm/dmdbms/data/PROD/tbs_aa01.dbf' size 256; 操作已执行 已用时间: 41.303(毫秒). 执行号:306. SQL> SQL> create tablespace tbs_bb datafile '/dm/dmdbms/data/PROD/tbs_bb01.dbf' size 256 ,'/dm/dmdbms/data/PROD/tbs_bb02.dbf' size 256; 操作已执行 已用时间: 26.996(毫秒). 执行号:307. SQL> SQL> SQL> select a.name,b.id,b.path from v$tablespace a, v$datafile b where a.id=b.group_id; 行号 NAME ID PATH ---------- ------------ ----------- ----------------------------------- 1 SYSTEM 0 /dm/dmdata/prod/SYSTEM.DBF 2 TBS_BB 1 /dm/dmdbms/data/PROD/tbs_bb02.dbf 3 TBS_BB 0 /dm/dmdbms/data/PROD/tbs_bb01.dbf 4 TBS_AA 0 /dm/dmdbms/data/PROD/tbs_aa01.dbf 5 TBS_PROD_IDX 0 /dm/dmdbms/data/PROD/idx_prod01.dbf 6 TBS_PROD 0 /dm/dmdbms/data/PROD/tbs_prod01.dbf 7 DMHR 0 /dm/dmdata/prod/DMHR.DBF 8 BOOKSHOP 0 /dm/dmdata/prod/BOOKSHOP.DBF 9 MAIN 0 /dm/dmdata/prod/MAIN.DBF 10 TEMP 0 /dm/dmdata/prod/TEMP.DBF 11 ROLL 0 /dm/dmdata/prod/ROLL.DBF 11 rows got 已用时间: 1.955(毫秒). 执行号:308. SQL> |
可以到看,创建表空间命令可以一次指定2个数据文件。
2.扩张表空间
表空间大小的扩张有两种主要方法:
a) 扩展现有的数据文件大小
b) 增加新的数据文件
为tbs_aa 表空间添加了一个新的数据文件
SQL> SQL> alter tablespace tbs_aa add datafile '/dm/dmdbms/data/PROD/tbs_aa02.dbf' size 256; 操作已执行 已用时间: 14.775(毫秒). 执行号:309. SQL> SQL> SQL> select a.name,b.id,b.path from v$tablespace a, v$datafile b where a.id=b.group_id; 行号 NAME ID PATH ---------- ------------ ----------- ----------------------------------- 1 SYSTEM 0 /dm/dmdata/prod/SYSTEM.DBF 2 TBS_BB 1 /dm/dmdbms/data/PROD/tbs_bb02.dbf 3 TBS_BB 0 /dm/dmdbms/data/PROD/tbs_bb01.dbf 4 TBS_AA 1 /dm/dmdbms/data/PROD/tbs_aa02.dbf 5 TBS_AA 0 /dm/dmdbms/data/PROD/tbs_aa01.dbf 6 TBS_PROD_IDX 0 /dm/dmdbms/data/PROD/idx_prod01.dbf 7 TBS_PROD 0 /dm/dmdbms/data/PROD/tbs_prod01.dbf 8 DMHR 0 /dm/dmdata/prod/DMHR.DBF 9 BOOKSHOP 0 /dm/dmdata/prod/BOOKSHOP.DBF 10 MAIN 0 /dm/dmdata/prod/MAIN.DBF 11 TEMP 0 /dm/dmdata/prod/TEMP.DBF 行号 NAME ID PATH ---------- ---- ----------- ------------------------ 12 ROLL 0 /dm/dmdata/prod/ROLL.DBF 12 rows got 已用时间: 1.204(毫秒). 执行号:310. SQL> |
把数据文件扩大500M
SQL> SQL> alter tablespace tbs_aa resize datafile '/dm/dmdbms/data/PROD/tbs_aa02.dbf' to 500; 操作已执行 已用时间: 8.077(毫秒). 执行号:311. SQL> SQL> SQL> select tablespace_name, file_id, bytes/1024/1024 as "size",file_name from dba_Data_files where tablespace_name='TBS_AA'; 行号 TABLESPACE_NAME FILE_ID size FILE_NAME ---------- --------------- ----------- -------------------- --------------------------------- 1 TBS_AA 0 256 /dm/dmdbms/data/PROD/tbs_aa01.dbf 2 TBS_AA 1 500 /dm/dmdbms/data/PROD/tbs_aa02.dbf 已用时间: 93.597(毫秒). 执行号:312. SQL> SQL> |
3.修改数据文件的扩展属性
表空间默认是自动扩展的,用户可以修改表空间的相应属性。
a) 是否开启自动扩展属性 autoextend
b) 每次扩展的大小,取值范围 0~2048 单位 MB
c) 数据文件最大大小,maxsize <文件限制大小> 单位MB
alter tablespace tbs_aa datafile '/dm/dmdbms/data/PROD/tbs_aa02.dbf' autoextend on next 100 maxsize 20000; |
4.修改表空间名
SQL> SQL> alter tablespace tbs_aa rename to tbs_dm; 操作已执行 已用时间: 3.656(毫秒). 执行号:314. SQL> SQL> select tablespace_name, file_id, bytes/1024/1024 as "size",file_name from dba_Data_files where tablespace_name='TBS_DM'; 行号 TABLESPACE_NAME FILE_ID size FILE_NAME ---------- --------------- ----------- -------------------- --------------------------------- 1 TBS_DM 0 256 /dm/dmdbms/data/PROD/tbs_aa01.dbf 2 TBS_DM 1 500 /dm/dmdbms/data/PROD/tbs_aa02.dbf 已用时间: 3.406(毫秒). 执行号:315. SQL> |
5.移动表空间位置
注意:dm的rename 命令会自动帮你移动数据文件的物理位置,不需要人为的mv操作
SQL> SQL> alter tablespace TBS_DM offline; 操作已执行 已用时间: 123.136(毫秒). 执行号:316. SQL> SQL> SQL> alter tablespace tbs_dm rename datafile '/dm/dmdbms/data/PROD/tbs_aa01.dbf' to '/dm/dmdbms/data/PROD/tbs_aa03.dbf'; 操作已执行 已用时间: 00:00:07.188. 执行号:317. SQL> SQL> alter tablespace TBS_DM online; 操作已执行 已用时间: 3.422(毫秒). 执行号:318. SQL> SQL> |
6.删除表空间
SQL> SQL> drop tablespace tbs_dm; 操作已执行 已用时间: 144.528(毫秒). 执行号:319. SQL> SQL> |
删除后,对应的数据文件也会在操作系统层面删除。