表空间
查询有哪些表空间
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;