达梦(DM8)常用语句

表空间

查询有哪些表空间

select tablespace_name from dba_tablespaces;

创建表空间

create tablespace <表空间名称> datafile <数据库存储文件> size 512;
# 示例:create tablespace TEST datafile '/data/dmdbms/data/TEST/TEST.DBF' size 512;

用户

创建用户

# 创建用户并指定默认使用的表空间
create user "TESTUSER" identified by "TEST@2023" default tablespace "TEST" default index tablespace "TEST";

用户授权

授予用户DBA角色权限(权限大)

grant DBA to <用户名>;

授予用户除了DBA外的所有角色(仅限于在自己的模式下进行读写操作)

grant PUBLIC,RESOURCE,SOI,VTI to <用户名>;

授予用户其他模式的只读权限(自己的模式可以读写,其他的模式只能读)

grant SELECT TABLE,SELECT ANY TABLE,SELECT VIEW,SELECT ANY VIEW,SELECT SEQUENCE,SELECT ANY SEQUENCE,SELECT ANY DICTIONARY,SELECT MATERIALIZED VIEW,SELECT ANY MATERIALIZED VIEW to <用户名>;

授予用户指定模式的只读权限(按对象(表)授权)
方法一(直接执行):

DECLARE
    SQLSTMT STRING;
    CURSOR CUR FOR SELECT ID,NAME  FROM SYSOBJECTS  WHERE  TYPE$ = 'SCHOBJ' AND SUBTYPE$ IN ('STAB','UTAB')  AND (PID=-1 OR PID=0) AND  SCHID=(SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME='<用户名>' );
    TYPE MYREC IS CUR%ROWTYPE;
    REC_V MYREC;
    BEGIN
    FOR REC_V IN CUR LOOP
    SQLSTMT = 'grant SELECT ON "<模式名>"."'|| REC_V.NAME  || '" TO "<用户名>";';
    EXECUTE IMMEDIATE SQLSTMT;
    END LOOP;
    COMMIT;
END;

方法二(先构造SQL语句,然后手动执行):

#授予 TEST 用户对 SYSDBA 模式下所有表的只读权限
select 'grant select on SYSDBA.'||table_name||' to TEST' from dba_tables where owner='SYSDBA';

取消用户授权(回收权限)

REVOKE DBA FROM <用户名>;

查看当前用户拥有的权限

SELECT * FROM session_privs;

查询指定用户被授予的权限

SELECT * FROM dba_sys_privs where grantee='<用户名>';

用户锁定

alter user <用户名> account lock;

用户解锁

alter user <用户名> account unlock;

索引

创建普通索引

例:以SYSDBA用户给purchasing模式的VENDOR表的vendorid字段建立普通索引,索引名为S1。

create index s1 on purchasing.vendor(vendorid);

在多个字段上建立唯一索引(unique)

例:以SYSDBA用户给purchasing模式的vendor表的accountno和name字段建立唯一索引,索引名为S2。

create unique index s2 on purchasing.vendor(accountno, name)

参考:https://blog.csdn.net/2301_76435948/article/details/134106592

替换key

在达梦官网提供了开发版,没有任何的功能和连接限制,可以免费用一年,但到期后dmserver会停止服务,这个时候需要替换一下key。
两种方式替换:
1、已经停止服务:
将key文件更改为dm.key拷贝到$DM_HOME/bin目录下
重启服务即可。

2、未到过期时间,可以在线替换key:
先将key更改为dm.key拷贝到$DM_HOME/bin目录下
更改dm.key的文件权限:

chown -R dmdba:dinstall dm.key

用SYSDBA登录数据库,执行以下命令

SP_LOAD_LIC_INFO();

查询新的license是否已生效

select series_no 序列号,expired_date 过期时间,authorized_customer 用户单位 from v$license;

查看许可证到期时间

select EXPIRED_DATE  from v$license;

实现MySQL的CURRENT_TIMESTAMP

MySQL对列设置CURRENT_TIMESTAMP默认值后,当表数据修改时,列的时间将自动修改为当前时间,如果需要在达梦数据库也实现该功能,需要通过触发器来实现:

以下创建了一个名为update_time_test的触发器,当XXX模式中的test表中数据发生修改时,将自动修改表中的updated_at字段为当前时间。

create or replace trigger update_time_test
before update on XXX.test for each row
begin
new.updated_at:=sysdate;
end;

发表评论

邮箱地址不会被公开。 必填项已用*标注