之前一直使用win7系统下的达梦数据库,以图形界面操作为主,简单直观。后面接触到了linux系统下的达梦数据库的使用及运维,命令行操作确实有更强的拓展性,使用好了可以大大提高开发效率,但对于新手小白来说还是会有一些坑使人猝不及防,下面就结合我个人的经验整理一下。
为避免每次使用console,manager,dbca.sh 需要进入指定路径,设置DISPLAY环境参数:
vi ~/.bash_profile
PATH=$PATH:/dm8/bin:/dm8/tool;export PATH
vi /etc/profile
echo $DISPLAY>/tmp/display.txt
vi /home/dmdba/.bash_profile
cat /tmp/display.txt|awk -F : ‘{print “export DISPLAY=:”$2,“&& gnome-terminal”}’|sh
#执行 export DISPLAY=:1 && gnome-terminal
产生一个新的窗口,可以直接输入console ,dbca.sh ,manager ,无需cd 到指定路径。
问题分析:arch为使用root账户新建的文件夹,dmdba没有操作权限。
解决方法:
使用chown命令修改权限
chown dmdba:dinstall /dm8/arch
问题分析:联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。
解决方法:使用checkpoint(100)函数主动刷新检查点。执行完后,再进行备份该错误提示消失。
初始化达梦数据库时默认勾选的“字符串比较大小写敏感”较为关键,建表的时候,如果表名或列名使用小写字母,那么今后书写SQL语句的时候就要麻烦很多了,必须严格区分单引号、双引号的使用。字符串常量应使用单引号括起,关键字、对象名、字段名、别名等则使用双引号括起。在大小敏感的数据库下,使用dexp导出数据库、模式正常,但导出小写字母创建的表时,可能会提示“表不存在或者为系统内部对象,请核对后再进行输入”。所以本人一般新建库时都把大小写敏感的勾去掉。
这是比较常见的一个错误一般是以下几种情况导致
1)数据库服务未启动
打开服务查看器,启动数据库实例服务,或者用命令行启动。
2)远程访问时被防火墙拦截
如果服务在本地连接正常,但是使用远程连接时提示网络异常,一般情况下是防火墙引发的问题。此时需要检查防火墙相关设置,一般生产系统是不允许直接关闭防火墙的,那么就需要在数据库服务器上开启对应端口远程访问的权限(默认为 5236)
此处以 Linux 为例
1.编辑/etc/sysconfig/iptables 文件:vi /etc/sysconfig/iptables
加入内容并保存:-A RH-Firewall-1-INPUT -m state–state NEW -m tcp -p tcp --dport 5236 -j ACCEPT
2.重启服务:/etc/init.d/iptables restart
3.查看端口是否开放:/sbin/iptables -L -n
3)端口号错误
达梦数据库的默认端口号是5236,使用其他接口(如达梦管理工具或jdbc)访问数据库,如果未单独指定端口号,则默认使用端口5236。与端口号相关的设置默认在dmdbms/data/的dm.ini文件中搜索PORT_NUM。 DAMENG目录,在确认端口号后,使用正确的端口号访问。
有时我们需要批量向数据库中导入数据,这时如果存在外键约束,就需要注意导入数据的先后顺序,变的很繁琐。这时我们可以暂时关闭外键约束检查,注意并不是删除外键,使得数据可以正常导入,导入后再恢复外键约束检查。达梦不能一次性关闭所有外键约束,也不能一次性关闭一个表的所有外键约束,只能查出所有外键约束依次关闭。
– 关闭外键约束检查
ALTER TABLE 表名 DISABLE CONSTRAINT 约束名;
ALTER TABLE TB_TEST DISABLE CONSTRAINT CONS134299492;
– 开启外键约束检查
ALTER TABLE 表名 ENABLE CONSTRAINT 约束名;
1.统计信息分类
表统计信息、列统计信息、索引统计信息。
统计信息生成过程分以下三个步骤:
1) 表:计算表的行数、所占的页数目、平均记录长度
2) 列:统计列数据的分布情况
3) 索引:统计索引列的数据分布情况
CALL SP_DB_STAT_INIT ();
模式
一般在首次迁移完成后使用,如下:
DBMS_STATS.GATHER_SCHEMA_STATS(‘模式名’,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
表
CALL SP_TAB_STAT_INIT (‘模式名’, ‘表名’);
DBMS_STATS.GATHER_TABLE_STATS(‘模式名’, ‘表名’,null,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
列
对某个表上所有的列生成统计信息
CALL SP_TAB_COL_STAT_INIT (‘模式名’, ‘表名’);
CALL SP_STAT_ON_TABLE_COLS (‘模式名’,‘表名’,采样率);–采样率0-100
DBMS_STATS.GATHER_TABLE_STATS(USER, ‘表名’,null,100,false, ‘FOR ALL COLUMNS SIZE AUTO’); --更新所有列
对指定的列生成统计信息
CALL SP_COL_STAT_INIT (‘模式名’, ‘表名’, ‘列名’);
SP_COL_STAT_INIT_EX(USER,‘表名’,‘列名’,100); --更新单列
索引
收集某张表的所有索引的统计信息
CALL SP_TAB_INDEX_STAT_INIT (‘模式名’, ‘表名’);
对指定的索引生成统计信息
DBMS_STATS.GATHER_INDEX_STATS(user,‘索引名’);
CALL SP_INDEX_STAT_INIT (‘模式名’, ‘索引名’);
CALL SP_INDEX_STAT_INIT(USER,‘索引名’);
语句
对SQL语句涉及的所有表和过滤列生成统计信息
CALL SP_SQL_STAT_INIT (‘SQL’);
3.查看统计信息
查看指定列的统计信息
DBMS_STATS.COLUMN_STATS_SHOW(USER, ‘表名’,‘列名’);
查看指定索引的统计信息
dbms_stats.index_stats_show(user,‘索引名’);
出现此类报错,首先查看 SQL 语句是否符合达梦的语法规则。可以参考《DM SQL 语言使用手册》
如下是一些典型场景的总结:
1.将 SQL 从其他地方如实复制,一个成功,一个失败:存在可能:一个是正常的空格 一个是个全角空格;
2.特殊字符是否用了中文键:比如引号,双引号,括号;
3.删除原来的空格 输入成空格或者 制表符 或者回车;
4.语句中缺少 , 或者 ;
文章
阅读量
获赞