注册
DCP机考整理
培训园地/ 文章详情 /

DCP机考整理

花开富贵 2025/09/13 110 0 0

--创建实例

su - dmdba
cd /dm8/tool
./dbca.sh

systemctl stop firewalld.service
systemctl disable firewalld.service

export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

--创建表空间
达梦默认的系统表空间:
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;

分区数据清理:
alter table T_PARTRANGETAB truncate PARTITION p2024;
分区删除:
alter table T_PARTRANGETAB drop PARTITION p2024;
分区查询:
select * from SYS.USER_TABLES t where t.PARTITIONED ='YES'; --分区表
select * from USER_TAB_PARTITIONS; --分区信息
select count(*) from T_PARTRANGETAB PARTITION(p2024);

alter table T_PARTRANGETAB truncate PARTITION p202501;

-- 分区交换
create table t_testtab as select * from t_partrangetab where 1=0;
select count(*) from t_testtab;

select count() from t_partrangetab PARTITION(p202501);
alter table t_partrangetab EXCHANGE PARTITION p202501 WITH TABLE t_testtab;
select count(
) from t_partrangetab PARTITION(p202501);
select count(*) from t_testtab;

--临时表
临时表的数据存储于 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权限
mkdir -p /dm8/backup/data
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 test.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;

drop TABLE t_extdept;

create EXTERNAL TABLE t_extdept (
"DEPTID" INT,
"DEPTNAME" VARCHAR(20)
)
from DATAFILE DEFAULT DIRECTORY dir_data LOCATION('dept.txt')
parms (FIELDS DELIMITED by '|', RECORDS DELIMITED by 0x0a, SKIP 1);

options
(skip=1
errors=10
log='t_extdept.log'
character_code='UTF-8')
load data
infile 'dept.txt'
badfile 't_extdept.bad'
into table t_extdept
fields '|'

--索引(普通索引,分区索引,全文索引)
在 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 <索引名>
ON <表名>(<列名>)
[TABLESPACE <表空间名>]
[LEXER <分词器名>]
[SYNC <同步方式>];

create context index CTI_CONTEXTTAB_MSG on TEST.T_CONTEXTTAB(MSG) tablespace TEST 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; --全文索引信息

--序列

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

-- 序列查询

select * from USER_SEQUENCES;
select SEQ_TEST.nextval;
select SEQ_TEST.currval;
select SEQ_TEST.nextval;

-- 序列删除
drop SEQUENCE seq_test;

--同义词

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

-- 创建同义词

select * from dmhr.employee;
create SYNONYM emp FOR dmhr.employee;
select * from emp;

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

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

同义词的数据字典:
SELECT * FROM USER_SYNONYMS;
SELECT * FROM DBA_SYNONYMS;

--物化视图

刷新方法
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-08-25 01:00:00' next trunc(sysdate)+1
force
as
select USERID, USERNAME from t_partrangetab;

修改物化视图的刷新方式
alter MATERIALIZED VIEW MVTEST REFRESH START WITH datetime'2025-08-23 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 PARA_VALUE 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;

-- 故障模拟(备份还原恢复)

-- 整库备份
冷备和热备
冷备(脱机备份):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/20250825'; --默认全量备份,存放 dm.ini 的 BAK_PATH 中
RMAN> check backupset '/dm8/backup/20250825'; --检查备份
RMAN> exit

启动数据库服务
./DmServiceDMSERVER start

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

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

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

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

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

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

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

启动数据库服务
./DmServiceDMSERVER start

--作业

--快速加载(迁移)

dmfldr help --查看命令帮助

-- 快速装载导入:
MODE 为 IN 时表示载入(默认为 IN), MODE 为 OUT 表示载出。

编写控制文件,基于 dept.txt 数据文件,将数据文件中数据装载至 T_DEPT 表。
建表
CREATE TABLE T_DEPT(
"DEPTID" INT,
"DEPTNAME" VARCHAR (100)
);

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

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

使用控制文件装载数据:
dmfldr userid=test/Dameng123 control='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

--参数调整

--收集统计信息、导出统计信息

手工收集统计信息
-- 收集单个表的统计信息(会同时收集列、索引的信息)
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', 'T_TESTTAB', 'USERID');
SQL> more
SQL> spool off

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

dbms_stats.CREATE_STAT_TABLE('DMTEST','T_STATTABLE','TBS');

集群搭建配置(实时主备)、主备切换。

INSTANCE_NAME = GRP1_DM01
MAL_INI = 1
ARCH_INI = 1:
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

上传文件 3 个守护文件
chown -R dmdba:dinstall /dm8

-- 备份
SQL> select mode$,status$,OGUID from v$instance;

行号 MODE$ STATUS$ OGUID


1 NORMAL OPEN 0

backup database backupset '/dm8/backup/fulldb0825';

scp -r /dm8/backup/fulldb0825 192.168.100.89:/dm8/backup/fulldb0825

rm -rf /dm8/data/DAMENG/*

--恢复

restore database to '/dm8/data/DAMENG' from backupset '/dm8/backup/fulldb0825';
recover database '/dm8/data/DAMENG/dm.ini' from backupset '/dm8/backup/fulldb0825';
recover database '/dm8/data/DAMENG/dm.ini' update db_magic;

scp dmmal.ini dmarch.ini dmwatcher.ini dmdba@192.168.100.89:/dm8/data/DAMENG

/dm8/bin/dmserver dm.ini mount

sp_set_oguid(8888);

alter database primary;

sp_set_oguid(8888);

alter database standby;

[root@localhost root]# ./dm_service_installer.sh -t dmwatcher -p DMW01 -watcher_ini /dm8/data/DAMENG/dmwatcher.ini

systemctl start DmWatcherServiceDMW01

select mode$,status$,OGUID from v$instance;

select * from v$arch_status;

[root@localhost root]# ./dm_service_installer.sh -t dmmonitor -p DMMON -monitor_ini /dm8/dmmonitor.ini
systemctl start DmMonitorServiceDMMON

dmmal.ini
#comment: delete '#' at the beginning of a line to uncomment the line
#注释:删除行开头的'#'号可以取消注释

#MAL链路检测时间间隔,取值范围(0s-1800s),默认30s,配置为0表示不进行MAL链路检测,数据守护环境,不建议配置为0,防止网络故障导致服务长时间阻塞
MAL_CHECK_INTERVAL = 5

#判定MAL链路断开的时间,取值范围(2s-1800s),默认10s
MAL_CONN_FAIL_INTERVAL = 5

#MAL名称,同一个配置文件中MAL名称需保持唯一性
[MAL_INST1]

MAL_INST_NAME = DMSERVER1

MAL_HOST = 192.168.100.88

MAL_PORT = 61141

##MAL_INST_HOST = 192.168.1.131

MAL_INST_PORT = 5236

MAL_DW_PORT = 52141

MAL_INST_DW_PORT = 5238

[MAL_INST2]

MAL_INST_NAME = DMSERVER2

MAL_HOST = 192.168.100.89

MAL_PORT = 61141

##MAL_INST_HOST = 192.168.1.131

MAL_INST_PORT = 5236

MAL_DW_PORT = 52141

MAL_INST_DW_PORT = 5238

dmmonitor.ini

MON_DW_CONFIRM = 1

MON_LOG_PATH = /dm8/log

MON_LOG_INTERVAL = 1

MON_LOG_FILE_SIZE = 64

MON_LOG_SPACE_LIMIT = 0

[GROUP_A]

MON_INST_OGUID = 8888

MON_DW_IP = 192.168.100.88:52141
MON_DW_IP = 192.168.100.89:52141

dmarch.ini

#comment: delete '#' at the beginning of a line to uncomment the line
#注释:删除行开头的'#'号可以取消注释

[ARCHIVE_LOCAL1] #REDO日志归档名
ARCH_TYPE = LOCAL #REDO日志归档类型,REALTIME/LOCAL/SYNC/ASYNC/REMOTE 分别表示实时归档/本地归档/同步归档/异步归档/远程归档
ARCH_DEST = /dm8/arch #归档目标,实时归档、同步归档和异步归档设置为远程数据库实例名,本地归档为归档文件存放路径
ARCH_FILE_SIZE = 64 #单个REDO日志归档文件大小,单位Mb,取值范围(64M~2048M),仅对本地归档有效,缺省128M
ARCH_SPACE_LIMIT = 0

[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档
ARCH_DEST = DMSERVER2 #实时归档目标实例名

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服