2023年6月21日发(作者:)

达梦数据库学习(四、表空间管理)达梦数据库学习(四、表空间管理)

上期回顾:

⼀、数据库的物理结构和逻辑结构 物理结构: ⽂件系统(XFS、ext4、NTFS、DMASM等 分析场景:⽂件系统(有缓存,易扩展)、裸设备(有缓存,不易扩展) 格式化:mkfs、format、inode、block 逻辑结构: 数据库----表空间(⼀个或多个⽂件构成)----段----簇----页 备注:达梦数据库不⽀持传输表空间(达梦通过导出导⼊的⽅式来实现把⼀个库移到另⼀个库)表空间部分需要掌握的内容: 1、数据库默认表空间的作⽤ SQL>select tablespace_name from dba_tablespaces; ⾏号 TABLESPACE_NAME---------- ---------------1 SYSTEM 系统表空间 存放数据字典2 ROLL 回滚表空间 存放回滚段3 TEMP 临时表空间 临时段4 MAIN 默认表空间

5 BOOKSHOP 某⽰例库表空间6 DMHR 某⽰例库表空间7 HMAIN HUGE表空间 存放列存储 SQL>select tablespace_name,file_name from dba_data_files;

⾏号 TABLESPACE_NAME FILE_NAME

---------- --------------- -----------------------------1 SYSTEM /dm8/data/DAMENG/2 DMHR /dm8/data/DAMENG/3 BOOKSHOP /dm8/data/DAMENG/4 MAIN /dm8/data/DAMENG/5 TEMP /dm8/data/DAMENG/6 ROLL /dm8/data/DAMENG/ SQL>select tablespace_name,BYTES/1024/1024 from dba_free_space; ⾏号 TABLESPACE_NAME BYTES/1024./1024---------- --------------- ----------------1 SYSTEM 17.19531252 DMHR 127.93753 BOOKSHOP 149.10156254 MAIN 127.53906255 TEMP 9.93756 ROLL 118.8828125 2、创建表空间 注意创建表空间中所有⼤⼩单位都是M,且不需要写单位 案例1:规划⼀个表空间TBS1,要求初始⽂件⼤⼩为31M; SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/’ size 31;

出现错误提⽰“数据⽂件⼤⼩⽆效” 为什么呢? SQL>select page;--查看数据库页⼤⼩;

SQL>select 8192*4096/1024/1024;--32M根据页⼤⼩算表空间单个数据⽂件最⼩⼤⼩。这段没弄懂,但是上⽹查询了资料,还是不太懂。所以当页⼤⼩为8K时,对应数据库表空间单个数据⽂件最⼩为32M。 SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/’ size 32;

案例2:创建⼀个表空间TBS2,初始⼤⼩为32M,最⼤⼤⼩1G SQL>create tablespace TBS2 datafile ‘/dm8/data/DAMENG/’ size 32 autoextend on maxsize 1024; 注意其中若设定最⼤⼤⼩的话,则需要增加⾃动扩展参数autoextend on 案例3:创建⼀个表空间TBS3,初始⼤⼩32M,最⼤1G,每次⾃动扩展2M SQL>create tablespace TBS3 datafile ‘/dm8/data/DAMENG/’ size 32 autoextend on next 2 maxsize 1024 案例4:规划表空间TBS4,包含2个数据⽂件,单个⽂件初始值32M,最⼤2G SQL>create tablespace TBS4 datafile ‘/dm8/data./DAMENG/TBS4_’ size 32 autoextend on maxsize2048,’/dm8/data/DAMENG/TBS4_’ size 32 autoextend on maxsize 2048 注意其中最关键的是“,”逗号,两个数据⽂件之间使⽤“,”隔开。 若表空间有多个数据⽂件,则多个数据⽂件是交替使⽤的

此处不是很明⽩交替使⽤的意思,是写⼊⼀个事务数据写在1号数据⽂件,下个事务写在2号数据⽂件中?还是1号数据⽂件空间使⽤完毕后再使⽤2号数据⽂件? 3、维护表空间 表空间的状态:online、offline SQL>select name,status$ from v$tablespace; 其中,0表⽰online,1表⽰offline 状态切换: SQL>alter tablespace TBS4 offline; SQL>alter tablespace TBS4 online; 注意:系统表空间、临时表空间、回滚表空间不能offline

表空间⼤⼩不⾜如何解决 ⼀般遇到的表空间⼤⼩不⾜提⽰为“[-523]:磁盘空间不⾜”,该报错并不⼀定意味着实际物理磁盘空间不⾜,往往都是表空间达到了预设的最⼤⼤⼩。 处理办法:1、 创建⼀个更⼤的表空间,使⽤导出导⼊⽅法将数据迁移2、 Resize数据⽂件⼤⼩(有可能造成单个数据⽂件超⼤)3、 增加数据⽂件(推荐此⽅法)SQL>alter tablespace tbs5 add datafile ‘/dm8/data/DAMENG/tbs5_’ size 32 autoextend on next 2 maxsize 1024;

临时表空间不⾜SQL>select para_name,para_value from v$dm_ini where para_name like ‘%TEMP%’;SQL>sp_set_para_value(2,’TEMP_SIZE’,200);--调整数据库temp表空间⼤⼩200SQL>sp_set_para_value(2,’TEMP_SPACE_LIMIT’,2048);--调整数据库表空间最⼤⼤⼩2048

回滚表空间不⾜SQL>alter tablespace roll add datafile ‘/dm8/data/DAMENG/’ size 32;--增加⼀个回滚表空间数据⽂件>alter tablespace roll resize datafile ‘/dm8/data/DAMENG/’ to 2048;--调整表空间resize to

系统表空间不⾜SQL>alter tablespace system add datafile ‘/dm8/data/DAMENG/’ size 32;--增加⼀个system表空间数据⽂件

表空间更换存储位置(同数据库)SQL>alter tablespace TBS1 offline;--⾸先将表空间离线SQL>alter tablespace TBS1 rename datafile ‘/dm8/data/DAMENG/’ to ‘/dm8/data/tbs1/’;--然后将表空间转移位置,注意该语句会⾃动将实际物理⽂件拷贝⾄新位置

SQL>alter tablesapce TBS1 online;--最后将表空间恢复在线 4、删除表空间SQL>drop tablespace TBS1; 注意:如果表空间存在数据,则不允许直接删除。 如果表空间为空,可以直接删除。 表空间的存储对象:表、索引、全⽂索引、⽤户

2023年6月21日发(作者:)

达梦数据库学习(四、表空间管理)达梦数据库学习(四、表空间管理)

上期回顾:

⼀、数据库的物理结构和逻辑结构 物理结构: ⽂件系统(XFS、ext4、NTFS、DMASM等 分析场景:⽂件系统(有缓存,易扩展)、裸设备(有缓存,不易扩展) 格式化:mkfs、format、inode、block 逻辑结构: 数据库----表空间(⼀个或多个⽂件构成)----段----簇----页 备注:达梦数据库不⽀持传输表空间(达梦通过导出导⼊的⽅式来实现把⼀个库移到另⼀个库)表空间部分需要掌握的内容: 1、数据库默认表空间的作⽤ SQL>select tablespace_name from dba_tablespaces; ⾏号 TABLESPACE_NAME---------- ---------------1 SYSTEM 系统表空间 存放数据字典2 ROLL 回滚表空间 存放回滚段3 TEMP 临时表空间 临时段4 MAIN 默认表空间

5 BOOKSHOP 某⽰例库表空间6 DMHR 某⽰例库表空间7 HMAIN HUGE表空间 存放列存储 SQL>select tablespace_name,file_name from dba_data_files;

⾏号 TABLESPACE_NAME FILE_NAME

---------- --------------- -----------------------------1 SYSTEM /dm8/data/DAMENG/2 DMHR /dm8/data/DAMENG/3 BOOKSHOP /dm8/data/DAMENG/4 MAIN /dm8/data/DAMENG/5 TEMP /dm8/data/DAMENG/6 ROLL /dm8/data/DAMENG/ SQL>select tablespace_name,BYTES/1024/1024 from dba_free_space; ⾏号 TABLESPACE_NAME BYTES/1024./1024---------- --------------- ----------------1 SYSTEM 17.19531252 DMHR 127.93753 BOOKSHOP 149.10156254 MAIN 127.53906255 TEMP 9.93756 ROLL 118.8828125 2、创建表空间 注意创建表空间中所有⼤⼩单位都是M,且不需要写单位 案例1:规划⼀个表空间TBS1,要求初始⽂件⼤⼩为31M; SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/’ size 31;

出现错误提⽰“数据⽂件⼤⼩⽆效” 为什么呢? SQL>select page;--查看数据库页⼤⼩;

SQL>select 8192*4096/1024/1024;--32M根据页⼤⼩算表空间单个数据⽂件最⼩⼤⼩。这段没弄懂,但是上⽹查询了资料,还是不太懂。所以当页⼤⼩为8K时,对应数据库表空间单个数据⽂件最⼩为32M。 SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/’ size 32;

案例2:创建⼀个表空间TBS2,初始⼤⼩为32M,最⼤⼤⼩1G SQL>create tablespace TBS2 datafile ‘/dm8/data/DAMENG/’ size 32 autoextend on maxsize 1024; 注意其中若设定最⼤⼤⼩的话,则需要增加⾃动扩展参数autoextend on 案例3:创建⼀个表空间TBS3,初始⼤⼩32M,最⼤1G,每次⾃动扩展2M SQL>create tablespace TBS3 datafile ‘/dm8/data/DAMENG/’ size 32 autoextend on next 2 maxsize 1024 案例4:规划表空间TBS4,包含2个数据⽂件,单个⽂件初始值32M,最⼤2G SQL>create tablespace TBS4 datafile ‘/dm8/data./DAMENG/TBS4_’ size 32 autoextend on maxsize2048,’/dm8/data/DAMENG/TBS4_’ size 32 autoextend on maxsize 2048 注意其中最关键的是“,”逗号,两个数据⽂件之间使⽤“,”隔开。 若表空间有多个数据⽂件,则多个数据⽂件是交替使⽤的

此处不是很明⽩交替使⽤的意思,是写⼊⼀个事务数据写在1号数据⽂件,下个事务写在2号数据⽂件中?还是1号数据⽂件空间使⽤完毕后再使⽤2号数据⽂件? 3、维护表空间 表空间的状态:online、offline SQL>select name,status$ from v$tablespace; 其中,0表⽰online,1表⽰offline 状态切换: SQL>alter tablespace TBS4 offline; SQL>alter tablespace TBS4 online; 注意:系统表空间、临时表空间、回滚表空间不能offline

表空间⼤⼩不⾜如何解决 ⼀般遇到的表空间⼤⼩不⾜提⽰为“[-523]:磁盘空间不⾜”,该报错并不⼀定意味着实际物理磁盘空间不⾜,往往都是表空间达到了预设的最⼤⼤⼩。 处理办法:1、 创建⼀个更⼤的表空间,使⽤导出导⼊⽅法将数据迁移2、 Resize数据⽂件⼤⼩(有可能造成单个数据⽂件超⼤)3、 增加数据⽂件(推荐此⽅法)SQL>alter tablespace tbs5 add datafile ‘/dm8/data/DAMENG/tbs5_’ size 32 autoextend on next 2 maxsize 1024;

临时表空间不⾜SQL>select para_name,para_value from v$dm_ini where para_name like ‘%TEMP%’;SQL>sp_set_para_value(2,’TEMP_SIZE’,200);--调整数据库temp表空间⼤⼩200SQL>sp_set_para_value(2,’TEMP_SPACE_LIMIT’,2048);--调整数据库表空间最⼤⼤⼩2048

回滚表空间不⾜SQL>alter tablespace roll add datafile ‘/dm8/data/DAMENG/’ size 32;--增加⼀个回滚表空间数据⽂件>alter tablespace roll resize datafile ‘/dm8/data/DAMENG/’ to 2048;--调整表空间resize to

系统表空间不⾜SQL>alter tablespace system add datafile ‘/dm8/data/DAMENG/’ size 32;--增加⼀个system表空间数据⽂件

表空间更换存储位置(同数据库)SQL>alter tablespace TBS1 offline;--⾸先将表空间离线SQL>alter tablespace TBS1 rename datafile ‘/dm8/data/DAMENG/’ to ‘/dm8/data/tbs1/’;--然后将表空间转移位置,注意该语句会⾃动将实际物理⽂件拷贝⾄新位置

SQL>alter tablesapce TBS1 online;--最后将表空间恢复在线 4、删除表空间SQL>drop tablespace TBS1; 注意:如果表空间存在数据,则不允许直接删除。 如果表空间为空,可以直接删除。 表空间的存储对象:表、索引、全⽂索引、⽤户