配景知识概述
数据库&模式
- “实例/集簇”金仓是一个单实例管多库,把多库的集合叫做集簇,他们共用一个集簇目录,好比data目录下面里的子目录的数据文件。
- 数据库里面有模式,在金仓里面模式是:据逻辑相关性对象的集合,就叫一个模式。
- 什么是逻辑相关性对象,好比这些:表、索引、视图……,就是模式对象
- 什么是模式对象,属于模式里面的对象,叫做模式对象
- 通常分为三级架构
- 数据库包含多个模式的,每个模式也包含多个对象
- 在同一个模式里面,模式对象名,不可重名。不同模式可重名。
- 数据库集簇(Database Cluster)与数据库实例(Databse Instance)。
- KES 集簇是指单个KES实例管理的数据库的集合
- KES集簇中的库使用雷同的全局设置文件和监听端口、共享相关的进程和内存结构
- 同一数据库 集簇中的进程、相关的内存结构统称为实例。
一个数据库管理一个集簇,同样,一个集簇被一个数据库管理
角色用户
用户和数据库都属于实例内部的对象,它们是平级的。实例内部我们称为全局性的对象。
- 金仓的用户数据库是属于实例级别的对象,它并不属于哪个数据库的。
这些箭头代表的是权限
用户是全局性的,而模式是属于数据库的
表空间
表空间给数据库里面多对多
表空间只是为了关联一个存储目录,最后通过对象数据表空间关联到它的存储目录,通过这么一个纽带把逻辑和物理关联起来
下令
列出表空间清单
表空间
创建表空间
我们起首要关心这个新建的表空间,它的存储位置在那里,起首我们要创建一个存储目录。目录权限设置为700
- mkdir db01
- chmod 700 db01/
复制代码
创建表空间的表名为 tbs01 及物理存储位置为 /home/kingbase/db01
- create tablespace tbs01 location '/home/kingbase/db01';
复制代码
如果遇到这种环境
要使用所属的用户进行划分。
创建乐成后查看表空间,可以看见,tbs01表空间创建乐成
来到存储位置目录下,可以看见多了一个不认识的目录名,使用下面下令
可以看见目录名字是固定格式,对应的是版本号
修改表空间的属主
- 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 表的详细信息,可以看见巨细
查看这个表的路径
- select sys_relation_filepath('s2');
复制代码 可以看见这个目录下我们并不认识
我们回到用户自界说表空间的管理位置data目录在这里
可以发现这个是软连接,对应上了
使用这个函数查询
- select * from sys_tablespace;
复制代码 可以看见表空间目录名字对应的id是16787
也就说明白为什么署名那个目录,为什么会是16787
创建表指定模式
关联查询语句
- 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
创建模式且指定属主设置
属主设置为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;
复制代码
模式路径
金仓数据库有默认模式路径,如果不指定模式查询,默认使用模式路径下的。
查看当前用户名,\echo :USER 查看USER变量
\dn 查看oa数据库中存在的模式,可以发现并没有存在system模式
指定搜索路径
- set search_patch = sch01;
复制代码
可以发现查询sch01的t01表,不需要指定sch01模式,因为搜索路径,主动搜索了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |