达梦8模式介绍和基本管理

模式介绍:

        用户的模式(SCHEMA)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、 视图、索引和权限定义的对象。在 DM 中,一个用户可以创建多个模式,一个模式中的对象 (表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的 数据库中有权限访问的任意模式中的对象。 系统为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用模式定义语句建立其它模式。

采用模式的原因有几点:

1. 允许多个用户使用一个数据库而不会干扰其它用户;

2. 把数据库对象组织成逻辑组,让它们更便于管理;

3. 第三方的应用可以放在不同的模式中,这样可以避免和其它对象的名字冲突。

       模式类似于操作系统层次的目录,只不过模式不能嵌套。DM 模式可以通过 SQL 语句进行操作。DM 模式主要包含以下的模式对象:

视图索引触发器存储过程/函数序列全文索引同义词

外部链接。在引用模式对象的时候,一般要在模式对象名前面加上模式名。具体格式如下:

[模式名].对象名

        当然,在当前模式和要引用的模式对象所属的模式相同时,可以省略模式名。如果我们访问一个表时,没有指明该表属于哪一个模式,系统就会自动给我们在表前加上缺省的模式名。类似地,如果我们在创建对象时不指定该对象的模式,则该对象的模式为用户的缺省模式。

模式对象之外的其他对象统一称为非模式对象,非模式对象主要包括用户角色权限表空间。

模式与用户之间的关系:

模式定义:模式是一个特定的对象集合,在概念上可将其看作是包含表、视图、索引等若干对象的对象集

模式对象: 表、视图、约束、索引、序列、触发器、存储过程/函数、包、同义词、类、域

模式与用户之间的关系:

        当系统建立一个用户时,会自动生成一个对应的模式。用户还可以建立其他模式,DM 中用户和模式是一对多的关系,一个用户可以拥有多个模式,一个模式仅能归属于一个用户。Oracle 中用户和模式是一对一的关系。

        配置登录默认模式、模式切换,都是某一个用户自己建立的多个模式之间切换,模式和用户不存在授权的概念,也不能授权,只有属于和不属于;同时,我们所有的模式切换,是不能跨到其他用户下面去的;

查看当前数据库中存在的模式:

select * from SYSOBJECTS t where t."TYPE$" ='SCH';

查看当前数据库中存在的用户

select * from SYSOBJECTS t where t."SUBTYPE$" ='USER';

查询模式和用户的对应关系一对多的关系

SQL> select b.id userid, b.name username,a.id scheid, a.name schename

from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b

where a."TYPE$" = 'SCH' and a.pid = b.id;

行号       USERID      USERNAME   SCHEID      SCHENAME

---------- ----------- ---------- ----------- ----------

1          50331648    SYS        150994944   SYS

2          50331648    SYS        150994948   CTISYS

3          50331649    SYSDBA     150994945   SYSDBA

4          50331650    SYSAUDITOR 150994946   SYSAUDITOR

5          50331651    SYSSSO     150994947   SYSSSO

6          50331748    DEM        150995944   DEM

6 rows got

模式管理

--创建模式

create schema dmhr_test AUTHORIZATION dmhr;

create table dmhr_test.test(id int, name varchar(20));

查看创建的模式:

SQL> select b.id userid, b.name username,a.id scheid, a.name schename

from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b

where a."TYPE$" = 'SCH' and a.pid = b.id;

行号       USERID      USERNAME   SCHEID      SCHENAME

---------- ----------- ---------- ----------- ----------

1          50331648    SYS        150994944   SYS

2          50331648    SYS        150994948   CTISYS

3          50331649    SYSDBA     150994945   SYSDBA

4          50331650    SYSAUDITOR 150994946   SYSAUDITOR

5          50331651    SYSSSO     150994947   SYSSSO

6          50331748    DEM        150995944   DEM

7          50331749    DMHR       150995945   DMHR

8          50331749    DMHR       150995946   DMHR_TEST

8 rows got

--查看当前模式和当前用户

SQL> select sys_context('USERENV','CURRENT_SCHEMA');

行号       SYS_CONTEXT('USERENV','CURRENT_SCHEMA')

---------- ---------------------------------------

1          DMHR

已用时间: 0.950(毫秒). 执行号:1173.

SQL> select sys_context('USERENV','CURRENT_USER');

行号       SYS_CONTEXT('USERENV','CURRENT_USER')

---------- -------------------------------------

1          DMHR

已用时间: 0.586(毫秒). 执行号:1174.

SQL> desc test

[-20001]:无效的对象名.

DMHR模式中无test表,需加上dmhr_test模式名访问test表

SQL> desc dmhr_test.test

行号       NAME TYPE$       NULLABLE

---------- ---- ----------- --------

1          ID   INTEGER     Y

2          NAME VARCHAR(20) Y

已用时间: 4.708(毫秒). 执行号:1183.

SQL>

--切换模式(仅对当前会话生效)

SQL> set SCHEMA dmhr_test;

操作已执行

已用时间: 0.295(毫秒). 执行号:0.

SQL> select sys_context('USERENV','CURRENT_SCHEMA');

行号       SYS_CONTEXT('USERENV','CURRENT_SCHEMA')

---------- ---------------------------------------

1          DMHR_TEST

已经切换到了dmhr_test模式

SQL> select sys_context('USERENV','CURRENT_USER');

行号       SYS_CONTEXT('USERENV','CURRENT_USER')

---------- -------------------------------------

1          DMHR

已用时间: 0.420(毫秒). 执行号:1177.

SQL>

切换到了dmhr_test模式后,操作test表不用加模式名前缀.

SQL> desc test

行号       NAME TYPE$       NULLABLE

---------- ---- ----------- --------

1          ID   INTEGER     Y

2          NAME VARCHAR(20) Y

已用时间: 6.261(毫秒). 执行号:1178.

SQL> insert into test values(1,'test01');

影响行数 1

已用时间: 1.525(毫秒). 执行号:1179.

SQL> commit;

操作已执行

已用时间: 1.418(毫秒). 执行号:1180.

SQL> select * from test;

行号       ID          NAME

---------- ----------- ------

1          1           test01

已用时间: 0.387(毫秒). 执行号:1181.

查询当前模式下的表:

SELECT

        *

FROM

        (

                SELECT

                        SCH.NAME SCHEMA_NAME,

                        OBJ.NAME TABLE_NAME ,

                        OBJ.CRTDATE CREATE_TIME

                FROM

                        SYSOBJECTS SCH,

                        SYSOBJECTS OBJ

                WHERE

                        SCH.ID        =OBJ.SCHID

                    AND OBJ.SUBTYPE$ IN ('UTAB', 'VIEW')

                    AND SCH.NAME      =SF_GET_SCHEMA_NAME_BY_ID(CURRENT_SCHID)

        )

WHERE

        TABLE_NAME = 'TEST';

删除模式:

drop SCHEMA IF EXISTS dmhr_test;

drop SCHEMA IF EXISTS dmhr_test CASCADE; --级联删除模式下对象,生产环境慎

达梦在线服务平台:https://eco.dameng.com

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值