金仓数据库KingbaseES表空间定义
金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等。一旦表空间被创建,那么就可以在创建数据库对象时通过名称来引用他。
一个数据库可以有一个或多个表空间,创建数据库时自动创建系统表空间sys_default,作为缺省的默认表空间。一个表空间只能属于一个数据库,只有创建了数据库之后才能创建属于该数据库的表空间。
表空间优缺点
通过使用表空间,数据库管理员可以控制一个KingbaseES数据库安装的磁盘布局。
这么做至少有两个用处。
第一,如果初始化集簇所在的磁盘分区或者卷用光了,而又不能在逻辑上对磁盘进行扩展,那么可以在其他不同的磁盘分区上创建表空间,直到系统可以被重新配置。
第二,表空间允许数据库管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。
缺点是即便是位于主要的KingbaseES数据目录之外,表空间也是数据库集簇的一部分并且不能被视作数据文件的一个自治集合。它们依赖于包含在主数据目录中的元数据,并且因此不能被附加到一个不同的数据库集簇或者单独备份。类似地,如果丢失一个表空间(文件删除、磁盘失效等), 数据库集簇可能会变成不可读或者无法启动。把一个表空间放在一个临时文件系统 (如一个内存虚拟盘)上会给整个集簇带来可靠性的风险。
总体来说表空间在某些特殊情况下是非常好用的,特别是磁盘空间不够的情况下来部署数据库。
备份表空间
如果对具有表空间的数据库执行文件系统备份,则必须备份所有表空间,不能备份或恢复单个表空间。
表空间使用方法总结
数据库创建时会自动创建sys_default和sys_global默认表空间,这两个表空间分别存储在数据路径下的base和global目录,而用户自己创建的表空间则存储在数据路径下的sys_tblspc目录,其实是一个软连接,连接到真正的表空间存储空间。
- 创建表空间目录:在新的分区创建一个新的目录,注意不能是KingbaseES数据库的主目录内。创建的目录隶属于KingbaseES的操作系统系统用户。确切地说,该用户必须具有更改目录权限的权限。所有后续在该表空间中创建的对象都将被存放在这个目录下的文件中。该位置不能放在可移动或者临时存储上,因为如果表空间丢失会导致整个集簇无法工作。表、索引和整个数据库都可以被分配到特定的表空间。
- 创建表空间:
CREATE TABLESPACE newtblsp LOCATION '/tmp/newtblsp';
- 在newtblsp表空间上创建表
:
- CREATE TABLE tab (
- id integer NOT NULL,
- val text NOT NULL
- ) TABLESPACE newtblsp;
- 在newtblsp表空间创建索引,注意如果不指定表空间,索引会创建在默认系统表空间,而不是和表在一起的表空间:
CREATE INDEX tab_val_idx ON tab (val) TABLESPACE newtblsp;
- 更改表的表空间:
- ALTER TABLE tab
- ADD CONSTRAINT tab_pkey PRIMARY KEY (id)
- USING INDEX TABLESPACE newtblsp;
- 在表空间创建数据库:在该数据库中创建的所有对象都将自动放置在数据库的表空间中。
CREATE DATABASE newdb TABLESPACE newtblsp;
- 更改表空间定义和参数
:
- ALTER TABLESPACE oldtblsp RENAME TO newtblsp;
- ALTER TABLESPACE newtblsp OWNER TO { new_owner | CURRENT_USER | SESSION_USER };
- ALTER TABLESPACE newtblsp SET ( tablespace_option = value [, ... ] )
- ALTER TABLESPACE newtblsp RESET ( tablespace_option [, ... ] )
- 要删除一个空的表空间,使用命令:
DROP TABLESPACE newtblsp;
- 表空间限额管理:可以对指定表空间的大小进行限额,一旦超过该限额,对表空间中数据的insert,update,copy to,select into,create index等操作将会终止或者警告。
- SELECT spcname,oid FROM sys_tablespace;
- SELECT set_space_quato(oid, quota);
-
将在旧的表空间数据移动到新的表空间:
- --将旧表空间中的数据移动到新的表空间
- alter table all in tablespace old_tblspc set tablespace new_tblspc;
- --将旧表空间中的索引移动到新的表空间
- alter index all in tablespace old_tblspc set tablespace new_tblspc;
11. 数据库迁移到新机器后,如何修改表空间(此方法非官方推荐方法,可以在测试机测试使用):
需要在数据库目录下的sys_tblspc目录下,重新建立软符号链接到真正的表空间地址,重新启动数据库即可。
符号链接命令: ln -s /data0/tpch_tblspc 16388
【更多人大金仓数据库信息,详见https://help.kingbase.com.cn/】