相关数据字典:
select * from dba_sys_privs t where t.GRANTEE= 'HRTEST';
select * from dba_role_privs t where t.GRANTEE= 'HRTEST';
select * from dba_tab_privs t where t.GRANTEE= 'HRTEST';
‘’‘sp_set_role('R1',0) --角色禁用和启用,禁用后角色权限将不在生效。
创建表空间
使用 create tablespace 语句创建表空间:
create tablespace tbs DATAFILE 'TBS01.DBF' size 32;
DM 数据文件大小,最小值不能低于页大小的 4096 倍(如果页大小是 8K,最小值将不
低于 32M),最大值为页大小的 2 的 31 次方-1(如果页大小是 8K,最大值为 16T-1)。
[执行语句1]:
create tablespace tbs DATAFILE 'TBS01.DBF' size 30;
alter tablespace tbs RENAME TO dmtbs;
修改表空间
修改表空间添加数据文件:
alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2 MAXSIZE 20480;
修改表空间数据文件的扩展属性(SYSTEM、TEMP 表空间不允许关闭自动扩展,且不允许
限制空间大小):
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE
20480;
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND off;
修改表空间数据文件的大小:
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;
迁移自定义表空间数据文件
修改表空间
修改表空间添加数据文件:
alter TABLESPACE tbs add DATAFILE 'TBS02.DBF' size 128 AUTOEXTEND on NEXT 2
MAXSIZE 20480;
修改表空间数据文件的扩展属性(SYSTEM、TEMP 表空间不允许关闭自动扩展,且不允许
限制空间大小):
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND on NEXT 2 MAXSIZE 20480;
alter tablespace tbs DATAFILE 'TBS01.DBF' AUTOEXTEND off;
修改表空间数据文件的大小:
alter tablespace tbs RESIZE DATAFILE 'TBS01.DBF' TO 128;
迁移自定义表空间数据文件
alter tablespace tbs offline;
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO '/dm8/data/DM/TBS/TBS01.DBF';
alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO '/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online
开启归档的方法:
SQL 开启归档
归档开启:
alter database mount;
alter database ARCHIVELOG;
alter database ADD ARCHIVELOG 'type=local, dest=/dm8/arch, file_size=64,
space_limit=10240';
alter database open;
查看归档配置:
select arch_mode from v$database;
select * from v$dm_arch_ini;
修改归档的配置(修改归档空间上限):
alter database modify archivelog 'type=local, dest=/dm8/arch, SPACE_LIMIT=20480';
SQL 关闭归档
SQL> alter database mount;
操作已执行
已用时间: 438.355(毫秒). 执行号:0.
SQL> alter database noarchivelog;
操作已执行
已用时间: 41.445(毫秒). 执行号:0.
SQL> alter database delete archivelog 'type=local,dest=/dm8/arch';
alter tablespace tbs offline;
alter TABLESPACE tbs RENAME DATAFILE 'TBS01.DBF' TO
'/dm8/data/DM/TBS/TBS01.DBF';
alter TABLESPACE tbs RENAME DATAFILE 'TBS02.DBF' TO
'/dm8/data/DM/TBS/TBS02.DBF';
alter tablespace tbs online
select * from dba_tablespaces;
select * from DBA_DATA_FILES;
select * from v$tablespace;
select * from v$datafile;
select * from DBA_FREE_SPACE; --数据文件剩余空间
DM 默认的预定义用户:
SYS:系统内置用户,不允许登录。
SYSDBA:系统管理员,拥有几乎所有权限(除审计和强制访问控制)
SYSAUDITOR:系统审计管理员,具有审计相关权限。
SYSSSO:系统安全管理员,具有强制访问控制等权限;
SYSDBO:安全版本才有的用户,安全操作员。
系统口令策略
PWD_POLICY(隐含参数,不在 dm.ini 中)参数指定系统的口令策略,默认为 2;
系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度需大于等于 INI 参数 PWD_MIN_LEN (默认为 9)设置的值
⚫ 4 至少包含一个大写字母(A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
口令策略可单独应用,也可组合应用。组合应用时,如需要应用策略 2 和 4,则设置口
令策略为 2+4=6 即可。
PWD_POLICY 是隐含参数,PWD_POLICY,只能通过函数或 SQL 语句修改。
select * from v$parameter t where t.name = 'PWD_POLICY';
create user hr IDENTIFIED by dameng123;
修改系统口令策略:
alter SYSTEM set 'PWD_POLICY' = 15 BOTH;
用户资源限制
用户资源限制设置(可以直接使用 limit 子句,也可以使用 profile 来管理用户的资源限制):
alter user hr LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3;
DM 支持使用 profile 管理用户资源限制(新版本支持,2021 年 10 月以后的版本)
select * from DBA_PROFILES;
create profile profile1 limit FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 3,
PASSWORD_LIFE_TIME 180;
alter user hrtest PROFILE profile1;
--查询用户使用的profile资源限制文件
select a.pid profileid, b.name profile_name, a.uid userid, c.name user_name
from SYSUSERPROFILES a, SYSOBJECTS b, SYSOBJECTS c
where a.PID = b.id
and a.UID = c.ID;
达梦中密码带有特殊字符需要双引号括起来,在 linux 系统下可以使用单引号‘转义。
[dmdba@KylinDCA03 ~]$ disql hrtest/'"Dameng@123"'
也可以使用右斜杠\转义
[dmdba@localhost ~]$ disql dmoa/"Dameng@123"
alter table hrtest.T_TESTPID move tablespace main;
select permanent_magic; --查询数据库永久魔数
select db_magic from v$rlog; --查询数据库当前魔数
SQL 备份数据库
备份数据库
backup database; --全量备份
backup database increment; --增量备份
backup database full to ONLINEBAK_01 backupset
'/dm8/backup/full/ONLINEBAK_01';
backup database increment BASE ON BACKUPSET
'/dm8/backup/full/ONLINEBAK_01' to ONLINEBAKINCR_01
backupset '/dm8/backup/incr/ONLINEBAK_01' ;
backup database increment with BACKUPDIR '/dm8/backup/full/' to
ONLINEBAKINCR_02 backupset '/dm8/backup/incr/ONLINEBAK_02' ;
备份集管理
--查看备份集
select * from v$backupset;
--备份集相关函数
select * from v$ifun t where t.name like 'SF_BAKSET%';
添加备份集目录(针对当前会话生效)
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/full/');
SF_BAKSET_BACKUP_DIR_ADD('DISK','/dm8/backup/incr/');
--校验备份集
select SF_BAKSET_CHECK('DISK','/dm8/backup/incr/ONLINEBAK_02');
--查看各个增量备份集的基础备份集:
select t.BACKUP_NAME, t.BACKUP_PATH, LEVEL, t.type,
SYS_CONNECT_BY_PATH(t.BACKUP_NAME, '/') BACKUP_BASECONNECT,
CONNECT_BY_ISLEAF ISLEAF
from (select a.BACKUP_NAME, a.BACKUP_PATH, a.BASE_NAME, a.TYPE
from V$BACKUPSET a) t
connect by t.BASE_NAME = PRIOR t.BACKUP_NAME
start with t.type = 0;
备份还原两个重要参数:
select * from v$parameter t where name in ('BAK_PATH', 'BAK_USE_AP')
库级还原恢复三部曲:
restore、recover、更新数据库魔数。
第十部分:数据字典和动态性能视
系统中所有对象的信息
SELECT * FROM SYSOBJECTS;
系统中所有索引定义信息
约束类型:
NOT NULL:非空约束
UNIQUE:唯一约束
PRIMARY KEY:主键约束 (唯一约束+非空约束)
FOREIGN KEY:外键约束
CHECK:检验约束
SQL 管理约束
非空约束
alter table hrtest.t_testpid modify pname not null;
唯一约束
alter table hrtest.t_testpid add CONSTRAINT uk_testpid_email unique (email);
主键约束
86 / 120
alter table hrtest.t_testpid ADD CONSTRAINT pk_testpid_pid PRIMARY KEY(pid);
检验约束
alter table hrtest.t_testpid add salary number(10,2);
alter table hrtest.t_testpid ADD CONSTRAINT ck_testpid_salary CHECK
(salary>=2100);
外键约束(外键引用两一张表的主键或者唯一键)
alter table hrtest.t_test add CONSTRAINT fk_test_id FOREIGN KEY(id) REFERENCES
hrtest.t_testpid(pid);
--约束的禁用和启用、删除
alter table hrtest.t_test disable CONSTRAINT fk_test_id;
alter table hrtest.t_test enable CONSTRAINT fk_test_id;
alter table hrtest.t_test drop CONSTRAINT fk_test_id
批量禁用外键约束:
select 'alter table '||owner||'.'||table_name||' disable constraint '|| t.CONSTRAINT_NAME ||';'
from DBA_CONSTRAINTS t
where t.OWNER ='DMTEST' and t.CONSTRAINT_TYPE = 'R'
数据的导入
DM 在 DISQL 下用 start 或都可以, Oracle 用@: SQL> start /dm8/backup/dts/t_department.sql SQL>
/dm8/backup/dts/t_department.sql
或者 disql 可以直接调用脚本:
[dmdba@KylinDCA04 backup]$ disql hr/'"Dameng@123"' '`city.sql'
索引的监控:
alter index HRTEST.IX_EMP01_EMPLOYEENAME MONITORING USAGE; --开启索引监控
alter index HRTEST.IX_EMP01_EMPLOYEENAME NOMONITORING USAGE; --关闭索引监控
select * from v$object_usage; --查看索引的监控信
索引的重建(生产环境建议使用 online 方式重建,不影响表的 DML 操作):
alter index HRTEST.IX_EMP01_EMPLOYEENAME rebuild ONLINE;
drop index HRTEST.ix_emp01_employeename;
--约束的禁用和启用、删除
alter table hrtest.t_test disable CONSTRAINT fk_test_id;
alter table hrtest.t_test enable CONSTRAINT fk_test_id;
alter table hrtest.t_test drop CONSTRAINT fk_test_id
select * from SYSOBJECTS t where t."TYPE$" ='SCH'; --查看模式
select * from SYSOBJECTS t where t."SUBTYPE$" ='USER'; --查看用户
--查询模式和用户的对应关系:
select a.id scheid, a.name schename, b.id userid, b.name username
from SYS.SYSOBJECTS a, SYS.SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id
模式管理
--创建模式
create schema hrtest01 AUTHORIZATION HRTEST;
81 / 120
create table hrtest01.t_test(id int, name varchar(20));
--查看当前模式和当前用户
select sys_context('USERENV','CURRENT_SCHEMA');
select sys_context('USERENV','CURRENT_USER'); 或 select user;
--切换模式(仅对当前会话生效)
set SCHEMA dmhr;
--删除模式
drop SCHEMA IF EXISTS HRTEST01;
drop SCHEMA IF EXISTS HRTEST01 CASCADE; --级联删除模式下对象,生产环境慎
用。
SELECT * FROM SYSINDEXES;
系统中所有列定义的信息
SELECT * FROM SYSCOLUMNS
select * from sysstats;
select * from SYSOBJECTS t where id = 1058;
select * from SYSCONS
动态性能视图是从内存中或控制文件中读取的数据
SELECT * FROM V$BUFFERpool; --数据缓冲区
SELECT * FROM V$mem_pool;
显示数据文件、表空间信息
SELECT * FROM V$DATAFILE;
SELECT * FROM V$tablespace;
显示当前进程、线程信息
SELECT * FROM V$PROCESS;
SELECT * FROM V$threads;
事务等待案例验证:
会话一:在 t_testpid(pid 为主键)中插入一行记录(不提交):
打开会话二:在 t_testpid 中插入相同记录:
查询事务等待:
select * from v$trxwait;
select * from v$lock t where t.blocked =1;
select a.sess_id, a.sql_text, a.state, b.* from v$sessions a, v$trxwait b
95 / 120
where a.trx_id = b.id;
sp_close_session(sess_id); --结束某个会话
-- 查询未提交事务
select b.object_name, c.sess_id, c.thrd_id, c.state, c.sql_text, a.*
from v$lock a, dba_objects b, v$sessions c
where a.table_id = b.object_id
and a.ltype = 'OBJECT'
and a.trx_id = c.trx_id
and a.ign_flag=0;
restore database '/dm8/data/DM/dm.ini' from backupset '/dm8/backup/full/ONLINEBAK_02
recover database '/dm8/data/DM/dm.ini' with archivedir '/dm8/arch';
recover database '/dm8/data/DM/dm.ini' update db_magic;
不完全恢复的使用场景:
表误删除(DROP),可以指定归档恢复到删除的前一刻。
recover database '/dm8/data/DMTEST/dm.ini' with archivedir '/dm8/arch' until lsn XX;
recover database '/dm8/data/DMTEST/dm.ini' with archivedir '/dm8/arch' until time XX;
show 查看备份集
RMAN> show backupset '/dm8/data/DAMENG/bak_full';
remove 删除备份集
RMAN> remove backupset '/dm8/data/DAMENG/bak_increment';
check 检查备份集
RMAN> check backupset '/dm8/data/DAMENG/bak_full'
restore database '/dm8/data/DAMENG/dm.ini' tablespace main from backupset 'XXX';
recover database '/dm8/data/DAMENG/dm.ini' tablespace main;
restore database '/dm8/data/DAMENG/dm.ini' tablespace main from backupset '/dm8/backup/full/CONSOLEFULLBAK';
dexp userid=sysdba/Dameng123:5236
directory=/dm8/backup/dexp file=full.dmp log=full.log full=y
按用户导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=HRTEST.dmp log=HRTEST.log owner=HRTEST
按模式导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=DMHR.dmp log=DMHR.log schemas=DMHR
按表导出:
dexp userid=sysdba/Dameng123:5236 directory=/dm8/backup/dexp file=EMPLOYEE.dmp log=EMPLOYEE.log tables=DMHR.EMPLOYEE
全库导入:
dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=full.dmp log=impfull.log
full=y
按模式导入(将 A 模式导入到 B 模式,使用 REMAP_SCHEMA 参数):
dimp userid=sysdba/Dameng123:5238 directory=/dm8/backup/dexp file=DMHR.dmp
log=impDMHR.log REMAP_SCHEMA=DMHR:DMTES
普通用户导出其他模式下表,需要有此表的 select 和 select for dump 权限。
grant select on dmhr.city to dmtest;
grant select for dump on dmhr.city to dmtest
dimp userid=sysdba/SYSDBA:5238 directory=/dm8/backup/dexp
file=t_dept.dmp log=t_dept.log tables=SYSDBA.t_dept remap_schema=SYSDBA:DMHR
call SP_CREATE_JOB('JOB01',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('JOB01');
call SP_ADD_JOB_STEP('JOB01', 'FULLBAK', 6,'00000000/dm8/backup/full', 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('JOB01', 'FULLBAK', 1, 2, 1, 1, 0,'22:00:00', NULL, '2021-12-22 16:32:21', NULL, '');
call SP_JOB_CONFIG_COMMIT('JOB01');
select * from v$ifun t where t.name like '%INIT%';
call SP_INIT_DBMS_SCHEDULER_SYS(1); --创建 DMBS_SCHEDULER
JOB 运行和日志查看
--查看job
select * from sysjob.sysjobs;
--运行job
dbms_job.run(1640162093);
--查看job运行日志
select * from SYSJOB.SYSJOBHISTORIES2;
checkpoint(100); --执行完全检查点,解决刚开归档备份,报错归档日志不连续的问题
注册数据库服务脚本
使用root用户
cd /dm8/script/root
./dm_service_installer.sh -t dmserver -p dbserver -dm_ini /dm8/data/DMDB/dm.ini
文章
阅读量
获赞