当前位置:   article > 正文

达梦数据库表空间管理_达梦没有删除表上索引的权限

达梦没有删除表上索引的权限
  1. 表空间管理

提示:

1)表空间管理的命令所涉及的大小的单位都是MB,且命令中不需要加上单位。

2)创建一个表空间最小需要分配32MB(4096*8)的空间,否则将无法创建成功。

DM表空间是对达梦数据库的逻辑划分,一个数据库有多个表空间,一个表空间对应着磁盘上的一个或多个数据文件。从物理存储结构上讲,数据库的对象,如表、视图、索引、序列、存储过程等存储在磁盘的数据文件中 ,从逻辑存储结构上讲,这些数据对象都存储在表空间当中,因此表空间是创建其他数据库对象的基础。

根据表空间的用途不同,表空间又可以细分为基本表空间(数据表空间)、临时表空间、大表空间等。

附加说明:

  1. 创建表空间的用户必须具有DBA权限。
  2. 表空间在服务器中必须唯一。
  3. 一个表空间最多可以拥有256个数据文件。

    1. 数据表空间

简单来说,创建表空间的过程就是在磁盘上创建一个或多个数据文件的过程,这些数据文件被DM数据库管理系统管制和使用,这些数据文件所占用的磁盘存储空间归数据库所有,这些数据文件将用于存储表、视图、索引等内容,这些数据文件可以占据固定的磁盘空间,也可以随着存储数据量的增加而不断扩展。

语法格式:

CREATE TABLESPACE <表空间名> <数据文件子句> [<数据页缓冲池子句>] [<存储加密子句>];

其中,各子句语法如下:

  1. <表空间名>::=指定表空间的名称
  2. <数据文件子句>::=DATAFILE <文件说明项>{,<文件说明项>}
    1. <文件说明项>::=<文件路径>[MIRROR<文件路径>] SIZE <文件大小>[<自动扩展子句>]
    2. <自动扩展子句>::=AUTOEXTEND <ON [<每次扩展大小子句>][<最大大小子句>]|OFF>
    3. <每次扩展大小子句>::=NEXT<扩展大小>
    4. <最大大小子句>::=MAXSIZE<文件最大大小>
  3. <数据页缓冲池子句>::=CACHE=<缓冲池名>,可选项,默认值为NORMAL。
  4. <存储加密子句>::=ENCRYPT WITH <加密算法> BY <加密密码>,可选项,默认不加密。

扩展说明:

  1. <>:表示一个语法对象。
  2. ::=:表示定义符,用来定义一个语法对象。定义符左边为语法对象,右边为相应的语法描述。
  3. |:表示语法选项在实际的语句中只能出现一个。
  4. {}:表示语法选项在实际的语句中可以出现0~N次(N为大于0的自然数)。
  5. []:表示语法选项在实际的语句中可以出现0或1次。

参数说明:

  1. <表空间名>:表空间名称最大长度为128字节。
  2. <文件路径>:指定新生成的数据文件在操作系统下的路径+新数据文件名。数据文件的存储路径符合DM安装路径的规则,且该路径必须是已经存在的。
  3. <MIRROR>:数据库文件镜像,用于在数据文件出现损坏时替代数据文件进行服务。<文件路径>必须是绝对路径,必须在建库时开启页校验的参数page_check。
  4. <文件大小>:整数值,指定新增数据文件的大小(单位为MB),取值为4096*页大小~2147483647*页大小。

提示:在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数据库对删除表空间有严格的限制。

  1. SYSTEM、RLOG、ROLL和TEMP表空间不允许删除。
  2. 删除表空间的用户必须具有DBA权限。
  3. 系统处于SUSPEND或MOUNT状态时不允许删除表空间,系统只有处于OPEN状态下才允许删除表空间。
  4. 如果表空间存放了数据,则不允许删除表空间,如果确实要删除表空间,则必须先删除表空间中的对象。

语法:

drop tablespace tablespace_name;

    1. 大表空间

大表空间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 <表空间路径>;

语法格式中,<表空间路径>是指新创建的表空间在操作系统下的路径。

附加说明:

  1. 表空间中在服务器中必须唯一。
  2. 创建大表空间的用户必须具有DBA权限。
  3. 删除大表空间时,大表空间中必须没有数据才能被删除。

示例:创建两个大表空间,一个名称为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中没有数据才能被删除。

    1. 回滚表空间

相关参数: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;

    1. 临时表空间

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. 表空间等空间大小查询方法

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';

达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心https://eco.dameng.com/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/630282
推荐阅读
相关标签
  

闽ICP备14008679号