注册
DCP培训相关知识点总结与分享
培训园地/ 文章详情 /

DCP培训相关知识点总结与分享

2025/08/14 83 0 0

最近参加了达梦的DCP的培训,过程中学到了很多的知识点,有一些是平时工作中已经熟练掌握的,有一些是平时较少用到或者新知识点,所以在学习的过程中也做了一些技术笔记进行总结,在这里顺便分享给大家。

一、创建数据库实例

1、新手建议图形化界面操作
su - dmdba
cd /dm8/tool
./dbca.sh

2、命令行操作
cd /dm8/bin
使用 dminit 命令进行创建
./dminit PATH=/dm8/data PORT_NUM=5236 DB_NAME=DAMENG INSTANCE_NAME=DAMENG PAGE_SIZE=32 EXTENT_SIZE=32 CHARSET=1 CASE_SENSITIVE=1 BLANK_PAD_MODE=0 LOG_SIZE=1024 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

二、表空间

达梦默认的系统表空间:
SYSTEM:数据字典和全局的系统数据
ROLL:存入了数据库运行过程中产生的回滚记录
TEMP:临时表空间
MAIN:存放对象数据的表空间,创建对象的时候,不指定表空间,就是存放在该表空间中。

-- 查询表空间的相关信息
select file_name, file_id, status, tablespace_name, bytes/1024/1024 as "SIZE(M)" from dba_data_files;

-- 创建表空间
CREATE TABLESPACE "TEST"
DATAFILE '/dm8/data/DAMENG/TEST.DBF' SIZE 128
AUTOEXTEND ON NEXT 10
CACHE = NORMAL;

-- 修改数据文件大小
ALTER TABLESPACE "TEST" RESIZE DATAFILE '/dm8/data/DAMENG/TEST.DBF' to 1280;

-- 追加数据文件
ALTER TABLESPACE "TEST" ADD DATAFILE '/dm8/data/DAMENG/TEST01.DBF' size 128 autoextend on next 10;

-- 更换存储位置(或文件更名)
ALTER TABLESPACE "TEST" OFFLINE;
ALTER TABLESPACE "TEST" RENAME DATAFILE '/dm8/data/DAMENG/TEST.DBF' to '/dm8/TEST.DBF';
ALTER TABLESPACE "TEST" ONLINE;

三、用户管理

数据库预定义用户(系统用户)
SYSDBA:系统管理员
SYS:不能用于用户登录,是系统内置用户
SYSSSO:安全用户
SYSAUDITOR:审计用户
SYSDBO:系统操作员(安全版才有)

--创建用户
CREATE USER "TEST" IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE "TEST" DEFAULT INDEX TABLESPACE "TEST";

--角色授权
GRANT "PUBLIC","RESOURCE","SOI","VTI" to "TEST";

四、分区表

-- 创建范围分区:
create table t_partrangetab
(logtime datetime,
userid int,
username varchar(20),
areaid int,
optype int) PARTITION BY RANGE(logtime)
( PARTITION p2024 VALUES LESS THAN('2025-01-01') TABLESPACE TEST,
PARTITION p202501 VALUES LESS THAN('2025-02-01') TABLESPACE TEST,
PARTITION p202502 VALUES LESS THAN('2025-03-01') TABLESPACE TEST,
PARTITION p202503 VALUES LESS THAN('2025-04-01') TABLESPACE TEST,
PARTITION pmax VALUES LESS THAN(MAXVALUE) TABLESPACE TEST);

-- 造数据
insert into t_partrangetab(logtime, userid, username, areaid, optype)
select
sysdate - numtodsinterval(level, 'hour'),
level,
DBMS_RANDOM.STRING('A',20),
mod(level,5),
mod(level,10)
from dual
connect by rownum <=100000;

-- 分区维护
添加
alter table t_partrangetab add PARTITION p202504 VALUES LESS THAN ('2025-05-01') TABLESPACE TEST;

合并
alter table T_PARTRANGETAB MERGE PARTITIONS p202501, p202502 INTO PARTITION p202502;

拆分
alter table T_PARTRANGETAB SPLIT PARTITION p202502 AT ('2025-02-01') INTO(PARTITION p202501,PARTITION p202502);
alter table T_PARTRANGETAB SPLIT PARTITION p202502 AT ('2025-02-15') INTO(PARTITION p20250215,PARTITION p202502);

默认水平分区表没有开启行移动,未开启行迁移会导致数据更新时,不允许更新后数据发生跨分区的移动。
可以用如下命令开启行移动:
alter table t_partrangetab ENABLE ROW MOVEMENT;

五、临时表

临时表的数据存储于 TEMP 临时表空间。临时表有两种类型:会话级和事务级。临时表可以创建索引。
DM 临时表默认是全局 GLOBAL 临时表
1、会话级(ON COMMIT PRESERVE ROWS)临时表,数据对整个会话有效;
2、事务级(ON COMMIT DELETE ROWS)临时表仅对一个事务有效(提交后数据自动清空)。

-- 创建会话级临时表:
create TEMPORARY table t_tmpsess
(id int, name VARCHAR(20)) ON COMMIT PRESERVE ROWS;

-- 创建事务级临时表:
create TEMPORARY table t_tmptrac
(id int, name VARCHAR(20)) ON COMMIT DELETE ROWS;

-- 查看临时表信息
select t.TABLE_NAME, t.TABLESPACE_NAME, t.DURATION
from USER_TABLES t
where t.TEMPORARY='Y';

-- DM 新版本(202501 之后的版本可以支持程序块中创建局部临时表)
begin
create table #TMP1 (id int, name VARCHAR(20));
insert into #TMP1(id, name) values(1,'a');
commit;
select * from #TMP1;
end;

--临时表空间的清理
alter tablespace temp resize datafile 'TEMP.DBF' to 32;

六、外部表

外部基表是只读的,不允许增删改,不允许TRUNCATE;不支持指定约束,不支持创建索引。
用户创建外部表必须具有指定目录的读写权限(因为外部表查询时会在目录下生成日志文件)。

外部表创建需要指定数据库目库(新版本)
grant CREATE ANY directory to test; --新版本需要创建directory权限
create directory dir_data as '/dm8/backup/data';
grant read, write on directory dir_data to test;

查询目录:
select * from DBA_DIRECTORIES; --SYSDBA权限查看

创建外部表:可以指定数据文件创建外部表,也可以指定控制文件创建外部表。
方式一、指定数据文件创建外部表
(1)创建测试文件 emp.txt
cd /dm8/backup/data
vim emp.txt

###################################
"EMPID","EMPNAME","DEPTID"
11,张三,1001
12,李嘉,1001
13,王五,1002
14,赵六,1003
15,李学光,1005
16,陈子李,1005
17,赵乾,1005
###################################

确认权限正确(很重要!!!)
chown dmdba:dinstall emp.txt

(2)创建外部表
create EXTERNAL TABLE t_extemp (
"EMPID" INT,
"EMPNAME" VARCHAR(20),
"DEPTID" INT
)
from DATAFILE DEFAULT DIRECTORY dir_data LOCATION('emp.txt')
parms (FIELDS DELIMITED by ',', RECORDS DELIMITED by 0x0a, SKIP 1);

外部表的参数选项
FIELDS DELIMITED BY ',' -- 假设分隔符是逗号','
RECORDS DELIMITED BY 0x0a -- Windows换行符0x0d0a,Linux通常用0x0a
SKIP 1 -- 跳过行数
CHARACTER_CODE 'UTF-8' -- 指定数据文件中数据的编码格式,默认为 GBK,可选项有 GBK,UTF-8,SINGLE_BYTE 和 EUC-KR;

查询外部表:
select * from t_extemp;

方式二、指定控制文件创建外部表:
(1)创建测试文件 dept.txt
cd /dm8/backup/data
vim dept.txt

###################################
"DEPTID"|"DEPTNAME"
1001|人力资源部
1002|财务部
1003|公关部
1004|销售部
###################################

确认权限正确(很重要!!!)
chown dmdba:dinstall dept.txt

(2)编写控制文件
vim dept.ctl

#########################
options
(skip=1)
load data
infile 'dept.txt'
into table t_extdept
fields '|'
#########################

确认权限正确(很重要!!!)
chown dmdba:dinstall dept.ctl

(3)基于控制文件创建外部表
create EXTERNAL TABLE t_extdept (
"DEPTID" INT,
"DEPTNAME" VARCHAR(20)
)
from DEFAULT DIRECTORY dir_data LOCATION ('dept.ctl');

查询外部表:
select * from t_extdept;

七、分区索引和全文索引

在 DM 中,全文索引必须在基表上定义,而不能在系统表、视图、临时表、列存储表、外部表上定义。同一列只能创建一个全文索引。DM 定义全文索引时,不需要在表上先建立主关键字索引。创建全文索引的列类型可为 CHAR、 CHARACTER、 VARCHAR、 VARCHAR2、LONGVARCHAR、 TEXT 或 CLOB,例如上节对 address 表创建的全文索引列为 VARCHAR类型。 DM 的全文索引现只支持简体中文、英文语言。较为详细的语法介绍可参考《DM8_SQL语言使用手册》。

DM 中分区表创建索引,默认创建的是局部(LOCAL)索引;指定全局关键字 GLOBAL 则为创建全局索引。一般分区表查询 where 条件里带上了分区键, 查询列就用局部(LOCAL)索引;

创建全文索引需要 CREATE CONTEXT INDEX 权限
grant CREATE CONTEXT INDEX to TEST;

准备测试表
create table TEST.T_CONTEXTTAB(
ID INT,
MSG TEXT
)

造测试数据
INSERT INTO TEST.T_CONTEXTTAB VALUES(1,'用户标识与鉴别对试图登录数据库进行数据访问的用户进行身份验证,以确认此用户是否能与某一数据库用户进行关联,并根据关联的数据库用户的权限对此用户在数据库中的数据访问活动进行安全控制。');
INSERT INTO TEST.T_CONTEXTTAB VALUES(2,'审计机制是 DM 数据库管理系统安全管理的重要组成部分之一。DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。');
INSERT INTO TEST.T_CONTEXTTAB VALUES(3,'DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。两个层次的加密互不影响,可以同时使用。因为任何一种加密方式都足够安全,而且双重加密会占用更多的数据库资源,所以通常情况下,没必要同时开启这两种加密。');
INSERT INTO TEST.T_CONTEXTTAB VALUES(4,'用户的资源限制管理有两种方式:方式一,将用户关联到某个已存在的 PROFILE 对象上,之后用户的资源限制由关联的PROFILE 统一管理配置,且无法再使用方式二中的 LIMIT <资源设置>设置资源设置项。方式二,未关联 PROFILE 的用户使用 LIMIT <资源设置>设置资源设置项。新建用户默认使用方式二管理资源设置,在关联到 PROFILE 时,之前已设置的资源限制项会立即失效。');

创建全文索引(事务提交后增量更新填充索引信息:SYNC TRANSACTION)
create context index CTI_CONTEXTTAB_MSG
on TEST.T_CONTEXTTAB(MSG)
tablespace "TEST"
lexer DEFAULT_LEXER
sync transaction;

查看全文索引分词表:
select * from "CTI$CTI_CONTEXTTAB_MSG$D";
select * from "CTI$CTI_CONTEXTTAB_MSG$I";
select * from "CTI$CTI_CONTEXTTAB_MSG$P";
select * from "CTI$CTI_CONTEXTTAB_MSG$N";

执行全文检索
select * from t_contexttab t where CONTAINS(T.MSG, '通信安全');

全文索引更新
--自动:创建索引时如果指定 sync transaction,事务提交后会自动填充
--手动:完全填充和增量填充
alter CONTEXT index CTI_CONTEXTTAB_MSG ON T_CONTEXTTAB REBUILD;
alter CONTEXT index CTI_CONTEXTTAB_MSG ON T_CONTEXTTAB INCREMENT;

全文索引的删除
drop CONTEXT index CTI_CONTEXTTAB_MSG ON T_CONTEXTTAB;

全文索引的查看
select * from SYSCONTEXTLIBS; --记录全文索引所需要的词库信息
select * from SYSCONTEXTINDEXES; --全文索引信息

八、统计信息收集

手工收集统计信息
-- 收集单个表的统计信息(会同时收集列、索引的信息)
DBMS_STATS.GATHER_TABLE_STATS('模式名', '表名');

-- 显示表的统计信息
DBMS_STATS.TABLE_STATS_SHOW('模式名', '表名');
-- 显示列的统计信息
DBMS_STATS.COLUMN_STATS_SHOW('模式名', '表名', '列名');

-- 收集表中特定索引的统计信息
DBMS_STATS.GATHER_INDEX_STATS('模式名', '索引名');
-- 显示索引的统计信息
DBMS_STATS.INDEX_STATS_SHOW('模式名', '索引名');

-- 导出统计信息(以列的统计为例,会返回两个结果集,所以column_stats_show之后,要加 more 继续输出第二个结果集才算完整)
SQL> spool '/dm8/backup/stat.txt'
SQL> dbms_stats.column_stats_show('TEST', 'T2', 'OPTYPE');
SQL> more
SQL> spool off

-- 查看收集到的结果
cat /dm8/backup/stat.txt

九、序列

-- 创建序列
CREATE SEQUENCE TEST.SEQ_TEST
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999999
MINVALUE 1
CYCLE
CACHE 20;

-- 序列查询
select seq_test.currval;
select seq_test.nextval;

-- 序列删除
drop SEQUENCE seq_test;

十、同义词

同义词包含普通同义词和公共同义词。
当普通同义词和公共同义词名称相同时,默认用户访问的是当前模式下的同义词。

-- 创建同义词
create SYNONYM emp FOR T_EXTEMP; --普通同义词
create PUBLIC SYNONYM emp FOR "SYSDBA"."EMP"; --公共同义词

-- 删除同义词
drop SYNONYM emp;
drop PUBLIC SYNONYM emp;

十一、物化视图

刷新方法
1、FAST:根据相关表上的数据更改记录进行增量刷新。普通 DML 操作生成的记录存在于物化视图日志。使用 FAST 刷新之前,必须先建好物化视图日志。
2、COMPLETE:通过执行物化视图的定义脚本进行完全刷新。
3、FORCE:默认选项。当快速刷新可用时采用快速刷新,否则采用完全刷新。

刷新时机
1、ON DEMAND:由用户通过 REFRESH 语法进行手动刷新。如果指定了 START WITH 和 NEXT 子句就没有必要指定 ON DEMAND。
2、ON COMMIT:在相关表上事务提交时进行快速刷新。刷新是由异步线程执行的,因此 COMMIT 执行结束后可能需要等待一段时间物化视图数据才是最新的。包含远程表的物化视图不支持 ON COMMIT 快速刷新。
3、START WITH datetime_expr | NEXT datetime_expr:START WITH 用于指定首次刷新物化视图的时间,NEXT 指定自动刷新的间隔;如果省略 START WITH 则首次刷新时间为当前时间加上 NEXT 指定的间隔;如果指定 START WITH 省略 NEXT 则物化视图只会刷新一次;如果二者都未指定物化视图不会自动刷新。

--样例1
create materialized view MVTEST
refresh on demand
force
as
select USERID, USERNAME from T_PARTRANGETAB;

--样例2
create materialized view MVTEST
refresh start with datetime'2025-07-18 01:00:00' next trunc(sysdate)+1
force
as
select USERID, USERNAME from T_PARTRANGETAB;

修改物化视图的刷新方式
alter MATERIALIZED VIEW MVTEST REFRESH START WITH datetime'2025-07-18 00:00:00' NEXT trunc(sysdate)+1; --定时刷新
alter MATERIALIZED VIEW MVTEST NEVER REFRESH; --从不刷新
alter MATERIALIZED VIEW MVTEST REFRESH FORCE on DEMAND; --需要时手动刷新

手动刷新:
方式一:refresh MATERIALIZED VIEW MVTEST force;
方式二:dbms_mview.REFRESH('TEST.MVTEST','C'); --参数1:指定的要刷新的物化视图名称,多个物化视图则用逗号隔开;参数2:对应物化视图的刷新方式,'F'表示快速刷新,'C'表示完全刷新,空串表示默认刷新方式。

如果方式二无权限,则需要授权
grant EXECUTE on SYS.DBMS_MVIEW to TEST;

查看物化视图:
select * from USER_MVIEWS;

十二、数据库审计

DM 数据库的审计必须使用 SYSAUDITOR 审计员来操作。

登录 SYSAUDITOR 用户

-- 开启审计
SP_SET_ENABLE_AUDIT (1); --控制是否开启审计,立即生效, param 有三种取值:0:关闭审计;1:打开普通审计;2:打开普通审计和实时审计;默认值为 0。

-- 查看当前审计状态
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';

审计日志文件目录,默认使用的是 SYSTEM_PATH(dm.ini 中),也可以 dm.ini 在增加 AUD_PATH 参数指定审计日志文件的存放目录。

-- 语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象

例1:审计表的创建、修改、删除和清空。
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');

例2:对 SYSDBA 创建、修改、删除用户成功进行审计。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');

例3:对用户 USER2 进行的表的修改和删除进行审计,不管失败和成功。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');

取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');

-- 对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
其中,对于 UPDATE 和 DELETE 操作,因为也需要做 SELECT 操作,所以只要设置审计 SELECT 操作时,UPDATE 和 DELETE 也会作为 SELECT 操作被审计

例1:对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');

例2:SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功的操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');

取消审计语句和设置审计语句进行匹配,只有完全匹配的才可以取消审计,否则无法取消审计。
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');

-- 关于审计设置的一些说明
1、只要审计功能被启用,系统级的审计记录就会产生;
2、在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置;
3、语句级审计不针对特定的对象,只针对用户;
4、对象级审计针对指定的用户与指定的对象进行审计;
5、在设置审计时,审计选项不区分包含关系,都可以设置;
6、在设置审计时,审计时机不区分包含关系,都可以进行设置;
7、如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。

-- 查看审计文件配置
select * from V$AUDIT_SPACE;

-- 查看审计相关的表有哪些
select * from v$dynamic_tables t where t.name like '%AUDIT%';

-- 查看审计日志内容
select * from V$AUDITRECORDS; --审计文件的审计记录(常用)
select * from V$AUDIT_SPACE; --审计文件相关信息
select * from V$AUDIT_FILE;
select * from V$DBMSAUDIT_FILE;

十三、快速装载

dmfldr help --查看命令帮助

-- 快速装载导入:
MODE 为 IN 时表示载入(默认为 IN), MODE 为 OUT 表示载出。
编写控制文件,基于 dept.txt 数据文件,将数据文件中数据装载至 T_DEPT 表。

建表
CREATE TABLE T_DEPT(
"DEPTID" INT,
"DEPTNAME" VARCHAR (100)
);

t_dept.txt内容如下:
###################################
"DEPTID"|"DEPTNAME"
91001|人力资源部
91002|财务部
91003|公关部
91004|销售部
###################################

编写控制文件
vim t_dept.ctl
########################
options
(skip=1)
load data
infile 'dept.txt'
into table t_dept
fields '|'
########################

使用控制文件装载数据:
dmfldr userid=test/Dameng123 control='t_dept.ctl' mode='IN'

-- 快速装载导出:
快速装载导出(导出需要增加 mode='OUT'参数)
将视图VTEST中的数据进行格式化,并导出

创建视图
CREATE OR REPLACE VIEW TEST.VTEST
AS
SELECT LOGTIME, USERID, USERNAME
FROM T_PARTRANGETAB
WHERE USERID <= 100;

vim vtest.ctl

########################
load data
infile 'vtest.txt' --导出路径
into table VTEST
fields ','
(
USERID,
USERNAME enclose by '"', --用双引号包起来
LOGTIME date format 'YYYYMMDD' --格式化日期
)
########################

使用控制文件导出数据:
dmfldr userid=test/Dameng123 control='vtest.ctl' mode='OUT'

查看导出的文件
cat vtest.txt

十四、数据库归档

-- 开启归档
查看数据库当前模式
SELECT name, status$, arch_mode FROM v$database;

修改数据库置为 mount 状态
SQL> alter database mount;

启用归档模式
SQL> alter database archivelog;

配置归档路径
SQL> alter database add archivelog 'DEST=/dm8/arch,TYPE=LOCAL,FILE_SIZE=64,SPACE_LIMIT=0';
SQL> select * from v$dm_arch_ini;

打开数据库
SQL> alter database open;

查看数据库当前模式
SELECT name, status$, arch_mode FROM v$database;

查看归档配置
SELECT * FROM V$ARCHIVED_LOG;

十五、备份与还原

-- 整库备份
冷备和热备
冷备(脱机备份):DMAP 服务是打开的,数据库实例是关闭的。
热备:DMAP 服务是打开的,数据库实例也是打开的,数据库是归档模式。

设置备份路径为/dm8/backup
$ mkdir -p /dm8/backup
$ chown dmdba:dinstall /dm8/backup
$ vim /dm8/data/DAMENG/dm.ini

#######################
BAK_PATH = /dm8/backup
#######################

冷备:
先关闭数据库服务
./DmServiceDMSERVER stop

方式一:可使用 console 工具可视化操作(dmdba运行,不要root)
方式二:使用 DMRMAN 工具来冷备
cd /dm8/bin
./dmrman
RMAN> backup database '/dm8/data/DAMENG/dm.ini' full backupset '/dm8/backup/20250730'; --默认全量备份,存放 dm.ini 的 BAK_PATH 中
RMAN> check backupset '/dm8/backup/20250730'; --检查备份
RMAN> exit

启动数据库服务
./DmServiceDMSERVER start

热备:
先开启归档模式,必须是 SYSDBA 或具有 DBA 角色的用户

方式一:可使用 manager 工具可视化操作(dmdba运行,不要root)
方式二:使用命令
backup database full backupset '/dm8/backup/20250730';

查看所有备份集
SELECT * FROM V$BACKUPSET;

-- 备份还原
如果是异机还原,需要传输备份文件过去
scp -r /dm8/backup/20250730 dmdba@10.2.0.112:/dm8/backup/

检查文件权限
chown dmdba:dinstall -R /dm8/backup/20250730

方式一:可使用 console 工具可视化操作(dmdba运行,不要root)
方式二:使用 DMRMAN 工具来还原
先关闭数据库服务
./DmServiceDMSERVER stop

./dmrman
RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/20250730'
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/20250730'
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC
RMAN> exit

启动数据库服务
./DmServiceDMSERVER start

十六、常用运维sql

--查询活动会话数
select count(*) from v$sessions where state='ACTIVE';

--已执行超过2秒的活动SQL
select * from (
SELECT sess_id,sql_text,datediff(ss,last_send_time,sysdate) Y_EXETIME,SF_GET_SESSION_SQL(SESS_ID) fullsql,clnt_ip
FROM V$SESSIONS WHERE STATE='ACTIVE')
where Y_EXETIME>=2;

--锁查询
select o.name,l.* from v$lock I,sysobjects o where I.table_id=o.id and blocked=1;

--阻塞查询
with locks as(
select o.name,l.*,s.sess_id,s.sql_text,s.clnt_ip,s.last_send_time from v$lock l,sysobjects o,v$sessions s
where l.table_id=o.id and l.trx_id=s.trx_id ),
lock_tr as ( select trx_id wt_trxid,row_idx blk_trxid from locks where blocked=1),
res as( select sysdate stattime,t1.name,t1.sess_id wt_sessid,s.wt_trxid,
t2.sess_id blk_sessid,s.blk_trxid,t2.clnt_ip,SF_GET_SESSION_SQL(t1.sess_id) fulsql,
datediff(ss,t1.last_send_time,sysdate) ss,t1.sql_text wt_sql from lock_tr s,locks t1,locks t2
where t1.ltype='OBJECT' and t1.table_id<>0 and t2.ltype='OBJECT' and t2.table_id<>0
and s.wt_trxid=t1.trx_id and s.blk_trxid=t2.trx_id)
select distinct wt_sql,clnt_ip,ss,wt_trxid,blk_trxid from res;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服