kingbase金仓数据库之数据库与表空间

发布于:2025-02-11 ⋅ 阅读:(104) ⋅ 点赞:(0)

背景知识概述

数据库&模式

  • “实例/集簇”金仓是一个单实例管多库,把多库的集合叫做集簇,他们共用一个集簇目录,比如data目录下面里的子目录的数据文件。
  • 数据库里面有模式,在金仓里面模式是:据逻辑相关性对象的集合,就叫一个模式。
    • 什么是逻辑相关性对象,比如这些:表、索引、视图……,就是模式对象
    • 什么是模式对象,属于模式里面的对象,叫做模式对象
    • 通常分为三级架构
      • 数据库->数据库中的模式->模式中的对象
  • 数据库包含多个模式的,每个模式也包含多个对象
  • 在同一个模式里面,模式对象名,不可重名。不同模式可重名。

  1. 数据库集簇(Database Cluster)与数据库实例(Databse Instance)。
    1. KES 集簇是指单个KES实例管理的数据库的集合
    2. KES集簇中的库使用相同的全局配置文件和监听端口、共享相关的进程和内存结构
    3. 同一数据库 集簇中的进程、相关的内存结构统称为实例。

一个数据库管理一个集簇,同样,一个集簇被一个数据库管理

角色用户

用户和数据库都属于实例内部的对象,它们是平级的。实例内部我们称为全局性的对象。

  • 金仓的用户数据库是属于实例级别的对象,它并不属于哪个数据库的。

这些箭头代表的是权限

用户是全局性的,而模式是属于数据库的

表空间

表空间给数据库里面多对多

表空间只是为了关联一个存储目录,最后通过对象数据表空间关联到它的存储目录,通过这么一个纽带把逻辑和物理关联起来

命令

列出表空间清单

\db+

表空间

创建表空间

我们首先要关心这个新建的表空间,它的存储位置在哪里,首先我们要创建一个存储目录。目录权限设置为700

mkdir db01
chmod 700 db01/

创建表空间的表名为 tbs01 及物理存储位置为 /home/kingbase/db01

create tablespace tbs01 location '/home/kingbase/db01';
  • 表名、存储位置路径可变,其他固定格式

如果遇到这种情况

要使用所属的用户进行划分。

创建成功后查看表空间,可以看见,tbs01表空间创建成功

来到存储位置目录下,可以看见多了一个不认识的目录名,使用下面命令

sys_controldata

可以看见目录名字是固定格式,对应的是版本号

修改表空间的属主

alter tablespace tbs01 owner to user01;

修改表空间的名称

alter tablespace tbs01 rename to tbs02;

创建数据库

指定关联的表空间

创建数据库的名字为oa,指定表空间为 tbs01

create database oa tablespace tbs01 ;

可以看见创建成功

关联字符集

也可以根据要求指定字符集创建:

create database oa encoding  tablespace tbs01 ;

查看oa数据库的详细信息

对比其他的数据库,可以看见只有oa数据库的表空间不是默认的

我们再返回目录查看,可以看见又多了一个目录

SYS_DATABASE 是在一个系统里的所有数据库共享的,也叫金仓数据字典

我们可以查询一下这个,就知道了为什么目录名为 16788

select oid,datname from sys_database;

可以看见这个oid刚好对应上了目录的名字

修改数据库

这个时候我们修改数据库db01 的表空间设置为 tbs01

alter database db01 set tablespace tbs01 ;

这个时候我们访问表空间的存储目录下,可以看见又多了一个目录,这个目录的名字就是对应着这个db01数据库的oid

这也说明了一个表空间可以对多个数据库同时使用

创建一个表

创建一个表名为 s2 关联的表空间为 tbs01 关联另一个表的信息语句为 as 后面的语句

create table s2 tablespace tbs01 as select * from exam.student ;

查看 s2 表的详细信息,可以看见大小

\dt+ s2

查看这个表的路径

select sys_relation_filepath('s2');

可以看见这个目录下我们并不认识

我们回到用户自定义表空间的管理位置data目录在这里

可以发现这个是软连接,对应上了

使用这个函数查询

select * from sys_tablespace;

可以看见表空间目录名字对应的id是16787

也就说明了为什么签名那个目录,为什么会是16787

创建表指定模式

关联查询语句
  • with no data; 不包含数据
create table schema01.s2 as select * from exam.student with no data;

修改

修改表的名字
alter table product rename to b;

修改一个表的表空间

修改 exam模块下的s1表的 表空间设置为 tbs01

alert table exam.s1 set tablespace  tbs01 ;

查看这个表详细的信息,可以看见它的表空间已经设置为 tbs01

修改表的模式

修改表的模块为schema01

alter table s1 set SCHEMA schema01;

插入表数据关联其他表的内容

insert into schema01.s1 select * from exam.student;

模式

创建一个模式

在oa数据库中创建一个模式名为 sch01

\c 
create schema sch01;

创建模式且指定属主设置

属主设置为u01

create schema schema01 authorization u01;

指定模式限定创建一个表

在oa数据库中的创建一个模式为 sch01 其中,这个模式的表为 t01

可以看见模式里的数据表创建成功

crate table sch01.t01(id int,name varchar(100));

插入指定模式的表的数据

手工插入

插入sch01模式中的t01表数据

insert into sch01.t01 values (1,'admin');

可以看见插入数据成功

可以看见这个t01表的模式是sch01

关联查询语句插入
insert into sch01.t01 select * from exam.student;

修改模式属性所属者

alter schema schema01 owner to u01;

模式路径

金仓数据库有默认模式路径,如果不指定模式查询,默认使用模式路径下的。

show search_path;

查看当前用户名,\echo :USER 查看USER变量

\dn 查看oa数据库中存在的模式,可以发现并没有存在system模式

指定搜索路径

set search_patch  = sch01;

可以发现查询sch01的t01表,不需要指定sch01模式,因为搜索路径,自动搜索了


网站公告

今日签到

点亮在社区的每一天
去签到