DM8使用问题与解决
引言
第一次系统性地学习如何操作DM数据库,具体步骤就不在本博客列出了,这里主要讲一下自己实操时遇到的坑以及如何解决
安装及使用总结
保证/tmp文件夹有足够的空间
tmp目录不足需要删除文件(root权限)
cd /tmp
rm -rf xxxx.xx
/tmp 1.5G可能仍然不够DM解压
root用户
vim /etc/fstab
输入
tmpfs /tmp tmpfs nodev,nosuid,size=4G 0 0
保存
mount /tmp
df -h
可以看到变成4G,可以解压了
保证文件打开数足够
ulimit -a
查看open files 文件打开数
过小会无法开启线程 导致软件启动不了
默认centos系统文件打开数1024 可以修改更大
dm一个连接会话是占用一个线程的 当业务并发量较大时,数据库无法创建新的连接。现网open files参数可以设置得大一点
ulimit -n
查看(设置)文件打开数 设置只对单个会话生效
生产环境下持久设置文件打开数
vim /etc/security/limits.conf
写入
dmdba soft nofile 102400
dmdba hard nofile 204800
root soft nofile 102400
root hard nofile 204800
manager等图形化工具打开不了
常见错误:
- DISPLAY没有设置正确、报错权限不足(原因:使用root打开过图形化工具)
- 核心已转储,检查DISPLAY,检查虚拟机本机是否xhost+
- 检查$DM_HOME,是否为/dm8,如果不是退出dmdba用户会话至root会话,再进入一遍,记得再次设置DISPLAY
/usr/share/themes/kylin-black-theme/gtk-2.0 /gtkrc:817:找不到包含文件: “apps/caja.rc"
出现这个提示是正常的,依然可以进入图形化工具
安装rlwrap工具
rlwrap可以让你在Linux中,操作sql像在Win里一样上下翻滚等
- 安装readline
[root@dbserver ~]#yum install readline* -y
- 安装rlwrap
[root@dbserver ~]# tar -zxvf rlwrap-0.43.tar.gz
[root@dbserver ~]# cd rlwrap-0.43
[root@dbserver rlwrap-0.43]# ./configure
[root@dbserver rlwrap-0.43]# make
[root@dbserver rlwrap-0.43]# make install
- 修改配置文件使生效
[root@dbserver rlwrap-0.43]# vim /home/dmdba/.bash_profile
添加
alias disql='rlwrap disql'
alias dmrman='rlwrap dmrman'
[root@dbserver rlwrap-0.43]# source /home/dmdba/.bash_profile
记得,之后想要使用可滚动的,不要在bin目录下./disql,直接disql就好了
DMSQL相关
-
DM如果用了GROUP BY不用分组函数要报错,和ORACLE不一样
-
和ORACLE类似的,GROUPBY后面要写上除了分组聚合函数所有查出列,select后可以少于group by中的字段,但不能包含group by中没有的字段是SQL语法规范
-
natural join 有几个同名列就用几个做等值连接 同名列不能有限定词/表前缀
-
在数据库名或表名列名是小写时,调用一定要加上引号"xxx".“xxx”,因为数据库在初始化的时候选择是否大小写敏感,默认是大小写敏感。这时执行的 SQL 在到解释器那层解析时,会自动转换为大写名称
配置文件修改方式
-
READ ONLY只能手工修改
-
IN FILE 可以手工也可以SQL/函数改文件(spfile)
-
SYS可以手工也可以SQL/函数(system)改文件(spfile、memory、both)
-
SESSION可以手工也可以SQL/函数(system、session)改文件(spfile、memory、both)
一些日志相关概念
- redo log(重做日志):每当操作时,在磁盘数据变更(即commit)之前,将操作写入redo log,这样当系统奔溃重启后可以继续执行。
- undo log(回滚日志):当一个事务执行一半无法继续执行时,可以根据回滚日志将之前的修改恢复到变更之前的状态。
- 落盘,就是将数据写入到磁盘。
- 刷盘,并不是每次接收到数据后就将数据写入到磁盘,而是会先写入缓冲区,将缓冲区的数据写入到磁盘的过程,称为刷盘。
commit操作不一定会把内存中的数据刷到磁盘文件中
commit无法左右数据库何时把数据从缓冲区刷入到数据区,缓冲区的数据积累到一定程度,才批量刷入到磁盘中。
在这之前,断电内存丢失,DM会根据日志来恢复
在commit指令提交时,会把操作日志刷入到磁盘文件,所以就算断电,如果日志已经刷入到磁盘了,那DM重启的时候,会根据日志恢复,查询到的还是更新过的数据。
数据文件管理相关
-
重做日志文件
通过测试 alter database drop logfile 和 alter database delete logfile删除重做日志都报错,说明达梦数据库当前不支持删除REDOLOG
-
归档日志文件
可以通过
select sf_archivelog_delete_before_lsn(xx);
来删除xx之前的非活跃归档文件
对象权限相关
-
delete和update是要查询(select)权限的
-
insert不需要,但如果主键冲突时,系统还是会帮我们查(select)的
-
sysobjects表有模式和角色,没有视图
-
用户默认模式不能删除,模式下有对象时不能直接删除(可以增加 cascade级联删除用户模式及模式下对象,生产环境慎用cascade,防治误删)
备份相关
-
增量备份的基础备份集是上次(默认路径下的和添加路径下的)的全备
-
默认增量备份是差异增量备份(BAS_BAK可以是增备也可以是全备)
-
联机备份是必须要开归档的。如果开了关了一段时间再开,可能会归档不连续,需要删掉不连续的。有了归档不连续的情况,最好做一次全备。
IDEA 连接DM数据库
1.在IDEA界面点开右侧的数据库,点击添加驱动程序和数据源
2.点击驱动程序,默认会出现User Driver
3.修改名称,添加驱动程序,并修改类
在达梦数据库安装路径下找到并选择对应驱动包
4.点击数据源,点击添加,将刚刚的驱动程序加入
5.填写相关用户名密码和URL,点击左下角测试连接
连接成功,然后我们就可以在IDEA里进行数据库操作了