数据库与表空间

打印 上一主题 下一主题

主题 832|帖子 832|积分 2496

配景知识概述

数据库&模式



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

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

      • 数据库->数据库中的模式->模式中的对象


  • 数据库包含多个模式的,每个模式也包含多个对象
  • 在同一个模式里面,模式对象名,不可重名。不同模式可重名。


  • 数据库集簇(Database Cluster)与数据库实例(Databse Instance)。

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

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

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


  • 金仓的用户数据库是属于实例级别的对象,它并不属于哪个数据库的。
这些箭头代表的是权限

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

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

下令

列出表空间清单

  1. \db+
复制代码

表空间

创建表空间

我们起首要关心这个新建的表空间,它的存储位置在那里,起首我们要创建一个存储目录。目录权限设置为700
  1. mkdir db01
  2. chmod 700 db01/
复制代码

创建表空间的表名为 tbs01 及物理存储位置为 /home/kingbase/db01
  1. create tablespace tbs01 location '/home/kingbase/db01';
复制代码


  • 表名、存储位置路径可变,其他固定格式

如果遇到这种环境

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

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

来到存储位置目录下,可以看见多了一个不认识的目录名,使用下面下令
  1. sys_controldata
复制代码
可以看见目录名字是固定格式,对应的是版本号

修改表空间的属主

  1. alter tablespace tbs01 owner to user01;
复制代码
修改表空间的名称

  1. alter tablespace tbs01 rename to tbs02;
复制代码
创建数据库

指定关联的表空间

创建数据库的名字为oa,指定表空间为 tbs01
  1. create database oa tablespace tbs01 ;
复制代码
可以看见创建乐成

关联字符集

也可以根据要求指定字符集创建:
  1. create database oa encoding  tablespace tbs01 ;
复制代码

查看oa数据库的详细信息

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

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

SYS_DATABASE 是在一个系统里的全部数据库共享的,也叫金仓数据字典
我们可以查询一下这个,就知道了为什么目录名为 16788
  1. select oid,datname from sys_database;
复制代码

可以看见这个oid刚好对应上了目录的名字
修改数据库

这个时候我们修改数据库db01 的表空间设置为 tbs01
  1. alter database db01 set tablespace tbs01 ;
复制代码

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

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


创建一个表

创建一个表名为 s2 关联的表空间为 tbs01 关联另一个表的信息语句为 as 后面的语句
  1. create table s2 tablespace tbs01 as select * from exam.student ;
复制代码

查看 s2 表的详细信息,可以看见巨细
  1. \dt+ s2
复制代码

查看这个表的路径
  1. select sys_relation_filepath('s2');
复制代码
可以看见这个目录下我们并不认识

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

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

使用这个函数查询
  1. select * from sys_tablespace;
复制代码
可以看见表空间目录名字对应的id是16787

也就说明白为什么署名那个目录,为什么会是16787
创建表指定模式

关联查询语句



  • with no data; 不包含数据
  1. create table schema01.s2 as select * from exam.student with no data;
复制代码

修改

修改表的名字

  1. alter table product rename to b;
复制代码

修改一个表的表空间

修改 exam模块下的s1表的 表空间设置为 tbs01
  1. alert table exam.s1 set tablespace  tbs01 ;
复制代码

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

修改表的模式

修改表的模块为schema01
  1. alter table s1 set SCHEMA schema01;
复制代码

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

  1. insert into schema01.s1 select * from exam.student;
复制代码


模式

创建一个模式

在oa数据库中创建一个模式名为 sch01
  1. \c
  2. create schema sch01;
复制代码

创建模式且指定属主设置

属主设置为u01
  1. create schema schema01 authorization u01;
复制代码

指定模式限定创建一个表

在oa数据库中的创建一个模式为 sch01 其中,这个模式的表为 t01
可以看见模式里的数据表创建乐成
  1. crate table sch01.t01(id int,name varchar(100));
复制代码

插入指定模式的表的数据

手工插入

插入sch01模式中的t01表数据
  1. insert into sch01.t01 values (1,'admin');
复制代码

可以看见插入数据乐成

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

关联查询语句插入

  1. insert into sch01.t01 select * from exam.student;
复制代码

修改模式属性所属者

  1. alter schema schema01 owner to u01;
复制代码

模式路径

金仓数据库有默认模式路径,如果不指定模式查询,默认使用模式路径下的。
  1. show search_path;
复制代码

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

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

指定搜索路径
  1. set search_patch  = sch01;
复制代码

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表