自定义表空间的作用

使用多个表空间可以更灵活地执行数据库操作。当数据库具有多个表空间时,您可以:

1、将用户数据与系统表数据分开存储在不同性能的存储上,以减少I/O争用。

2、将一个应用程序的数据与另一个应用程序的数据分开,以防止在必须使表空间脱机时多个应用程序受到影响。

3、将不同表空间的数据文件存储在不同的磁盘驱动器上,以减少I/O争用。

4、使单个表空间脱机,而其他表空间保持联机状态,从而提供更好的整体可用性。

5、方便备份单个表空间。

表空间与数据库,schema,表的逻辑对应关系

表空间是实际存储数据的地方,一个schema对应多个表空间,一个表空间也可以对应多个schema。

我们可以创建数据库时候指定表空间和owner。这说明表空间的逻辑存储架构是在数据库和schema之上的,他们是包含的关系。

一个表空间可以存储多个数据库,稍后在表空间目录结构中我们可以看出他们之间的关系。

创建完数据库后,也可以通过ALTER DATABASE name SET TABLESPACE new_tablespace 语法更改数据库指定默认表空间为自定义表空间。

\l+ 可以查看数据库对应的表空间名。操作系统上自定义表空间目录的物理结构也可以看出其关系,进入自定义表空间目录,对应的是数据库目录,进入数据库目录对应的是表的relfilenode。

如下,ttspace是自定义表空间。

TEST=# \db
List of tablespaces
Name | Owner | Location
-------------+--------+--------------------------
sys_default | system |
sys_global | system |
sysaudit | system |
ttspace | system | /home/kingbase7/tbl_user
(4 rows)

如下,tbl_user是表空间目录,12145是数据库oid,进入数据库目录,里面存储的数据库对象是表的relfilenode。

[kingbase7@localhost ~]$ cd tbl_user/
[kingbase7@localhost tbl_user]$ cd SYS_12_202209081/
[kingbase7@localhost SYS_12_202209081]$ ll
total 0
drwx------ 2 kingbase7 kingbase7 126 Aug 16 16:47 12145
[kingbase7@localhost SYS_12_202209081]$ cd 12145/
[kingbase7@localhost 12145]$ ll
total 136
-rw------- 1 kingbase7 kingbase7 73728 Aug 16 16:27 109295
-rw------- 1 kingbase7 kingbase7 24576 Aug 16 16:27 109295_fsm
-rw------- 1 kingbase7 kingbase7 0 Aug 16 16:27 109296
-rw------- 1 kingbase7 kingbase7 8192 Aug 16 16:27 109297
-rw------- 1 kingbase7 kingbase7 8192 Aug 16 16:44 109298
-rw------- 1 kingbase7 kingbase7 0 Aug 16 16:44 109299
-rw------- 1 kingbase7 kingbase7 8192 Aug 16 16:44 109300
-rw------- 1 kingbase7 kingbase7 8192 Aug 16 16:47 109301
-rw------- 1 kingbase7 kingbase7 8192 Jul 14 15:19 92835

更改表的默认表空间为自定义表空间

alter table 语法

ALTER TABLE ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]

SET TABLESPACE new_tablespace [ NOWAIT ]

TEST=# select * from sys_tablespace ;
oid | spcname | spcowner | spcacl | spcoptions
-------+-------------+----------+--------+----------------------------------------------
1663 | sys_default | 10 | |
1664 | sys_global | 10 | |
1986 | sysaudit | 10 | |
27158 | ttspace | 10 | | {quota=100,current_size=393262,space_full=1}
(4 rows)

如下,第一次修改表ti为指定表空间ttspace,从sys_class视图里看出原始的relfilenode59987并没有删除,59987位于base目录下的默认表空间里,而是在自定义表空间目录下新建了一个relfilenode109295。两个对象同名。

TEST=# alter table ti set tablespace ttspace;
ALTER TABLE
TEST=# select * from sys_class where relname='ti';
oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence |
relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmx
id | relacl | reloptions | relpartbound
-------+---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+-
--------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+---------
---+--------+------------+--------------
59987 | ti | 59985 | 59989 | 0 | 59986 | 2 | 59987 | 0 | 0 | 0 | 0 | 59995 | f | f | p |
r | 2 | 0 | f | f | f | f | f | t | d | f | 0 | 1959 |
1 | | |
68231 | ti | 2200 | 68233 | 0 | 10 | 2 | 109295 | 27158 | 9 | 2006 | 0 | 68234 | f | f | p |
r | 2 | 0 | f | f | f | f | f | t | d | f | 0 | 2032 |
1 | | |
(2 rows)

第二次修改表t为指定表空间ttspace,sys_class里这次原始的表的relfilenode被删除了,只保留了自定义表空间下的relfilenode。可见,alter table set tablespace后,表的relfilenode发生变化,变成了109301,它对应的表空间oid 从原来的0变为27158,而原来默认表空间对应的base目录下的relfilenode68270也被自动删除。

TEST=# select * from sys_class where relname='t';
oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence |
relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmx
id | relacl | reloptions | relpartbound
-------+---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+-
--------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+---------
---+--------+------------+--------------
68270 | t | 2200 | 68272 | 0 | 10 | 2 | 68270 | 0 | 1 | 3 | 0 | 0 | f | f | p |
r | 3 | 0 | f | f | f | f | f | t | d | f | 0 | 2039 |
1 | | |
(1 row) TEST=# alter table t set tablespace ttspace;
ALTER TABLE
TEST=# select * from sys_class where relname='t';
oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | relhasindex | relisshared | relpersistence |
relkind | relnatts | relchecks | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecurity | relispopulated | relreplident | relispartition | relrewrite | relfrozenxid | relminmx
id | relacl | reloptions | relpartbound
-------+---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-------------+-------------+----------------+-
--------+----------+-----------+-------------+----------------+----------------+----------------+---------------------+----------------+--------------+----------------+------------+--------------+---------
---+--------+------------+--------------
68270 | t | 2200 | 68272 | 0 | 10 | 2 | 109301 | 27158 | 1 | 3 | 0 | 0 | f | f | p |
r | 3 | 0 | f | f | f | f | f | t | d | f | 0 | 2039 |
1 | | |
(1 row)

如下从表空间oid 27158的目录结构可以理解为,表空间架构包含于数据库oid12145,进入下一层目录是数据库下的表对象等。

[kingbase7@localhost 12145]$ pwd
/home/kingbase7/data/sys_tblspc/27158/SYS_12_202209081/12145

表空间链接文件指向自定义表空间目录地址。

lrwxrwxrwx 1 kingbase7 kingbase7 24 May  5 17:36 27158 -> /home/kingbase7/tbl_user
[kingbase7@localhost sys_tblspc]$ pwd
/home/kingbase7/data/sys_tblspc

KingbaseESV8R6表空间与数据库,模式,表的关系的更多相关文章

  1. PostgreSQL表空间、数据库、模式、表、用户/角色之间的关系

    看PostgreSQL9的官方文档,我越看越迷糊,这表空间,数据库,模式,表,用户,角色之间的关系怎么在PostgreSQL里这么混乱呢?经过中午的一个小实验,我逐渐理清了个中来龙去脉.下面我来还原我 ...

  2. 转://RMAN跨平台可传输表空间和数据库

    参考链接: http://blog.itpub.net/23135684/viewspace-776048/ http://blog.sina.com.cn/s/blog_69e7b8d7010164 ...

  3. oracle数据库表空间追加数据库文件方法

    oracle数据库表空间追加数据库文件方法   针对非大文件方式表空间,允许追加文件进行表空间的扩展,单个文件最大大小是32G  第一种方式:表空间增加数据文件    www.2cto.com   1 ...

  4. Oracle - 数据库的实例、表空间、用户、表之间关系

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...

  5. 【转】Oracle - 数据库的实例、表空间、用户、表之间关系

    [转]Oracle - 数据库的实例.表空间.用户.表之间关系 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机 ...

  6. Oracle sql语句创建表空间、数据库、用户及授权

    --创建表空间和数据库文件及默认表空间大小 create tablespace TableSpace_Test datafile 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\O ...

  7. [20170623]利用传输表空间恢复数据库2.txt

    [20170623]利用传输表空间恢复数据库2.txt --//继续上午的测试,测试truncate,是否可行,理论讲应该没有问题.我主要的目的测试是否要切换日志.--//参考链接 : http:// ...

  8. oracle下的数据库实例、表空间、用户及其表的区分

    完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等): 2) Oracle数据库实例则是一组Ora ...

  9. Oracle学习笔记—数据库,实例,表空间,用户、表之间的关系

    之前一直使用的关系型数据库是Mysql,而新公司使用Oracle,所以最近从网上搜集了一些资料,整理到这里,如果有不对的地方,欢迎大家讨论. 基本概念: 数据库:Oracle 数据库是数据的物理存储. ...

  10. [转]Oracle - 数据库的实例、表空间、用户、表之间关系

    本文转自:http://www.cnblogs.com/adforce/p/3312252.html 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例. 1) 数据库是一系列物 ...

随机推荐

  1. 【Unity3D】线段渲染器LineRenderer

    1 LineRenderer 简介 ​ LineRenderer 组件用于绘制线段,可以调整线段条数.端点坐标.颜色.宽度等属性,其属性面板如下: Materials:线段材质,最好设置为 Defau ...

  2. __set_name__魔法方法

    介绍 __set_name__ 方法是 Python 3.6 中引入的一种特殊方法,它可以在类属性被赋值时自动调用.这个方法可以用来处理类属性的名称绑定问题,例如将类属性与其所在的类进行绑定. 具体来 ...

  3. django中信号

    # 信号的理解 在某个行为进行的某个阶段给这个行为添加一个附带的行为 # 相关api ## 数据表 pre_init # django的model执行其构造方法前,自动触发 post_init # d ...

  4. py.path模块

    # https://py.readthedocs.io/en/latest/path.html import os dir_path = "/home/lw/" os.path.j ...

  5. iOS APP包瘦身,你在工作中真的会关注吗?

    安装包组成 谈到 App 瘦身,最直接的想法莫过于分析一个安装包内部结构,了解其每一部分的来源.解压一个 ipa 包,拿到其 payload 中 app 文件的数据,整理归类后其大致如下: Exect ...

  6. Huggingface初上手即ERNIE-gram句子相似性实战

    大模型如火如荼的今天,不学点语言模型(LM)相关的技术实在是说不过去了.只不过由于过往项目用到LM较少,所以学习也主要停留在直面--动眼不动手的水平.Huggingface(HF)也是现在搞LM离不开 ...

  7. 用 NetworkX + Gephi + Nebula Graph 分析<权力的游戏>人物关系(下篇)

    在上一篇[1]中,我们通过 NetworkX 和 Gephi 展示了<权力的游戏>中的人物关系.在本篇中,我们将展示如何通过 NetworkX 访问图数据库 Nebula Graph. N ...

  8. Linux 多进程服务配置 systemd

    目录 Linux 多进程服务配置 systemd sysvinit和systemd 多进程保活 创建配置文件(设定重试次数) 多进程服务管理 链式启动(服务依赖) 指定关闭进程方式 - ExecSto ...

  9. 一文讲明白Java中线程与进程、并发与与并行、同步与异步

    写在开头 ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决 ...

  10. Java //内存解析