达梦数据库(dm8)操作问题记录及解决(代码片段)

anaisestla anaisestla     2022-12-03     188

关键词:

8月底,我参与了由达梦数据库组织的DCA培训。达梦数据库是一款完全自主原创的国产数据库,目前在国内已得到广泛应用。DM8具有标准版,企业版,安全版和开发版四个版本。 我的电脑是银河麒麟v10系统+飞腾CPU;DM8安装包可以在官网找到,选择相对应的安装环境,直接下载即可。安装环境的检验和安装过程(包括图形化安装、命令行安装和静默安装)在网上及课程讲义中都有比较详细的介绍,这里不做重复说明。 下面我将详细讲述DM8的操作及其注意事项,以及一些我遇到的问题和解决方法。

  1. DM8开发 这里记录了ODBC连接数据库出现的报错情况及解决方式。 1⃣️检查是否安装gcc
gcc-v

用root用户,将压缩包移动到/usr/local路径下 2⃣️解压

tar -zxvf unixODBC-2.3.0.tar.gz

3⃣️配置 在这里制定操作系统类型 4⃣️编译和安装

make
make install

5⃣️查看

odbcinst -j

配置odbc.ini 然后进行odbc连接,但是这里报错data source name not found。

查看odbcisnt -j,发现此时odbc.ini和odbcinst.ini都在/etc目录下,而非刚才配置文件的/usr/local/etc目录。于是在/etc目录下重新配置odbc.ini和odbcinst.ini文件。 再次执行isql dm8 -v,出现Can’t open lib ‘/dm8/bin/libdodbc.so’: file not found报错。查看相关文件在/usr/local/lib目录下,因此配置路径/usr/local/lib,切换到dmdba连接成功。

  1. 表空间管理 (1)管理表空间 表空间的大小以及修改数据文件的扩展属性。 创建一个表test01; 向表中插入数据50000条,查询到bytes变大,这个表的空间占用变大。 查询这个表中的内容: 正常情况下表空间处于online联机状态;如果表空间置于offline脱机状态,业务中断,则表空间下的表数据不能正常读写。数据库正常运行期间是不能进行脱机的。

图形化界面新建表空间 需要注意的是这里自动扩充要勾选为“打开”状态,否则扩充尺寸和上限就白设置了。 对应的DDL语句: (2)表空间数据文件的迁移: 数据文件迁移要在脱机状态下进行。 首先在/dm8/data/DMOA路径下新建/TBS文件夹。不要用root建,如果使用root新建,记得将权限赋给dmdba。可以看到文件夹下面什么都没有。 目前两个数据文件在上一级目录下: 首先将表空间offline。然后执行一下语句: 数据文件迁移的原理是先将数据文件复制过去,再删除原来的文件。 再执行联机: alter TABLESPACE TBS ONLINE; 迁移成功了。 图形化界面下迁移数据文件: 1⃣️表空间右键,刷新。 2⃣️点击‘TBSIDX’右键选择“修改”。生产环境下不能随便操作,会将表空间脱机,造成业务中断。这里如图直接修改路径即可。 两个数据文件迁移过来了。

MAIN、HMAIN表空间是可以脱机的,可以进行同样的操作。但是SYSTEM、TEMP UNDO表空间不可以脱机,系统自带的也不能删除。MAIN表空间也不能删除。 脱机、联机在管理工具窗口点击表空间名称,右键即可脱机/联机。 (3)表空间查询:相关数据字典 使用空间=总空间-空闲空间 select * from DBA_DATA_FILES;用来查询表空间的总空间 select * from SYS.DBA_TABLESPACES; 用来查询表空间的使用情况。 select * from DBA_FREE_SPACE;用来查询表空间的空闲情况

从安全角度,达梦不提供oracle的方法,即删除表空间的同时删除里面的数据文件和对象;推荐先删除表空间下的对象后,再删除表空间。

create tablespace tbs DATAFILE TBS01.DBF SIZE 32;
select * from DBA_DATA_FILES;
select * from DBA_TABLESPACES;
select * from DBA_FREE_SPACE;

alter TABLESPACE tbs RESIZE DATAFILE TBS01.DBF TO 128;

ALTER TABLESPACE TBS ADD DATAFILE TBS02.DBF SIZE 128 AUTOEXTEND ON NEXT 4 MAXSIZE 10240;
ALTER TABLESPACE TBS DATAFILE TBS01.DBF AUTOEXTEND ON NEXT 4 MAXSIZE 10240;

create TABLE t_test01(id int, name VARCHAR(30)) TABLESPACE TBS;
SELECT * FROM SYS.USER_SEGMENTS t ORDER BY t.bytes DESC;

begin
	for i in 1..50000 LOOP
		INSERT INTO t_test01(id, name) VALUES (i, SYS.DBMS_RANDOM.string(A, 20));
	END LOOP;
	COMMIT;
END;

select * from sysdba.T_TEST01;


alter TABLESPACE TBS OFFLINE;
alter TABLESPACE TBS RENAME DATAFILE TBS01.DBF TO /dm8/data/DMOA/TBS/TBS01.DBF;
alter TABLESPACE TBS RENAME DATAFILE TBS02.DBF TO /dm8/data/DMOA/TBS/TBS02.DBF;
alter TABLESPACE TBS ONLINE;

(4)管理重做日志文件 添加、resize联机日志文件。以及日志文件查看。

select * from "V$RLOGFILE"; --数据字典
select * from v$rlog;--cur_file表示当前正在使用的联机日至文件。对应的id在RLOGFILE中查询
alter DATABASE add LOGFILE DMOA03.log SIZE 256;
alter DATABASE RESIZE LOGFILE DMOA03.log to 300;

select * from v$rlog; 这里id为0 对应为DMOA01.log 或者右键单机LOCALHOST(SYSDBA),选择管理服务器,在选择左侧日志文件,可以看到日志文件状态“活动/不活动”。

迁移联机日志文件: 要在数据库mount状态下操作。 首先仍是现在dmdba下新建目录/REDO 执行下列sql语句。最后记得将数据库置为open状态。 查看目录下文件,迁移成功。 图形化界面管理联机日志: 在管理服务器,可以添加联机日志、修改日志文件大小

--联机日志文件新建和resize

select * from "V$RLOGFILE";
select * from v$rlog;
alter DATABASE add LOGFILE DMOA03.log SIZE 256;
alter DATABASE RESIZE LOGFILE DMOA03.log to 300;

--联机日志文件的归档,要先mount数据库

alter database mount;
alter DATABASE RENAME LOGFILE DMOA03.log TO /dm8/data/DMOA/REDO/DMOA03.log;
alter DATABASE RENAME LOGFILE DMOA02.log TO /dm8/data/DMOA/REDO/DMOA02.log;
alter DATABASE RENAME LOGFILE DMOA01.log TO /dm8/data/DMOA/REDO/DMOA01.log;
alter DATABASE OPEN;

(5)归档管理 联机日志恢复的数据是有限的,归档可以恢复更多数据。 1)SQL 接下来输入指令 关闭和删除归档 图形化界面 在系统管理中,点击“配置”然后点击“转换”,切换至mount状态。 然后进行归档配置 再转换为打开状态。 修改配置文件 ARCH_INI=1说明开启归档。 开启归档会生成一个dmarch.ini文件 修改该文件即可

--归档
select arch_mode from v$database; --查看是否开启归档,N表示未开启归档。

alter database MOUNT;
alter database archivelog;--打开归档

--存储归档设置
alter database add archivelog type=local, dest=/dm8/arch, file_size=64, space_limit=10240;
alter database open; --此时归档已开启

select * from "V$DM_ARCH_INI";--查看归档配置


alter database MOUNT;
alter database noarchivelog;--关闭归档

--删除归档设置
alter database delete archivelog type=local, dest=/dm8/arch, file_size=64, space_limit=10240;
alter database open; --此时归档已关闭
  1. 用户管理 (1)用户管理 指定系统口令策略。 这个参数是保存在系统表空间中,是不能直接修改文件来修改的,要通过命令修改。

新建用户、指定表空间,查看密码输入被锁定次数、锁定时间等。 新建profile1进行新的设置。新版本支持创建profile管理用户资源限制。 然后将dmtest适用于profile1作为该用户的限制。或者使用老版本的方法直接指定限制,使用limit子句限制用户资源,这里修改的是default profile。 select * from sysusers; --数据字典查询用户资源限制。 用户锁定与解锁: 右键单机用户,选择锁定/解锁即可。例如当密码错误次数过多被锁定,可以在这里解锁。 对应的SQL

用户删除,默认用户下有对象不能直接删除: drop user if EXISTS hr; --删除用户 drop user if EXISTS hr CASCADE--删除用户及其所包含的对象

(2)权限管理、角色管理 权限包含系统权限和对象权限。

创建角色r1,赋予权限。并将该角色赋与用户dmtest。

数据字典

select * from dba_roles; --该指令运行,不同用户看到的角色是不一样的。

赋予某张表更新update的权限,实际上同时需要select权限,才可以查询、更新,因为在更新前需要查询,所以不能单独赋予update权限。 总结:对象权限,在赋予更新或删除某个表的数据权限时,如果没有查询权限,会报错。

图形化界面: 用户——>管理用户——>右键“新建”

资源设置项,如果常规页设置了profile资源限制,那么这里不用写(灰色),如果没有选profile,则可以自定义。

图形化界面 角色,右键“新建”新建角色。右键角色选择“修改”即可修改角色。右键角色,也可以禁用/启用。 角色可以赋给角色,角色也可以赋给用户。 列的权限,在界面上直接勾选列即可。这里没赋予,赋予了也会显示。 4. 模式对象管理 达梦中一个用户可以对应多个模式。一般都是单用户单模式,默认是与用户同名的模式。表、视图等对象都是归属于模式,模式归属于用户。 (1)管理模式 查询当前用户和当前模式。 切换模式。切换后可以查询表。这时候用户仍为dmtest。 新建模式: 新建模式,归属于dmtest用户下。 切换到dmtest01下: set schema 只针对当前会话生效。若退出当前会话,还是用户默认的同名模式。 新建表,然后查询 可以看到,新建的表归属于dmtest01模式下: *用什么用户登录进去,新建一个表,这个表就归属于同名的默认模式下。

查看系统中模式 查看用户拥有哪些模式 可以看到哪些模式归属于哪个用户。

在模式下新建表

*不能新建和已有模式同名的用户;默认的模式是不可以删除的。 模式下有对象使用cascade级联删除用户模式和模式下对象,生产环境慎用。

图形界面: 新建表 可以再常规添加PK,也可以在约束下面添加PK. 添加约束。 存储信息 添加外键约束,右键点击新建外键。 新建检验约束

(2)管理表 几种创建表的方法,默认不带约束。 (3)管理约束

数组字典: 查看约束信息 查看约束列信息

向表中插入数据,违反数据约束会相应报错。 然后在子表中插入数据,引用t_testpid中pid,违反引用约束会报错。 查询t_testpid的数据。 提交数据。 删除数据时,如果子表引用了这条数据,则不能删除。应先从子表删除。 然后commit。 (4)管理索引 没有索引,进行全表扫描: 创建索引后 like: 百分号在右边,也是走索引。因为索引是排序的。

如果百分号在左边,就不能利用索引的有序性来走索引。 这样也是可以走索引的,因为是employee_name

索引的特性: 1.索引是有序的,可以减少order by排序这一步。2.索引可以当小表使用。 explain select EMPLOYEE_NAME from t_emp t where t.EMPLOYEE_NAME like %马% order by 1; -----------------------order by 1是按照第一列排序

重建索引 开启索引监控 --索引监控开关 alter index ix_emp_name MONITORING USAGE; alter index ix_emp_name NOMONITORING USAGE; 没有做过任何查询,所以used为no,查询使用后变为yes (5)管理视图 创建视图

5.备份与还原 联机备份必须开启归档。开启归档方式参考归档管理章节。 (1)数据库备份 BAK_PATH数据库默认备份路径 BAK_USE_AP:备份方式。详见讲义。 确保DmAPService开启 备份与查询备份。生成默认的备份名称,放在默认的备份路径下。这里默认是全量备份。

全量备份 backup DATABASE full to FULLBAK01 BACKUPSET /dm8/backup/FULLBAK01;--全量备份 生成一个.meta元数据文件和两个备份片,FULLBAK01.bak是数据备份片,FULLBAK01_1.bak是日志备份片。联机备份有数据备份片和日志备份片。 查询只有默认路径,需要添加备份目录,查询函数为SF_BAKSET_BACKUP_DIR_ADD。 然后使用此函数,添加备份路径。 就可以查询到了。

增量备份 增量备份包含累计增量备份和差异增量备份,默认是差异增量备份。累计增量备份的基础备份集只能是全备的备份集,而差异增量备份的备份集可以是增量备份,也可以是全备。 backup DATABASE INCREMENT to INCRBAK01 BACKUPSET /dm8/backup/INCRBAK01;--增量备份 查询可以看出,他的基础备份集是刚才的全量备份。

指定路径: 假如增量备份的基础备份集不在默认备份路径目录下,也不在增量备份集的同一个目录下,就要使用with backupdir来指定搜索基础备份集,他会搜索当前备份路径、默认备份路径、和指定的备份路径下的最新的备份集作为基础备份集。

图形界面 备份-库备份-右键”新建备份”

因为不是默认路径,需要添加目录才能看到。备份-库备份-指定工作目录 就可以看到了

脱机备份 dmrman 先将服务停止 命令和联机备份相同,只是多了指定备份的数据库的初始化参数文件dm.ini。 然后就成功了!

DM控制台工具 脱机备份: 进入/dm8/tool下的console

点击 获取备份 可以看到目录下的所有备份信息。

新建备份 如果AP服务没启动会报错,如果dmservice服务开着也会报错 记得重启数据库:断开、在连接重新登陆

(2)表空间的备份 --表空间的备份 backup tablespace TBS to TBSFULLBAK01 BACKUPSET /dm8/backup/TBSFULLBAK01; 表空间增量备份加上INCREMENT即可

图形化界面 备份-表空间备份-新建备份 报错,这里添加指定工作目录/dm8/backup即可。

(3)表的备份 表的备份没有增量备份,只有全量备份。表恢复的时候也只能恢复到备份的一刻。 --表的备份 backup table t_emp to EMPBAK BACKUPSET /dm8/backup/EMPBAK;

(4)归档备份 归档工具查询 如果有归档不连续,建议做一次全备。 (5)数据库的还原与恢复 1)表空间还原与恢复 模拟故障:删除TBS表空间的数据库文件,重启数据库默认只能启动到mount状态。 这里首先制造一些数据 模式-DMTEST-表-T_TESTPID-右键-浏览数据(修改完记得点击左上角保存)

查看表T_TESTPID是存储在TBS表空间中。 删除/dm8/data/DMOA/TBS目录下的表空间文件TBS0*.DBF 然后重启数据库 因为把数据文件删了,所以表空间无法联机,处于脱机状态。 查看表空间status。1表示脱机。TBS目前处于脱机状态。

连接表空间,显示不存在

表空间的还原与恢复: DM8只能在脱机状态下进行。只能在本库上操作,不能跨机。库级的还原与恢复是可以跨级和跨库的。 (1)关库;(2)还原;(3)恢复

重启数据库查看数据有无丢失 2)数据库的还原与恢复(也是要在数据库关闭状态下) 1.关闭数据库 2.还原 3.恢复 3.更新数据库魔数 故障模拟 删除SYSTEM.DFB表空间数据文件 使用dmrman,还原之后,文件就会回到原来位置;恢复后,数据库才能恢复到最新状态。

库级的还原与恢复,需要更新数据库魔数。

重启数据库 数据库有永久魔数permanent_magic(同一个数据库永远不会发生变化)和数据库魔数(db_magic)每次做一次数据库还原与恢复都会更新一次,之后更新的数据也可以查询到。 (6)逻辑备份:逻辑导入与导出 需要在数据库启动状态下进行 在/bin目录下 dexp导出: 显示共导出了五个模式。进入到该路径下;将dmhr模式下对象导入到dmtest用户下: 部分导入失败是因为权限不够。

图形化界面 LOCALHOST(5236)右键-右键导出/导入-填写导出目录、导出文件、日志文件。 若导出某个模式下对象,则在该模式右键-导出/导入-以模式方式导出。 用户也一样,表也一样

  1. 作业管理 代理-右键 创建代理环境 作业-右键 新建作业-常规-键入作业名 作业步骤-常规-步骤名称、类型等 作业调度 示例1:全量备份

示例2:增量备份

以上即为达梦DM8表空间管理、用户管理、模式对象管理等内容的操作方式及注意事项。

达梦dm8数据库安装详细手册(windows+linux+docker)(代码片段)

目录🌲前言💬介绍💦安装介质下载🔥达梦8安装包💥Centos7box🏆Linux下DM的安装🍭Centos7环境安装vagrant启动centos7上传安装介质初始化配置🍰安装前准备检查Linux(Unix)系统信息创建安装用户创建安装... 查看详情

达梦dm8数据库安装详细手册(windows+linux+docker)(代码片段)

目录🌲前言💬介绍💦安装介质下载🔥达梦8安装包💥Centos7box🏆Linux下DM的安装🍭Centos7环境安装vagrant启动centos7上传安装介质初始化配置🍰安装前准备检查Linux(Unix)系统信息创建安装用户创建安装... 查看详情

docker-compose之达梦数据库(dm8)(代码片段)

达梦数据库初始化安装,需要先提取容器中的数据文件,然后再使用docker方式启动。创建达梦数据文件目录:mkdir-p/opt/soft/dm8/data在服务器上执行命令初始化数据文件:dockerrun--rm-v/opt/soft/dm8/data:/dm8/data_initharbor.goodc... 查看详情

达梦数据库(dm8)常用sql学习(代码片段)

达梦产品手册1.检查数据库版本及服务状态1.1查看达梦数据库运行状态SELECTstatus$as状态FROMv$instance;1.2查看达梦数据库版本SELECTbanneras版本信息FROMv$version;2.创建用户并授权2.1创建用户--使用CREATEUSER语句创建DM用户,登录密码为... 查看详情

达梦数据库dm8安装准备及注意事项

【达梦数据库DM8安装准备】一、规划安装用户和用户组新建组[root@KylinDCA03opt]#groupadddinstall新建组用户[root@KylinDCA03opt]#useradd-gdinstall-m-d/home/dmdba-s/bin/bashdmdba修改密码[root@KylinDCA03opt]#passwddmdba二、规划安装目录根据要求新建文件夹[ro... 查看详情

springboot+mybatis3集成dm8(达梦数据库)(代码片段)

第一:找寻合适达梦驱动包前提:切换至DM(达梦数据库)安装目录,我的本地安装目录在:(D:\\dmdbms)。找到drivers驱动文件夹下的jdbc文件夹,包含驱动如下截图: 我使用的DM8数据库,因此我使用的是DmJdb... 查看详情

银河麒麟服务器操作系统安装达梦数据库dm8教程(代码片段)

...e虚拟机15.0(Windows7操作系统试用虚拟机)3、达梦数据库DM8(官方网站申请试用)二、安装:1、操作系统和虚拟机的安装此处略过,目前暂只介绍DM8如何安装。2、登录操作系统选择root或有管理员权限的其... 查看详情

redhat7.6安装达梦dm8数据库详细部署讲解

  本文讲解如何在redhat7.6操作系统环境安装达梦DM8数据库,检查本机系统环境,注意事项如下:1、查看/tmp空间,/tmp建议至少1.5G以上2、安装DMglibc版本不能低于2.3,linux内核不能低于2.6.一、安装前准备工作1、下载DM8安装... 查看详情

达梦数据库部署(代码片段)

达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。本次将进行DM8的开发版本的部署1 系统软硬件要求1.1 硬件要求达梦官方文档中给出的硬件要求如下: 1.2 软件要求软... 查看详情

国产化之.netcore操作达梦数据库dm8的两种方式

...实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64、龙芯、飞腾、鲲鹏等。考虑到这些基础产品对.NET的支持,最终选择了.NETCore3.1。环境CPU平台:x86-64/Arm64操作系统:银河麒麟v4数... 查看详情

达梦数据库使用配置及问题整理(代码片段)

1.达梦数据库理解及安装1.1达梦数据库是基于模式的达梦数据库是基于模式的(具体我也不太清楚,感兴趣的可以自己研究),创建一个用户就会创建一个模式,这里的模式有点类似于mysql中库的概念。如果用... 查看详情

你不知道的达梦数据库

达梦数据库简介达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。 DM8采用全新的体系架构,在保证大型通用的基础... 查看详情

你不知道的达梦数据库

达梦数据库简介达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。 DM8采用全新的体系架构,在保证大型通用的基础... 查看详情

国产集中式数据库综合对比(达梦人大金仓海量)

1.达梦    达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM,官网最新版本名称:DM8。      DM8是达梦公司在总结DM系列产品研发与应用经验的基础之上设计的新一代... 查看详情

达梦sql执行耗时异常问题排查(代码片段)

在系统运行的过程中经常遇到通过客户端在数据库执行SQL语句很快,但是在程序中执行耗时长的问题,针对该类问题我们一般从如下两方面分析:本章内容已在如下环境上测试:数据库:达梦数据库DM8网络情... 查看详情

dm8(达梦数据库)基于建库sql生成er图,基于er图生成数据库文档(代码片段)

今天项目经理让我导出DM8数据库说明文档,我立刻想到了数据库文档生成工具(screw-钉子),我立刻添加相关maven依赖,编写junit单元代码。但是执行的结果让我很沮丧。相关依赖和Junit单元代码<!--自动生成数据库文档... 查看详情

dm8达梦数据库安装配置(linux版,单库)

本文主要介绍DM8单库在linux下的安装方法。1DM8安装包的下载直接在官网https://www.dameng.com中的产品下载里可以直接下载ios包。2DM8安装前修改系统配置文件2.1修改sysctl.conf文件 2.2修改limits.conf文件 2.3修改system.conf文件2.4修改nproc.con... 查看详情

达梦数据库的class类(代码片段)

达梦数据库的CLASS类达梦数据库除了支持多种常用的数据类型,还支持CLASS类类型,达梦数据库通过类类型在DMSQL程序中实现面向对象编程的支持。类将结构化的数据及对其进行操作的过程或函数封装在一起,允许用户根据现实世... 查看详情