吴旭华 发表于 2024-12-24 07:11:01

数据库与表空间

配景知识概述

数据库&模式



[*]“实例/集簇”金仓是一个单实例管多库,把多库的集合叫做集簇,他们共用一个集簇目录,好比data目录下面里的子目录的数据文件。
[*]数据库里面有模式,在金仓里面模式是:据逻辑相关性对象的集合,就叫一个模式。

[*]什么是逻辑相关性对象,好比这些:表、索引、视图……,就是模式对象
[*]什么是模式对象,属于模式里面的对象,叫做模式对象
[*]通常分为三级架构

[*]数据库->数据库中的模式->模式中的对象


[*]数据库包含多个模式的,每个模式也包含多个对象
[*]在同一个模式里面,模式对象名,不可重名。不同模式可重名。
https://i-blog.csdnimg.cn/img_convert/c454f116b82ffb1bdacd278baafd1edd.png

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

一个数据库管理一个集簇,同样,一个集簇被一个数据库管理
角色用户

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


[*]金仓的用户数据库是属于实例级别的对象,它并不属于哪个数据库的。
这些箭头代表的是权限
https://i-blog.csdnimg.cn/img_convert/19ac26a232fa836c0927bb91883e651a.png
用户是全局性的,而模式是属于数据库的
表空间

表空间给数据库里面多对多
表空间只是为了关联一个存储目录,最后通过对象数据表空间关联到它的存储目录,通过这么一个纽带把逻辑和物理关联起来
https://i-blog.csdnimg.cn/img_convert/e135fec85f13704d3453346655172c5a.png
下令

列出表空间清单

\db+
https://i-blog.csdnimg.cn/img_convert/cfa2de57e0728a4839ddf093a4e72f09.png
表空间

创建表空间

我们起首要关心这个新建的表空间,它的存储位置在那里,起首我们要创建一个存储目录。目录权限设置为700
mkdir db01
chmod 700 db01/
https://i-blog.csdnimg.cn/img_convert/7d23523a3f95767868c0d37c6dff94c7.png
创建表空间的表名为 tbs01 及物理存储位置为 /home/kingbase/db01
create tablespace tbs01 location '/home/kingbase/db01';


[*]表名、存储位置路径可变,其他固定格式
https://i-blog.csdnimg.cn/img_convert/9e86f679e9a9266482936d0394cfc7b4.png
如果遇到这种环境
https://i-blog.csdnimg.cn/img_convert/82745d911141fba02134f9145320ab63.png
要使用所属的用户进行划分。
https://i-blog.csdnimg.cn/img_convert/f3b3fe4ef9cabcc3369afac3a4b781a9.png
创建乐成后查看表空间,可以看见,tbs01表空间创建乐成
https://i-blog.csdnimg.cn/img_convert/02ccb7dc71250fcfbe2b61dcbddb2151.png
来到存储位置目录下,可以看见多了一个不认识的目录名,使用下面下令
sys_controldata
可以看见目录名字是固定格式,对应的是版本号
https://i-blog.csdnimg.cn/img_convert/0f98cf402d677e9ffb25e02667263073.png
修改表空间的属主

alter tablespace tbs01 owner to user01;
修改表空间的名称

alter tablespace tbs01 rename to tbs02;
创建数据库

指定关联的表空间

创建数据库的名字为oa,指定表空间为 tbs01
create database oa tablespace tbs01 ;
可以看见创建乐成
https://i-blog.csdnimg.cn/img_convert/ae0bff7fc23040034bafbd59b5363f02.png
关联字符集

也可以根据要求指定字符集创建:
create database oa encodingtablespace tbs01 ;
https://i-blog.csdnimg.cn/img_convert/4949457060a75b1d7c919399cfab3b71.png
查看oa数据库的详细信息
https://i-blog.csdnimg.cn/img_convert/ac2952597e55d61d00dcd339994f10ec.png
对比其他的数据库,可以看见只有oa数据库的表空间不是默认的
https://i-blog.csdnimg.cn/img_convert/25cf84359787f5783631dd1e06f666e9.png
我们再返回目录查看,可以看见又多了一个目录
https://i-blog.csdnimg.cn/img_convert/ce0119ebd3064dcad32b50839612f329.png
SYS_DATABASE 是在一个系统里的全部数据库共享的,也叫金仓数据字典
我们可以查询一下这个,就知道了为什么目录名为 16788
select oid,datname from sys_database;
https://i-blog.csdnimg.cn/img_convert/a23d9b36f506d2a14622713366ab7072.png
可以看见这个oid刚好对应上了目录的名字
修改数据库

这个时候我们修改数据库db01 的表空间设置为 tbs01
alter database db01 set tablespace tbs01 ;
https://i-blog.csdnimg.cn/img_convert/9183161415a0ae65eaef1784049ca095.png
这个时候我们访问表空间的存储目录下,可以看见又多了一个目录,这个目录的名字就是对应着这个db01数据库的oid
https://i-blog.csdnimg.cn/img_convert/71efdfa6eadae85421a15c54e5fdab27.png
这也说明白一个表空间可以对多个数据库同时使用


创建一个表

创建一个表名为 s2 关联的表空间为 tbs01 关联另一个表的信息语句为 as 后面的语句
create table s2 tablespace tbs01 as select * from exam.student ;
https://i-blog.csdnimg.cn/img_convert/5a2a16537d660800b17bc8292d853757.png
查看 s2 表的详细信息,可以看见巨细
\dt+ s2
https://i-blog.csdnimg.cn/img_convert/c6e97807f947cb2a161ff888d85c76af.png
查看这个表的路径
select sys_relation_filepath('s2');
可以看见这个目录下我们并不认识
https://i-blog.csdnimg.cn/img_convert/1a088ea63bc9772572380a757f02afa0.png
我们回到用户自界说表空间的管理位置data目录在这里
https://i-blog.csdnimg.cn/img_convert/60f6ced7c03458b9a03e89e9a6975b57.png
可以发现这个是软连接,对应上了
https://i-blog.csdnimg.cn/img_convert/9e023e0e23afb31cf48aa4c429741651.png
使用这个函数查询
select * from sys_tablespace;
可以看见表空间目录名字对应的id是16787
https://i-blog.csdnimg.cn/img_convert/ccd157b32b1b1f44fe4ccda80a442c12.png
也就说明白为什么署名那个目录,为什么会是16787
创建表指定模式

关联查询语句



[*]with no data; 不包含数据
create table schema01.s2 as select * from exam.student with no data;
https://i-blog.csdnimg.cn/img_convert/572aaf79beb74439295235edcb61bccc.png
修改

修改表的名字

alter table product rename to b;
https://i-blog.csdnimg.cn/img_convert/266a7388a1a4c506ca6c29ff49d5df98.png
修改一个表的表空间

修改 exam模块下的s1表的 表空间设置为 tbs01
alert table exam.s1 set tablespacetbs01 ;
https://i-blog.csdnimg.cn/img_convert/a213c8d44ad9a2ff34bad454810c1cdc.png
查看这个表详细的信息,可以看见它的表空间已经设置为 tbs01
https://i-blog.csdnimg.cn/img_convert/741ad00183f3d399cadc2e05b538379f.png
修改表的模式

修改表的模块为schema01
alter table s1 set SCHEMA schema01;
https://i-blog.csdnimg.cn/img_convert/d5f2ce931d85df38f63af661f8ead08b.png
插入表数据关联其他表的内容

insert into schema01.s1 select * from exam.student;
https://i-blog.csdnimg.cn/img_convert/82ddb1bbe76f41c492eea1d17889f511.png
https://i-blog.csdnimg.cn/img_convert/de68f1512bf58a0718f74f2be6090648.png
模式

创建一个模式

在oa数据库中创建一个模式名为 sch01
\c
create schema sch01;
https://i-blog.csdnimg.cn/img_convert/eb401b36b0fb5978aef3514ed27c0cba.png
创建模式且指定属主设置

属主设置为u01
create schema schema01 authorization u01;
https://i-blog.csdnimg.cn/img_convert/1fdd9c46537649cbaf3c7f65e4cd7342.png
指定模式限定创建一个表

在oa数据库中的创建一个模式为 sch01 其中,这个模式的表为 t01
可以看见模式里的数据表创建乐成
crate table sch01.t01(id int,name varchar(100));
https://i-blog.csdnimg.cn/img_convert/fe6041d7e8ee8d56c4f348705f79b004.png
插入指定模式的表的数据

手工插入

插入sch01模式中的t01表数据
insert into sch01.t01 values (1,'admin');
https://i-blog.csdnimg.cn/img_convert/5b97a3a84fa3415325b50bc5cc8ab004.png
可以看见插入数据乐成
https://i-blog.csdnimg.cn/img_convert/3f708a8ded9a88aa7ed872958d42052e.png
可以看见这个t01表的模式是sch01
https://i-blog.csdnimg.cn/img_convert/eae2d07df1bbdc990cc53e627d58afd2.png
关联查询语句插入

insert into sch01.t01 select * from exam.student;
https://i-blog.csdnimg.cn/img_convert/435d8e6efb0b12a0921abc721abc2096.png
修改模式属性所属者

alter schema schema01 owner to u01;
https://i-blog.csdnimg.cn/img_convert/7d504b0d617c7ca290405d6f5fc5be60.png
模式路径

金仓数据库有默认模式路径,如果不指定模式查询,默认使用模式路径下的。
show search_path;
https://i-blog.csdnimg.cn/img_convert/544e20acdce82505f8c74ad68a5f6b4e.png
查看当前用户名,\echo :USER 查看USER变量
https://i-blog.csdnimg.cn/img_convert/8eaf5b14b2c153060085aea3c55a2e8b.png
\dn 查看oa数据库中存在的模式,可以发现并没有存在system模式
https://i-blog.csdnimg.cn/img_convert/f677bcf42e3fca1b2f9bf5866f899e53.png
指定搜索路径
set search_patch= sch01;
https://i-blog.csdnimg.cn/img_convert/0696f39f78f791fc257e2411ca203c63.png
可以发现查询sch01的t01表,不需要指定sch01模式,因为搜索路径,主动搜索了
https://i-blog.csdnimg.cn/img_convert/936e61935244ad02a73c574e9c6d67ac.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库与表空间