达梦数据库基础操作(二):表空间操作
1. 表空间操作
1.1 达梦表空间介绍
-
表空间的概念:
每个DM 数据库都是由一个或者多个表空间组成,表空间是一个逻辑的存储容器,它位于逻辑结构的顶层,用于存储数据库中的所有数据,表空间的数据被物理存放在数据文件中,一个表空可以包含一个或多个文件。也就是说表空是逻辑的概念我们可以把它理解为(容器)里面可以存放数据文件、表、索引等。
DM8 的逻辑架构为表空间- 段- 簇(相当于oracle 的区)- 页(相当于oracle 的块)。
# 可以通过命令查看系统内所有表空间的名字。
# 注意:SYSTEM 、ROLL 、TEMP 不能手动创建。
SQL> select tablespace_name from dba_tablespaces;
1)SYSTEM表空间:系统表空间,存放的是数据库的关键性的信息,例如:数据字典和动态性能视图。
2)ROLL表空间: 回滚表空间,存放的是数据库的回滚记录。MVCC(事务多版本机制),消除行锁,回滚段,保 留时长(undo_retention 支持毫秒)
3)TEMP表空间 ,临时表空间,创建的临时表,存放的是临时的信息
4)MAIN表空间:默认表空间,达梦默认的表空间,创建用户时**不指定表空间,就为该默认表空间。**之后数据就存放在此表空间。
5)HMAIN表空间 :**HUGE 表空间(**Huge file system(hfs):是达梦数据库实现的,针对海量数据进行分析的 一种高效、简单的列存储机制,列存储表(huge)就是建立在 hfs 上的。 HUGE 表建立在自己特有的表空间(huge 空间),v$huge_tablespace 中,最多可以创建 32767 个 hugeg 表空间。 如果不指定 huge 表空间,默认放在 HMAIN 表空间中。 )
- 使用表空间的优点:
Ø 能够隔离用户数据和数据字典,减少对system 表空间的I/O 争用;
Ø 可以把不同表空间的数据文件存储在不同的磁盘上,把负载均衡分布到各个磁盘上减少I/O 争用;
Ø 隔离来自不同应用程序的数据,能够执行基于表空间的备份和恢复同时可以避免一个应用程序的表空间脱机而影响其他应用程序的运行;
1.2 表空间操作
1.2.0 查看表空间
# 可以通过命令查看系统内所有表空间的名字。
SQL> select tablespace_name from dba_tablespaces;查询表空间及其所属用户和数据文件路径
SQL> select username,user_id,default_tablespace,profile from dba_users;
1.2.1 表空间创建
- 格式:
create tablespace 表空间名 datafile 数据文件路径 size 数据文件初始大小 autoextend on maxsize 最大值
-----仅指定数据文件路径,以及数据文件初始
大小,单位为(MB)
-----注意大小仅为数字,不能带M符号
create tablespace tbs1 datafile ‘/dm7/data/DAMENG/tbs01.dbf’ size 32;
注意: DM8 建立初始化数据文件大小时有一个硬性规定,那就是数据文件的初始化大小一定要是页大小的4096 倍否则就会报错。
# 案例1:创建一个表空间,初始大小50M, 最大1024M
SQL> create tablespace chkproof datafile '/dm8/data/MBWS/chkproof_01.dbf' size 50 autoextend on next 1 maxsize 1024;
# 案例2:创建一个表空间,初始大小50M, 表空间由2个数据文件组成,分别存储在不同的磁盘上,每次扩展1M, 每个数据文件最大100M
SQL> create tablespace tbs2 datafile ‘/dm8/disk1/tbs2_01.dbf’ size 50 autoextend on next 1 maxsize 100,’/dm8/disk2/tbs4_02.dbf’ size 50 autoextend on next 1 maxsize 100;
-
注意:
达梦数据库创建表空间报错-2401数据文件dbf大小无效
报错:-2401数据文件dbf大小无效
表空间的大小和数据库的初始参数有关系
页大小为8K 表空间大小至少为40968K=32M
页大小为16K 表空间大小至少为409616K=64M 以此类推然后将以上语句size 50 改成size 256就可以执行了
-
查看页大小
# 使用这个命令可以找到我们在配置数据库实例时多选的页大小参数,注意此参数显示单位为字节在换算时我们需要将此参数转化为KB 进行计算。 SQL> select page; # 这样我们就得到了在页大小为8KB 的情况下,数据文件的初始化大小的最小参数值。 # 注意:不是说得到了这个大小就必须按照这个大小来设置,只是不能比这个参数小,只要比这个参数大任何初始化值都是可以的。 SQL> select 4096*8/1024
1.2.2 删除表空间(表空间存在数据,不允许直接删除)
# 第一种是表空间没有任何对象,这样的情况下我们可以直接删除
SQL> drop tablespace tbs1;
# 第二种情况就是表空间在有数据的情况下进行删除
# 直接删除是不会删除的,必须先删除数据
SQL> drop tablespace tbs1;
1.2.3 扩展表空间
# 创建达标空间,数据库导入导出
# resize 表空间数据文件的大小 (所有的数据文件大小都应该一致,修改其中一个,另外的都要更改)
alter tablespace tbs1 resize datafile '/dm7/data/DAMENG/tbs01.dbf' to 256;# 增加数据文件(表空间大小不足的解决办法)
alter tablespace tbs1 add datafile ‘/dm7/data/DAMENG/tbs02.dbf’ size 50 autoextend on next 1 maxsize 100;
1.2.4 更改表空间的数据文件路径
# 查询表空间的数据文件存储位置
select file_name,tablespace_name from dba_data_files;
# 查询表空间的状态(0---Online 1---offline)更改为离线
Select tablespace_name,status from dba_tablespaces;
# 更改文件位置
alter tablespace tbs1 rename datafile '/dm7/data/DAMENG/tbs01.dbf' to '/dm7/disk1/tbs01.dbf';
1.2.5 表空间状态
表空间的状态分为online offline (system 、roll 、temp 不能脱机)
# 注意达梦数据库的表空间没有只读的概念。
# 更改test表空间为离线状态
SQL> alter tablespace test offline;
# 查看表空间的状态
SQL> select tablespace_name,status from dba_tablespaces;
1.2.6 表空间大小不足的解决办法
-
普通表空间增加数据文件
SQL> alter tablespace test add datafile ‘/dm8/data/DAMENG/test02.dbf’ size 50 autoextend on next 1 maxsize 100;
-
临时表空间大小不足
# 查看一下临时表空间的默认信息。临时表空间的数据文件默认的大小是10 单位是MB 。 SQL> select para_name,para_value from v$dm_ini where para_name like '%TEMP%'; # 修改临时表空间大小 SQL> sp_set_para_value(2,'TEMP_SIZE',100);
-
回滚表空间不足
# 更改数据文件大小 SQL> alter tablespace roll resize datafile '/dm8/dm1/DAMENG/ROLL.DBF' to 2048; # 添加数据文件 SQL> alter tablespace roll add datafile ‘/dm8/dm1/DAMENG/ROLL01.DBF’ size 1024;
1.2.7 修改用户默认表空间
# 修改用户默认表空间,修改后所指定的表空间必须先被创建
alter user "dmtest" default tablespace "testone" ;