【学习笔记】Linux下达梦数据库从安装到备份恢复合集

达梦学习记录

安装

创建用户所在的组,命令如下:

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

达梦数据库备份策略

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值