达梦学习记录
安装
创建用户所在的组,命令如下:
groupadd dinstall
创建用户,命令如下:
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
修改用户密码,命令如下:
passwd dmdba
使用 vi 编辑器打开 /etc/security/limits.conf
文件,命令如下:
vi /etc/security/limits.conf
在最后添加四条语句,需添加的语句如下:
dmdba hard nofile 65536
dmdba soft nofile 65536
dmdba hard stack 32768
dmdba soft stack 16384
切换到 root 用户,将 DM 数据库的 iso 安装包保存在任意位置,例如 /opt 目录下,执行如下命令挂载镜像:
mount -o loop /opt/dm8_setup_rh7_64_ent_8.1.1.45_20191121.iso /mnt
在根目录下创建 /dm8 文件夹,用来安装 DM 数据库。命令如下:
mkdir /dm8
将新建的安装路径目录权限的用户修改为 dmdba,用户组修改为 dinstall。命令如下:
chown dmdba:dinstall -R /dm8/
给安装路径下的文件设置 755 权限。命令如下:
chmod -R 755 /dm8
切换至 dmdba 用户下,在 /mnt 目录下使用命令行安装数据库程序,依次执行以下命令安装 DM 数据库。
su - dmdba
cd /mnt/
./DMInstall.bin -i
The Temp Directory's size is too small, please set the size more than 800M. Or set DM_INSTALL_TMPDIR environment variable to assign the temporary directory of DM Installer.
如果遇到以上报错,则进行/tmp目录的扩容
[root@hdfeng mnt]# sudo mount -t tmpfs -o size=2G none /tmp
[root@hdfeng mnt]# df -Th /tmp
Filesystem Type Size Used Avail Use% Mounted on
none tmpfs 1.0G 0 1.0G 0% /tmp
/tmp目录如果小于800M,会导致数据库无法进行安装,一般给1G即可
数据库安装完成后,需要切换至 root 用户执行提示命令
配置实例
使用dmdba用户,在/dm8/bin目录下执行:
./dminit path=/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMTEST INSTANCE_NAME=DMTEST PORT_NUM=5236
数据库不敏感:
./dminit path=/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=0 CHARSET=1 DB_NAME=OP INSTANCE_NAME=OP PORT_NUM=5233
注册服务
使用root用户,进入数据库安装目录的 /script/root
下,依次执行
cd /dm8/script/root
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DMTEST/dm.ini -p DMTEST
7.1.5以下:
./root_db_service_installer.sh -n DBTEST -f /dm7/data/DBTEST/dm.ini
启动:/etc/rc.d/init.d/DmServiceDB start(Red Hat)
如果注册服务时提示:please set -p parameter
将上面的代码调整为:
./dm_service_installer.sh -p DBTEST -i /dm8/data/DBTEST/dm.ini -t dmserver
还是不行只能采取前台启动的方式:
#未注册数据库服务的只能选择此方法 /bin目录下
./dmserver /dm8/data/DMDB/dm.ini(默认启动到 OPEN 状态)
./dmserver /dm8/data/DMOA/dm.ini mount(启动到 mount 状态)
前台进入后,再在mobaxterm上开一个标签页,链接到该主机,进入达梦数据库
启动数据库
服务注册成功后,启动数据库,如下所示:
systemctl start DmServiceDMTEST.service
停止数据库,如下所示:
systemctl stop DmServiceDMSERVER.service
重启数据库,如下所示:
systemctl restart DmServiceDMSERVER.service
查看数据库服务状态,如下所示:
systemctl status DmServiceDMSERVER.service
如果启动失败,提示:
[root@centos7 root]# systemctl start DmServiceDMSERVER.service
Job for DmServiceDB.service failed because the control process exited with error code. See "systemctl status DmServiceDB.service" and "journalctl -xe" for details.
切换为dmdba用户,进入/dm8/bin目录,执行
./DmServiceDMSERVER start
一样可以启动
登陆命令行操作
进入tool文件夹下,运行disql程序
./disql SYSDBA/SYSDBA:5236
登陆之后:
conn SYSDBA/SYSDBA:5236
查询数据库大小写敏感
SELECT CASE_SENSITIVE();
开启归档模式
alter database mount;//切换数据库到配置状态
alter database add ARCHIVELOG 'type=local,dest=/dm8/arch,file_size=64,space_limit=10240';//设置本地归档,归档路径,归档尺寸设置归档尺寸
alter database ARCHIVELOG;//开启归档
alter database open;//打开数据库
关闭:
alter database mount;
# 关闭归档
alter database noarchivelog;
# 删除归档文件
alter database delete archivelog 'type=local,dest=/dm8/arch';
# 将数据库状态设置为open
alter database open;
# 查询归档状态
select arch_mode from v$database;
查询版本号
SELECT *,ID_CODE FROM V$VERSION;
SELECT * FROM V$VERSION;
创建用户
用户类型包含:
-
SYS:内置用户,不能直接登陆
-
SYSDBA:系统管理员,拥有DBA角色(除了安全、审计其他都管)
-
SYSAUDITOR:系统审计管理员
-
SYSSSO:系统安全管理员
-
SYSDBO:系统安全操作员(达梦安全版才有)
创建用户命令如下:
create user 用户名 identified by 密码; create user OP1 identified by Dingjia123; create user "US@1" identified by "Dingjia123!@";
角色管理
角色类型包含:
-
DBA:系统管理员角色,拥有除审核、安全外的所有权限
-
RESOURCE:具有在当前用户模式下定义对象的权限,例如create table等
-
PUBLIC:具有在当前用户模式下数据操作的权限,例如insert table等
-
SOI:系统表(SYS为前缀)的访问权限
-
SVI:系统视图(VSYS为前缀)的视图权限
-
VTI:动态视图,具有 V$开头动态视图的查询权限
创建角色:
create role 角色名; grant 权限 to 角色名;
将角色赋给用户:
grant 角色类型 to 用户名; grant DBA,RESOURCE,PUBLIC TO OP1;
修改用户密码
alter user <用户名> identified by <PWD>;
alter user OP1 identified by Dingjia123;
创建模式
创建模式前需要授予用户创建模式的权限(如果不是SYSDBA的话)
create schema 模式名 authorization 用户名;(windows使用图形界面执行该条命令)
linux以上语句不能执行,则执行以下:
create schema 模式名 authorization 用户名
/
授予用户创建模式权限:
grant create schema to 用户名;
达梦不支持创建相同名称的schema
查询所有模式
select distinct object_name TABLE_SCHEMA from all_objects where object_type = 'SCH';
创建表空间
create tablespace DBTEST datafile 'TEST111.DBF' SIZE 128;
查看所有表空间:
select name from v$tablespace;
增删改查表
查看表:
select table_name,tablespace_name from dba_tables ;
create schema DMHR authorization SYSDBA
/
create table sc(Sno varchar(10),Cno varchar(7),Grade int check(Grade>0 and Grade<=100),primary key(Cno))TABLESPACE DBTEST;
insert into sc values('0811101','C001',96);
insert into sc values('0811101','C002',80);
insert into sc values('0811101','C003',84);
insert into sc values('0811101','C005',62);
insert into sc values('0811102','C001',92);
insert into sc values('0811102','C002',90);
insert into sc values('0811102','C004',84);
insert into sc values('0811102','C006',76);
insert into sc values('0811102','C003',85);
insert into sc values('0811102','C005',73);
insert into sc values('0811102','C007',NULL);
insert into sc values('0811103','C001',50);
insert into sc values('0811103','C004',80);
insert into sc values('0831101','C001',50);
insert into sc values('0831101','C004',80);
insert into TEST.sc values('0831102','C007',NULL);
insert into TEST.sc values('0831103','C004',78);
insert into TEST.sc values('0831103','C005',65);
insert into TEST.sc values('0831103','C007',NULL);
CREATE TABLE TEST.CLASS(Cno varchar(10) primary key,Cname varchar(20) not null,Credit int Check(Credit>0),Semester int)TABLESPACE DBTEST;
insert into TEST.CLASS values('C001','MATH',4,1);
insert into TEST.CLASS values('C002','ENGLISH',3,1);
insert into TEST.CLASS values('C003','ENGLISH',3,2);
insert into TEST.CLASS values('C004','COMPUTER',2,2);
insert into TEST.CLASS values('C005','Java',2,3);
insert into TEST.CLASS values('C006','MYSQL',4,5);
insert into TEST.CLASS values('C007','DM',4,4);
insert into TEST.CLASS values('C008','COMPUTER AND ART',4,4);
CREATE TABLE DMHR.CITY( city_id varchar(10) NOT NULL, region_id INT NULL)TABLESPACE TEST2;
INSERT INTO DMHR.city(city_id,region_id) VALUES('BJ',1);
INSERT INTO DMHR.city(city_id,region_id) VALUES('SJZ',1);
INSERT INTO DMHR.city(city_id,region_id) VALUES('SH',2);
INSERT INTO DMHR.city(city_id,region_id) VALUES('NJ',2);
INSERT INTO DMHR.city(city_id,region_id) VALUES('GZ',3);
INSERT INTO DMHR.city(city_id,region_id) VALUES('HK',3);
INSERT INTO DMHR.city(city_id,region_id) VALUES('WH',4);
INSERT INTO DMHR.city(city_id,region_id) VALUES('CS',4);
INSERT INTO DMHR.city(city_id,region_id) VALUES('SY',5);
INSERT INTO DMHR.city(city_id,region_id) VALUES('XA',6);
INSERT INTO DMHR.city(city_id,region_id) VALUES('CQ',7);
INSERT INTO DMHR.city(city_id,region_id) VALUES('GL',8);
INSERT INTO city(city_id,region_id) VALUES('XY',8);
INSERT INTO city(city_id,region_id) VALUES('CD',9);
INSERT INTO city(city_id,region_id) VALUES('SZ',9);
INSERT INTO city(city_id,region_id) VALUES('XM',10);
DROP TABLE CITY;
查询所有表:
select owner,table_name from dba_tables;
windows备份时报错718
在dm服务查看器里,重启对应的dmservice服务
达梦备份恢复策略
完全备份
BACKUP DATABASE FULL TO db_full_bak BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_full_bak';
TO db_full_bak 可以用 TO 指定备份集的文件的名字,如果不指定,则备份集文件的名字和它所在的目录同名
增量备份
基于 /dm8/data/DMDB/bak/db_full_bak_01/db_full_bak 全量备份的增量备份
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm8/data/DMDB/bak/db_full_bak_01/db_full_bak' BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_increment_bak_01';
特别注意:增量备份的目录一定要和全量备份放在同一个目录下,否则在增量恢复的时候会报错。如果没有放在一个目录,那么在增量恢复时,就必须利用 WITH BACKUPDIR 指定基备份集目录所在的上级目录,比如基备份的路劲为:/a/b/full_bak/备份.bak,那么需要指定的基备份目录就是 WITH BACKUPDIR /a/b/
tree db_full_bak_01
db_full_bak_01 # 全量备份上级目录
├── db_full_bak # 此次全量备份的文件所在目录
│ ├── db_full_bak_1.bak
│ ├── db_full_bak.bak
│ └── db_full_bak.meta
├── db_increment_bak_01 # 基于此次全量备份的第一次增备
│ ├── db_increment_bak_01_1.bak
│ ├── db_increment_bak_01.bak
│ └── db_increment_bak_01.meta
├── db_increment_bak_02 # 第二次增备
│ ├── db_increment_bak_02_1.bak
│ ├── db_increment_bak_02.bak
│ └── db_increment_bak_02.meta
└── db_increment_bak_03 # 第三次增备
├── db_increment_bak_03_1.bak
├── db_increment_bak_03.bak
└── db_increment_bak_03.meta
# 恢复时只需要恢复第三次增量备份即可,系统会自动寻找所有的增备和全备,就可以全部恢复
全备集恢复
库级/全库恢复、表空间恢复,只能在数据库脱机状态下恢复;
在脱机状态
dmrman命令:
#第一步 restore 把备份文件从备份集拷贝到指定路径
RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/FULL_BACK/';
#第二步 recover 基于归档将数据库恢复到最新;
1>指定归档恢复
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/arch/';
这里的arch下面就是日志文件
2> 指定备份集恢复
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak/db_full_bak_01';
#第三步 recover 恢复db_magic
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
增备集恢复
如果增量备份集和所依赖的全量备份在同一个目录,那么还原与恢复的命令和上面全量备份集恢复的命令是一样的,但如果不在同一个目录,就需要用 WITH BACKUPDIR指定一下全量备份集目录所在的父目录。如下所示
#第一步 全量备份集在 /dm8/data/DMDB/bak/db_full_bak_01 下面,此目录是存放全量备份和对应增量备份的父目录
RMAN> RESTORE DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm8/data/DMDB/bak/db_full_bak_01';
#第二步 恢复
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm8/data/DMDB/bak/db_full_bak_01';
#第三步 恢复魔数
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' UPDATE DB_MAGIC;
逻辑备份恢复
dexp和dimp工具位于dm安装目录下的bin目录下(/dm8/bin),其中dexp为导出工具,dimp为导入工具,导入dexp导出的dmp文件。储存导出的数据库文件和日志文件的路径需要提前建好。
备份
cd /dm8/bin
备份库
./dexp userid=username/password file=备份目录 log=备份日志目录 full=y
eg:
##设置 FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /mnt/data/dexp下。(该目录需提前建好)
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
备份owner
##设置 OWNER=USER01,导出用户 USER01 所拥有的对象全部导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
备份schema
./dexp userid=username/password file=备份目录 log=备份日志目录 SCHEMAS=要备份的schema名称(多个可用英文逗号分隔)
eg:
##设置 SCHEMAS=USER01,导出模式 USER01 模式下的所有对象。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
备份表
./dexp userid=username/password file=备份目录 log=备份日志目录 tables=要备份的表名(多个可用英文逗号分隔)
eg:
##设置 TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
恢复
恢复数据库
FULL 方式导入整个数据库。
##设置 FULL=Y,导入数据库,导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
OWNER
OWNER 方式导入一个或多个用户拥有的所有对象。
##设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dimp
SCHEMAS
SCHEMAS 方式的导入一个或多个模式下的所有对象。
##设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
TABLES
TABLES 方式导出和导入一个或多个指定的表或表分区。导入所有数据行、约束、索引等信息。
##设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp
和 TABLES 导入有关的参数还有 EXCLUDE,用来指定导入时过滤某类对象的。
学习教程
https://blog.csdn.net/lisaqianyu/article/details/127084814?ops_request_misc=&request_id=&biz_id=102&utm_term=%E8%BE%BE%E6%A2%A68%E8%AF%AD%E6%B3%95&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-127084814.142
达梦技术文档:
https://eco.dameng.com/document/dm/zh-cn/start/dm-start-stop-linux.html