赞
踩
提示:
1)表空间管理的命令所涉及的大小的单位都是MB,且命令中不需要加上单位。
2)创建一个表空间最小需要分配32MB(4096*8)的空间,否则将无法创建成功。
DM表空间是对达梦数据库的逻辑划分,一个数据库有多个表空间,一个表空间对应着磁盘上的一个或多个数据文件。从物理存储结构上讲,数据库的对象,如表、视图、索引、序列、存储过程等存储在磁盘的数据文件中 ,从逻辑存储结构上讲,这些数据对象都存储在表空间当中,因此表空间是创建其他数据库对象的基础。
根据表空间的用途不同,表空间又可以细分为基本表空间(数据表空间)、临时表空间、大表空间等。
附加说明:
简单来说,创建表空间的过程就是在磁盘上创建一个或多个数据文件的过程,这些数据文件被DM数据库管理系统管制和使用,这些数据文件所占用的磁盘存储空间归数据库所有,这些数据文件将用于存储表、视图、索引等内容,这些数据文件可以占据固定的磁盘空间,也可以随着存储数据量的增加而不断扩展。
语法格式:
CREATE TABLESPACE <表空间名> <数据文件子句> [<数据页缓冲池子句>] [<存储加密子句>];
其中,各子句语法如下:
扩展说明:
参数说明:
提示:在SQL语句书写过程中,标点符号均为英文标点符号,关键字通常大写,语法对象通常小写。文件大小的默认单位为MB,在命令中只写数据文件大小的阿拉伯数据即可,不需要带单位。
创建表空间:
create tablespace tbs datafile '/dm/dmdb/tbs01.dbf' size 30720 autoextend off; #30GB
create tablespace tbs datafile '/dm/dmdb/tbs01.dbf' size 30720 autoextend off,'/dm/dmdb/tbs02.dbf' size 30720 autoextend off; #创建tbs表空间,同时指定两个数据文件。
create tablespace tbs datafile '/dm/dmdb/tbs01.dbf' size 5120 autoextend on next 100 maxsize 30720;
查看表空间的状态:
select name,status$ from v$tablespace;
表空间在线/离线:
alter tablespace tbs online/offline; #如果表空间有未提交的事务,表空间不能修改为offline状态。
重命名表空间:
alter tablepace tbs rename to tbs02;
修改表空间的缓冲区类别:
alter tablespace tbs cache="KEEP"; #注意:KEEP要大写,并加上双引号
删除表空间:
由于表空间中存储了表、视图、索引等数据对象,删除表空间必然会带来数据损失,所以DM数据库对删除表空间有严格的限制。
语法:
drop tablespace tablespace_name;
大表空间HTS(Huge Table Space),HTS表空间是专门用来存放HFS(Huge File System)表的,如果不创建HTS表空间,就只能使用系统表空间HMAIN。为了尽量少使用系统表空间HMAN,通常需要另外创建大表空间。
HTS表空间ID取值为0~32767,ID由系统自动分配,ID不能重复使用,即使删除已有的HTS表空间,也无法重复使用已使用过的ID,也就是说,创建32768次HTS表空间后,就无法再创建HTS表空间了。
HTS表空间与普通的表空间不同,普通的表空间,数据是通过段、簇、页来管理的,并且以固定大小(4KB、8KB、16KB、32KB)的页面为管理单位;而HTS表空间相当于一个简单的文件系统,创建一个HTS,其实就是创建一个空的目录(系统中有一个默认HTS,目录名为HMAN),HTS表空间的相关信息存储在动态视图v$huge_tablespace中。
语法:
SQL> CREATE HUGE TABLESPACE <表空间名> PATH <表空间路径>;
语法格式中,<表空间路径>是指新创建的表空间在操作系统下的路径。
附加说明:
示例:创建两个大表空间,一个名称为HTS0路径为/dm/dmdb/hts0,另一个名称为HTS1,路径为/dm/dmdb/hts1
create huge tablespace hts0 path '/dm/dmdb/hts0';
create huge tablespace hts1 path '/dm/dmdb/hts1';
删除大表空间:
如果大表空间没有被使用,那么这个大表空间可以被删除。
语法:
drop huge tablespace hts0; #大表空间hts0中没有数据才能被删除。
相关参数:undo_retention
回滚表空间大小的单位:页
select para_name,para_value from v$dm_ini where para_name like '%ROLL%';
创建回滚表空间:
create tablespace roll datafile '/dm/dmdata/dmdb/roll01.dbf' size 10240;
回滚表空间添加数据文件:
alter tablespace roll add datafile '/dm/dmdata/dmdb/roll02.dbf' size 10240;
resize回滚表空间数据文件的大小:
alter tablespace roll resize datafile '/dm/dmdata/dmdb/roll02.dbf' to 20480;
select para_name,para_value from v$dm_ini where para_name like '%TEMP%';
修改临时表空间的大小:
sp_set_para_value(2,'TEMP_SIZE',1024);
alter tablespace temp resize datafile '/dm8/data/dmdb/TEMP.DBF' to 1024;
1、查看所有表空间大小及其使用情况
SELECT F.TABLESPACE_NAME,
round(T.TOTAL_SPACE / 1024,2) "TOTAL(GB)",
round((T.TOTAL_SPACE - F.FREE_SPACE) / 1024,2) "USED (GB)",
round(F.FREE_SPACE / 1024,2) "FREE (GB)",
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% ' PER_FREE
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(SELECT PARA_VALUE / 1024
FROM V$DM_INI
WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
2、查看指定表空间大小及其使用情况,如查看DMHR开头的表空间大小及其使用情况
SELECT F.TABLESPACE_NAME,
(T.TOTAL_SPACE - F.FREE_SPACE) / 1024 "USED (GB)",
F.FREE_SPACE / 1024 "FREE (GB)",
T.TOTAL_SPACE / 1024 "TOTAL(GB)",
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% ' PER_FREE
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(SELECT PARA_VALUE / 1024
FROM V$DM_INI
WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME AND T.TABLESPACE_NAME LIKE 'DMHR%';
3、查看指定用户占用的空间大小,如查看SYSDBA用户占用的空间大小
SELECT USER_USED_SPACE('SYSDBA') * PARA_VALUE / 1024 / 1024 "USER_USED_SPACE(MB)"
FROM V$DM_INI
WHERE PARA_NAME LIKE 'GLOBAL_PAGE_SIZE';
4、查看指定表占用的空间大小,如查看DMHR用户下CITY表占用的空间大小
SELECT TABLE_USED_PAGES('DMHR', 'CITY') * PARA_VALUE / 1024 / 1024 "USER_USED_SPACE(MB)"
FROM V$DM_INI
WHERE PARA_NAME LIKE 'GLOBAL_PAGE_SIZE';
5、查看指定表已使用的空间大小,如查看DMHR用户下CITY表已使用的空间大小
SELECT TABLE_USED_SPACE('DMHR', 'CITY') * PARA_VALUE / 1024 / 1024 "USER_USED_SPACE(MB)"
FROM V$DM_INI
WHERE PARA_NAME LIKE 'GLOBAL_PAGE_SIZE';
6、查看指定索引占用的空间大小,如查看DMHR用户下EMPLOYEE表已上的索引INDEX33555541占用的空间大小,达梦数据库查询索引空间占用是以索引的ID为传入参数,可以通过以下SQL查询索引的ID
SELECT NAME, ID
FROM SYSOBJECTS
WHERE NAME IN (SELECT INDEX_NAME
FROM DBA_INDEXES
WHERE OWNER = 'DMHR'
AND TABLE_NAME = 'EMPLOYEE')
AND INDEX_NAME = 'INDEX33555541';
然后根据上面查到的ID来查询对应的索引占用的空间大小
SELECT INDEX_USED_PAGES(33555524) * PARA_VALUE / 1024 / 1024 "USER_USED_SPACE(MB)"
FROM V$DM_INI
WHERE PARA_NAME LIKE 'GLOBAL_PAGE_SIZE';
7、查看指定索引已使用的空间大小,如查看DMHR用户下EMPLOYEE表已上的索引INDEX33555541使用的空间大小,达梦数据库查询索引空间占用是以索引的ID为传入参数,可以通过以下SQL查询索引的ID
SELECT NAME, ID
FROM SYSOBJECTS
WHERE NAME IN (SELECT INDEX_NAME
FROM DBA_INDEXES
WHERE OWNER = 'DMHR'
AND TABLE_NAME = 'EMPLOYEE')
AND INDEX_NAME = 'INDEX33555541';
然后根据上面查到的ID来查询对应的索引使用的空间大小
SELECT INDEX_USED_SPACE(33555524) * PARA_VALUE / 1024 / 1024 "USER_USED_SPACE(MB)"
FROM V$DM_INI
WHERE PARA_NAME LIKE 'GLOBAL_PAGE_SIZE';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。