达梦数据库体系学习分享

          随着IT科技的发展,数据逐渐成为社会和企业的核心资产,面对纷繁复杂的社会环境,国产化数据库越来越流行,达梦作为国产数据库的佼佼者,深受传统行业和广大金融客户的喜爱。它有着40年深厚的技术沉淀,相信在不久的将来,它将在国产化进程中国脱颖而出,成为国货代表,期待那一天的到来。
今日将个人的学习心得成文发布共享,希望能给你带来一点帮助。
 
目录
1、达梦数据库软件安装
2、初始化数据库实例
3、归档配置
4、修改参数
5、表空间、用户、角色、权限管理
6、备份与还原
7、作业管理
8、安装配置ODBC
 
 
一、DM数据库软件安装
01:新建文件夹(root),下述文件夹在考试时可能不用全部使用
mkdir /dm8 --数据库软件安装目录
mkdir /dmdata --实例安装目录
mkdir /dmarch --归档日志存放目录
mkdir /dmbak --备份文件存放目录
 
02: 新建组及用户
DM 数据库不应该使用 root 用户安装和维护。需要在安装之前为 DM 数据库创建一个专用的系统用户 (dmdba) 和用户组 (dinstall)。
执行以下命令,新建用户组 dinstall:
groupadd dinstall
执行以下命令,新建用户 dmdba:
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
执行以下命令,修改 dmdba 用户密码:
passwd dmdba
输入密码并确认。
 
03:修改属主(root)
chown dmdba:dinstall /dm8
chown dmdba:dinstall /dmdata
chown dmdba:dinstall /dmarch
chown dmdba:dinstall /dmbak
 
04:用户资源限制(使用root)--注:考试时如不能copy命令就不用配置
执行以下命令,修改 dmdba 用户资源限制:
vim /etc/security/limits.conf
文件末尾添加如下内容:
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
 
05:用户环境变量
执行以下命令,修改 dmdba 用户环境变量:
vi /home/dmdba/.bash_profile
文件末尾添加如下内容:(安装路径有变化的话需进行修改/dm8)
export DM_HOME=/dm8
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
 
06:安装数据库(脚本)
1、安装数据库软件
将安装包上传到服务器后使用 root 用户挂载 iso 安装包文件到 /mnt 目录下(使用root):
--切换到程序安装包所在目录
cd /opt
--挂载iso,主要安装包文件名可能不同
mount -oloop dm8_20200930_x86_rh6_64_ent_8.1.1.134.iso /mnt
 
执行以下命令,切换到 dmdba 用户:
su - dmdba
切换到/mnt
cd /mnt
查看文件
执行 DMInstall.bin 文件开始安装,选择【-i】参数以命令行方式安装:
./DMInstall.bin -i
  1. 选择安装程序的语言 c/C 为中文,e/E 为英文。选c
  2. 提示是否安装 key 文件,输入 N 跳过。
  3. 选择时区,21 即东 8 区。
  4. 选择安装类型,默认典型安装(包含所有内容)。
5.选择软件安装目录,为之前规划的目录 /dm8。
6.确认安装目录。
7.确认安装概要。
8.开始安装
9.安装完成后,按照系统提示使用 root 用户执行脚本。重要
/dm8/script/root/root_installer.sh
提示 DmAPService 服务启动成功,则安装完成。
 
--查看服务状态
./DmServiceDMSERVER status
 
二、初始化数据库实例
使用 dminit 工具初始化实例(使用用户dmdba)。
1、初始化实例
执行以下命令,切换到 /dm8/bin 目录。(这里page size保持默认8k)
cd /dm8/bin
./dminit path=/dmdata page_size=8 SYSDBA_PWD=password db_name=DAMENG
 
注意
初始化参数中除了 path 参数必须指定,其它参数都有默认值,如果需求与默认值不同,初始化的时候请指定需要的值。因为部分参数初始化后是无法修改的例如:page_size(页大小),charset(字符集),case_sensitive(大小写敏感)等。更多参数./dminit help 查看,是否无法修改的参数可以查询 v$dm_ini 视图,para_type=’READ ONLY’ 表示无法修改。
使用dminit 初始化数据库实例的方式,必须手工注册并启动dm服务。
 
2、实例注册与启动
以系统服务方式启动实例,DM 提供脚本将数据库实例注册为操作系统服务。
root 用户下切换到 /dm8/script/root/:
cd /dm8/script/root/
注册服务:(DAMENG为实例名称)
./dm_service_installer.sh -t dmserver -p dmserver -dm_ini /dmdata/DAMENG/dm.ini
tips:
-t 指服务类型是 dmserver;-p 为服务名的后缀;-dm_ini 为实例的 dm.ini 文件的绝对路径。
启动实例:
systemctl start DmServicedmserver
 
扩展:
systemctl stop DmServicedmserver
systemctl restart DmServicedmserver
systemctl status DmServicedmserver
 
建议
每个实例都建议注册为操作系统服务,这样不仅方便启动和关闭实例,而且注册为服务后,在服务器重启时,实例将随系统启动而自动启动。
 
3、连接数据库
执行以下命令,切换到 /dm8/bin 目录:
 
cd /dm8/bin
 
执行以下命令,使用 disql 工具连接数据库:
 
./disql SYSDBA/SYSDBA@localhost:5236
 
登录成功,如下图所示:
提示
默认创建的实例,管理员用户 SYSDBA 的密码为 SYSDBA(考试时可能需要指定密码) ,实例端口为 5236,字符集为 GB18030,大小写敏感。
 
三、归档配置
 
--方案一:脚本
生产环境必须开启归档日志,且必须限制归档日志保留量,限制方法:
  1. 设置归档空间大小限制即指定 SPACE_LIMIT 参数(单位是 MB)。
  2. 定期删除归档日志(设置定时作业)。
例如开启归档并限制归档空间为 10 GB,如下所示:
alter database mount;
alter database add archivelog 'dest=/dmarch,type=local,FILE_SIZE=64,SPACE_LIMIT=10240';
alter database archivelog;
alter database open;
 
--方案二:界面配置
su - dmdba
cd /dm8/tool
export DISPLAY=192.*.*.*:0.0
./manager
调出下述界面

 

将数据库修改未mount状态。
配置数据库归档路径及大小
将数据库修改至open状态
 
至此,数据库归档界面配置结束。
 
四、修改参数
 
readonly:只读参数,只能通过dm.ini方式修改
需要重启才能生效。不能联机修改
sys:动态参数(系统级)参数
session:动态(会话级)参数
in-file:静态参数,可以在数据库运行时修改,只能修改配置文件中的值,不能修改内存中的值,。需要重启生效。
 
示例参数
参数名称
参数含义
参数默认值
参数建议
BUFFER
系统缓冲区大小,以 MB 为单位
100
系统物理内存的 60%~80%
BUFFER_POOLS
BUFFER 系统分区数
19
物理内存 64 GB 以下 53 GB 以上
MAX_SESSIONS
系统允许同时连接的最大数
100
1000
HJ_BUF_SIZE
单个 HASH 连接操作符的数据总缓存大小,以 MB 为单位
50
500
DICT_BUF_SIZE
字典缓冲区大小,以 MB 为单位
5
100
TASK_THREADS
任务线程个数
4
CPU 核数
修改方式:
方式一:参数设置函数
使用函数SP_SET_PARA_VALUE进行参数设置
SP_SET_PARA_VALUE:修改整型参数。
SP_SET_PARA_DOUBLE_VALUE:修改浮点型参数:
SP_SET_PARA_STRING_VALUE:修改字符型参数:
参数值解释:
首位标识:
memory:0更新内存中的值,重启后失效
both:1为内存和文件
spfile :2为配置文件,需重启生效
示例:
SP_SET_PARA_VALUE (0,'HJ_BUF_GLOBAL_SIZE',5000);
SP_SET_PARA_VALUE (1,'HJ_BUF_SIZE',500);
SP_SET_PARA_VALUE (2,'MAX_SESSIONS',1000);
SP_SET_PARA_VALUE (2,'MAX_SESSION_STATEMENT',20000);
SP_SET_PARA_VALUE (2,'CACHE_POOL_SIZE',200);
SP_SET_PARA_VALUE (2,'DICT_BUF_SIZE',100);
 
方式二:alter方式
alter system set 参数 memory|spfile|both(三种指定方式)
示例:
alter system set 'PWD_POLICY'=31 memory
alter system set 'PWD_POLICY'=31 spfile
alter system set 'PWD_POLICY'=31 both
 
五、创建表空间、用户、角色、权限管理
 
***参考手册《DM8_SQL语言使用手册.pdf》安装完dm后在dm8/doc下面***
 
(一)脚本方式:
 
1、表空间(使用disql登录数据库执行,32后面没有单位,默认MB,但不能写成32M)
 
--创建表空间
create tablespace TS1 datafile '/dmdata/zttest01.dbf' size 32;
--修改表空间
--重命名表空间
ALTER TABLESPACE TS1 RENAME TO TS2;
--修改增长方式
ALTER TABLESPACE TS1 DATAFILE 'd:\TS1.dbf' AUTOEXTEND ON NEXT 10 MAXSIZE 1000;
--新增数据文件
ALTER TABLESPACE TS1 ADD DATAFILE 'd:\TS1_1.dbf' SIZE 128;
--调整数据文件大小
ALTER TABLESPACE TS1 RESIZE DATAFILE 'd:\TS1.dbf' TO 200;
--变更表空间数据文件位置及名称
ALTER TABLESPACE TS1 OFFLINE;
ALTER TABLESPACE TS1 RENAME DATAFILE 'd:\TS1.dbf' TO 'e:\TS1_0.dbf';
ALTER TABLESPACE TS1 ONLINE;
--删除表空间
drop tablespace TS1;
 
2、用户
 
--创建用户
CREATE USER Ztuser IDENTIFIED BY password123456;
--授权
grant resource,select ,update,delete,insert on sunyf to Ztuser;
--回收权限
revoke select on sunyf from Ztuser;
--删除用户
drop user Ztuser cascade;
 
3、角色
--创建角色
create role ztrole;
--给角色授权
grant select on sunyf to ztrole;
grant resource,dba on sunyf to ztrole;
--将role授予用户
grant ztrole to Ztuser;
--角色禁用与启用
sp_set_role('ztrole',0) --角色禁用
sp_set_role('ZTROLE',1) 角色启用
--删除用户和角色 drop role ztrole 删除角色
 
 
(二)界面方式:
 
 
六、创建表、索引、视图、批量插入数据、约束
1.表
--创建表
--参考语句
CREATE TABLE PRODUCTION.PRODUCT_REVIEW (
PRODUCT_REVIEWID INT IDENTITY(1,1),
PRODUCTID INT NOT NULL, NAME VARCHAR(50) NOT NULL,
REVIEWDATE DATE NOT NULL, EMAIL VARCHAR(50) NOT NULL,
RATING INT NOT NULL,
COMMENTS TEXT,
PRIMARY KEY(PRODUCT_REVIEWID),
FOREIGN KEY(PRODUCTID) REFERENCES PRODUCTION.PRODUCT(PRODUCTID), CHECK(RATING IN(1,2,3,4,5)) );
注:外键约束需确保PRODUCTION.PRODUCT表存在方可。
示例:
create table sunyf(id int,name varchar(32));
2、批量插入数据
DM 在 DISQL 下用 start 或`都可以, Oracle 用@:
SQL> start /dmdata/dmsql.sql
SQL> `/dmdata/dmsql.sql
SQL>commit;
注意:考试时要显示提交一下
3、索引
--创建索引
语法
CREATE [OR REPLACE] [CLUSTER|NOT PARTIAL][UNIQUE | BITMAP| SPATIAL] INDEX < 索引名> ON [<模式名>.]<表名>(<索引列定义>{,<索引列定义>}) [GLOBAL] [] [NOSORT] [ONLINE] [REVERSE] [UNUSABLE];
示例:
create index idx_name on sunyf(name);
4、视图
语法:
CREATE [OR REPLACE] VIEW [<模式名>.]<视图名>[(<列名> {,<列名>})] AS <查询说明> [WITH [LOCAL|CASCADED]CHECK OPTION]|[WITH READ ONLY]; <查询说明>::=<表查询> | <表连接> <表查询>::=<子查询表达式>[ORDER BY 子句]
示例:
create view v_name as select * from sunyf where id>1;
5、约束
约束类型:
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);
主键约束
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;
七、备份与还原
1、逻辑备份与还原(使用dmdba用户)
dexp/dimp 逻辑导出和导入
说明:
dexp 逻辑导出、dimp 逻辑导入四个级别:
全库(full=y)
按用户(owner=XXX)
按模式(schemas=XXX)
按表(tables=XX)
(1)逻辑导出
--全库导出
dexp userid=sysdba/password:5236 directory=/dmbak file=full.dmp log=full.log full=y
--按用户导出,用户sunyf下面所有对象
dexp userid=sysdba/password:5236 directory=/dmbak file=sunyf.dmp log=sunyf.log owner=sunyf
--按模式导出
dexp userid=sysdba/password:5236 directory=/dmbak file=sunyfsc.dmp log=sunyfsc.log schemas=sunyf
--按表导出
dexp userid=sysdba/password:5236 directory=/dmbak file=tables.dmp log=tables.log tables=sunyf.test
--多表一起导出
dexp userid=sysdba/password:5236 directory=/dmbak file=tables3.dmp log=tables.log tables=sunyf.test,sunyf.sunyf
(2)逻辑导入
--全库导入
dimp userid=sysdba/password:5236 directory=/dmbak file=full.dmp log=impfull.log full=y
--按用户导入
dimp userid=sysdba/password:5236 directory=/dmbak file=full.dmp log=impuser.log owner=sunyf
--按schema导入(恢复成别的名称无需提前建用户)
按模式导入(将 A 模式导入到 B 模式,使用 REMAP_SCHEMA 参数):
dimp userid=sysdba/syf861217:5236 directory=/dmbak file=sunyfsc.dmp log=impsunyf:.log REMAP_SCHEMA=sunyf:DMTEST1
 
--按表导入,(恢复成别的名称无需提前建用户)
(从A模式导入到B模式,使用 REMAP_SCHEMA 参数)
dimp userid=sysdba/password:5236 directory=/dmbak file=tables.dmp log=t_table.log tables=sunyf.test remap_schema=sunyf:Ztuser
 
2、物理备份与还原
select * from v$parameter t where name in ('BAK_PATH', 'BAK_USE_AP');
BAK_PATH:DM 默认的备份路径,生成环境不要和源库数据文件放在同一磁盘上。避免磁 盘损坏,数据文件和备份文件同时损坏的情况。
BAK_USE_AP:备份还原策略,默认使用 DMAP 辅助进程。
 
(一)联机备份:数据库是启动状态,联机备份要求数据库打开归档。
方案一:界面方式(联机)
1、备份
若使用达梦联机备份功能必须满足以下两个条件:(切记)
(1)、开启归档!!开启归档参考前文中的描述.
(2)、必须启动AP 服务,否则报【-7170: bakres 连接 DMAP 失败】错
查看 AP 服务是否启动(使用dmdba用户):
ps -ef|grep dmap
 

 
查看备份文件:
 

 
方案二:脚本备份(联机)
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 SF_BAKSET_CHECK('DISK','/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/'); 90 / 100
表空间备份
backup tablespace dmtbs; backup tablespace dmtbs INCREMENT with BACKUPDIR '/dm8/backup/full/' to DMTBSINCR_01 backupset '/dm8/backup/incr/DMTBSINCR_01' ;
表和归档的备份
--表的备份
backup table dmhr.employee;
--归档备份
backup ARCHIVELOG all;
 
2、联机还原
库级、表空间的还原和恢复不支持联机恢复,只支持脱机还原恢复。
 
(二)脱机备份与还原
--查询数据库永久魔数
select permanent_magic;
--查询数据库当前魔数
select db_magic from v$rlog;
方案一:界面方式(脱机)
使用 console 控制台工具脱机备份和还原
su - dmdba
cd /dm8/tool
export DISPLARY=IP:0.0
./console
调出下面界面
1、备份:
2、还原:
3、恢复:
4、更新数据魔数
 
方案二:脚本方式(脱机)
使用 dmrman 工具可以脱机备份与还原、恢复(待补充)
dmrman在安装路径bin下
 
1、脱机备份 库备份(冷备)
RMAN> backup database '/dm8/data/DM/dm.ini';
2、脱机恢复
(1)还原数据库完整备份
  • 01数据库还原
restore database '/dmdata/zt/dm.ini' from backupset '/dmdata/zt/bak/DB_zt_FULL_2022_04_27_16_41_52'
  • 02数据库恢复
recover database '/dmdata/zt/dm.ini' with archivedir '/dmarch';
  • 03更新数据库魔数
recover database '/dmdata/zt/dm.ini' update db_magic;
然后重新到bin目录下启动数据库服务即可。
(2)还原表空间 ZTuser
restore database '/dmdata/zt/dm.ini' tablespace ZTuser from backupset '/dmdata/zt/bak/DB_zt_FULL_2022_04_27_16_41_52'
 
八、作业
(一)界面方式
1、创建代理环境
执行存储过程代理环境:sp_init_job_sys(1);
或界面上右击【代理】,选择【创建代理环境】:
 

2、创建代理环境后会创建 sysjob 模式。
3、创建作业
DM 管理工具创建 JOB:

 

第一步:常规,输入作业名称
第二步:作业步骤,点【添加】
拉到添加步骤界面,选择【备份数据库】,job名称不能仅使用数字
输入备份路径,选择备份方式
确定后,来到【作业调度】页面,添加【新建】
设置具体的备份策略:
 
点击【确定】即可完成。
检查job执行记录:
JOB 运行和日志查看
--查看job
select * from sysjob.sysjobs;
--运行job
dbms_job.run(1640162093);
--查看job运行日志
select * from SYSJOB.SYSJOBHISTORIES2;
--执行完全检查点
checkpoint(100);
 
(二)脚本示例
定制备份策略
上线前必须规划好备份策略,可以使用 DM 作业系统,定时备份。
根据应用需求,定制备份策略如下所示:
备份类型 备份周期 备份时间
全量备份 每周 每周五 23 点
增量备份 每天 除周五外每天 23 点
删除备份 每天 每天 23 点 30
执行以下命令,创建作业系统表:
SP_INIT_JOB_SYS(1);
 
全量备份(每周五 23 点全备):
call SP_CREATE_JOB('bakfull',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakfull');
call SP_ADD_JOB_STEP('bakfull', 'bak01', 6, '01000000/dmbak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakfull', 'bak01', 1, 2, 1, 32, 0, '23:00:00', NULL, '2020-11-02 14:42:15', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakfull');
 
增量备份(每周除周五外每天 23 点增量备份):
call SP_CREATE_JOB('bakincr',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('bakincr');
call SP_ADD_JOB_STEP('bakincr', 'bak02', 6, '11000000/dmbak', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('bakincr', 'bak2', 1, 2, 1, 95, 0, '23:00:00', NULL, '2020-11-02 14:44:30', NULL, '');
call SP_JOB_CONFIG_COMMIT('bakincr');
 
备份定期删除(每天 23:30 删除 14 天前备份):
call SP_CREATE_JOB('delbak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('delbak');
call SP_ADD_JOB_STEP('delbak', 'bak1', 0, 'SF_BAKSET_BACKUP_DIR_ADD(''DISK'',''/dmbak'');call sp_db_bakset_remove_batch(''DISK'',now()-14);', 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE('delbak', 'del01', 1, 1, 1, 0, 0, '23:30:00', NULL, '2020-11-02 14:48:41', NULL, '');
call SP_JOB_CONFIG_COMMIT('delbak');
 
九、安装配置ODBC(只能在麒麟系统中运行)
1、:安装unixODBC(使用root)
tar -zxvf unixODBC-2.3.0.tar.gz
chmod 775 *
cd unixODBC-2.3.0/
./configure
make
make install
 
2、 配置 odbc.ini 数据源信息和 odbcinst.ini 驱动信息(使用root用户)
[root@KylinDCA03 unixODBC-2.3.0]# cd /usr/local/etc/
[root@KylinDCA03 etc]# ll
总用量 0
drwxr-xr-x 2 root root 6 12 月 22 16:56 ODBCDataSources
-rw-r--r-- 1 root root 0 12 月 22 16:56 odbc.ini
-rw-r--r-- 1 root root 0 12 月 22 16:56 odbcinst.ini
[root@KylinDCA03 etc]# vim odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver =/dm8/bin/libdodbc.so --(要修改安装目录)
[root@KylinDCA03 etc]# vim odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = SYSDBA
PWD = password123--更换密码
TCP_PORT = 5236
 
[root@KylinDCA03 etc]# cat odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /dm8/bin/libdodbc.so
测试连接:(使用dmdba,使用isql连接,不是disql)
使用 dmdba 用户执行 isql 测试连接是否正常:,不能使用root测试
 

 

 
感谢与你一起学习达梦数据库,支持国产,与达梦一起成长!
 
 
 
 
 
posted @ 2022-04-27 20:02  syforacle  阅读(974)  评论(0编辑  收藏  举报