达梦数据库学习(四、表空间管理)
达梦数据库学习(四、表空间管理)
上期回顾:
一、数据库的物理结构和逻辑结构
物理结构:
文件系统(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/SYSTEM.DBF
2 DMHR /dm8/data/DAMENG/DMHR.DBF
3 BOOKSHOP /dm8/data/DAMENG/BOOKSHOP.DBF
4 MAIN /dm8/data/DAMENG/MAIN.DBF
5 TEMP /dm8/data/DAMENG/TEMP.DBF
6 ROLL /dm8/data/DAMENG/ROLL.DBF
SQL>select tablespace_name,BYTES/1024/1024 from dba_free_space;
行号 TABLESPACE_NAME BYTES/1024./1024
---------- --------------- ----------------
1 SYSTEM 17.1953125
2 DMHR 127.9375
3 BOOKSHOP 149.1015625
4 MAIN 127.5390625
5 TEMP 9.9375
6 ROLL 118.8828125
2、创建表空间
注意创建表空间中所有大小单位都是M,且不需要写单位
案例1:规划一个表空间TBS1,要求初始文件大小为31M;
SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/tbs1.dbf’ size 31;
出现错误提示“数据文件大小无效”
为什么呢?
SQL>select page;--查看数据库页大小;
SQL>select 8192*4096/1024/1024;--32M
根据页大小算表空间单个数据文件最小大小。
这段没弄懂,但是上网查询了资料,还是不太懂。
http://blog.itpub.net/31403259/viewspace-2687231/
所以当页大小为8K时,对应数据库表空间单个数据文件最小为32M。
SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/TBS1.dbf’ size 32;
案例2:创建一个表空间TBS2,初始大小为32M,最大大小1G
SQL>create tablespace TBS2 datafile ‘/dm8/data/DAMENG/TBS2.dbf’ size 32 autoextend on maxsize 1024;
注意其中若设定最大大小的话,则需要增加自动扩展参数autoextend on
案例3:创建一个表空间TBS3,初始大小32M,最大1G,每次自动扩展2M
SQL>create tablespace TBS3 datafile ‘/dm8/data/DAMENG/TBS3.dbf’ size 32 autoextend on next 2 maxsize 1024
案例4:规划表空间TBS4,包含2个数据文件,单个文件初始值32M,最大2G
SQL>create tablespace TBS4 datafile ‘/dm8/data./DAMENG/TBS4_1.dbf’ size 32 autoextend on maxsize 2048,’/dm8/data/DAMENG/TBS4_2.dbf’ 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_3.dbf’ 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表空间大小200
SQL>sp_set_para_value(2,’TEMP_SPACE_LIMIT’,2048);--调整数据库表空间最大大小2048
回滚表空间不足
SQL>alter tablespace roll add datafile ‘/dm8/data/DAMENG/roll1.dbf’ size 32;
--增加一个回滚表空间数据文件roll1.dbf
SQL>alter tablespace roll resize datafile ‘/dm8/data/DAMENG/roll1.dbf’ to 2048;
--调整表空间resize to
系统表空间不足
SQL>alter tablespace system add datafile ‘/dm8/data/DAMENG/system1.dbf’ size 32;
--增加一个system表空间数据文件system1.dbf
表空间更换存储位置(同数据库)
SQL>alter tablespace TBS1 offline;
--首先将表空间离线
SQL>alter tablespace TBS1 rename datafile ‘/dm8/data/DAMENG/TBS1.dbf’ to ‘/dm8/data/tbs1/TBS1.dbf’;
--然后将表空间转移位置,注意该语句会自动将实际物理文件拷贝至新位置
SQL>alter tablesapce TBS1 online;
--最后将表空间恢复在线
4、删除表空间
SQL>drop tablespace TBS1;
注意:
如果表空间存在数据,则不允许直接删除。
如果表空间为空,可以直接删除。
表空间的存储对象:表、索引、全文索引、用户