1.DM7 BUFFER如何设置?
使用下列参数,可配置基本的系统缓冲区的大小:
SQL>select * from v$dm_ini where para_name like '%BUFFER%';
行号 PARA_NAME PARA_VALUE
---------- ------------ ----------
1 HUGE_BUFFER 82 BUFFER 100
3 MAX_BUFFER 100
4 BUFFER_POOLS 1
其中HUGE_BUFFER 是专门用于HFS的缓存, BUFFER表示初始的系统缓冲区大小,单位为 M。
HUGE_BUFFER与BUFFER不能公用内存,它们完全是独立的。通常情况下,如果物理数据量大
于物理内存,则应该把BUFFER调到物理内存的三分之二比较合适。
当BUFFER_POOLS = 1时,系统支持缓冲区的自动扩展。MAX_BUFFER表示最多能扩到多大。
在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。
缓冲是一个共享资源,受一个mutex保护,在一个时间点,只允许一个线程可以持有这个资源。
在高并发情况下,这个限制将极大降低并发效率,因此,可以配置BUFFER_POOLS把一个大的
系统缓冲区分割为多个小的部分,每一个小的部分作为临界资源,这样只要所访问的数据页不
在同一个子池里,就不会发生冲突,从而提升并发性能。
注意,如果配置了BUFFER_POOLS > 1, 则MAX_BUFFER参数就失效了,也就是说如果BUFFER_POOLS > 1
那么就应该把BUFFER配置的足够大,因为系统不会再自动扩展了,每个子POOL用完了就开始淘汰。
2.如何手工注册DM7 OLEDB驱动
–OLEDB依赖的DLL如下
将doledb.dll依赖的DLL文件放在一起,然后用
Regsvr32 c:\test\doledb.dll --在运行中执行这个命令,带绝对路径
进行注册,注意使用管理员运行cmd
3.如何查询SQL计划中各操作符的执行时间?
SELECT N.NAME, TIME_USED, N_ENTER FROM V$SQL_NODE_NAME N,
V$SQL_NODE_HISTORY H WHERE N.TYPE$ = H.TYPE$ AND EXEC_ID = 538;
–538为该SQL的执行号,dm.ini中ENABLE_MONITOR要改为3
–可以创建一个存储过程,来封装这个查询的sql,输入参数为sql语句的执行号:
create or replace procedure sql_et(eid int) is
begin
select
name as "OP",
time_used/1000 || 'ms' as "TIME",
cast(time_used * 100.0/sum(time_used) over() as dec(10, 2)) || '%' as "PERCENT" ,
rank() over (order by time_used desc) as "RANK" ,
seq_no as "SEQ"
from
v$sql_node_history a,
v$sql_node_name b
where
a.type$ = b.type$
and exec_id = eid
order by time_used desc;
End;
4.java.sql.SQLException: 语句句柄个数超上限(1024)或系统内存不足 错误如何处理?
原因:不申请新的session,不停地申请语句句柄,超过了每个session可用语句句柄数的上限
解决办法:
治本:修改应用程序,每个语句句柄用完后,将句柄关闭
指标:修改ini参数,提高session可用语句句柄的上限
max_session_statement由100改为1000
5.升级版本报错:
auto-update db version fail, please startup with origin dmserver and shutdown normal,
问题原因:老版本未正常退出,导致新版本升级失败
解决办法:用老版本正常启动,正常退出后,再用新版本启动
6.如何启用系统包?
SP_CREATE_SYSTEM_PACKAGES(1);
7.如何动态设置sql跟踪?
INT SF_SET_SQL_LOG(SVRLOG INT, SVRMSK VARCHAR);
SVRLOG设置SVR_LOG参数值,
SVRMSK设置SQL_TRACE_MASK参数值
8.服务器端大小写敏感,客户端工具该如何设置?
打开管理工具,登录后打开 “窗口"菜单,选择"选项”,在选项窗口中选择“管理工具”,将“保持对象名大小写”上面的勾去掉。
9.DM7数据库版本如何下载?
DM7数据库版本下载地址链接如下:
http://www.dameng.com/service/download.shtml
情况说明:
(1) 根据操作系统平台和机器位数选择合适的数据库版本下载;
(2) Linux平台上的数据库版本有内核限制,如果操作系统内核版本过低,可能会出现安装不上的情况;
(3) 官网上没有提供龙芯、飞腾以及神威等国产CPU的数据库版本下载,如有需要可以找我们商务申请。
10.DM7在初始化库的过程中需要注意哪几个重要参数?
(1) 页大小(page_size)
除去Clob、Blob等大字段外,数据库中一行记录的所有字段的实际长度的和不能超过页大小的一半。
建议页大小设置为16K,防止在后期进行数据迁移和开发过程中出现记录超长的问题;
(2) 日志文件的大小(log_size)
数据库redo日志文件的大小,单位为M,正式环境日志文件的大小一般设置为2048;
(3) 字符串比较大小写敏感(case_sensitive)
默认为大小写敏感的,根据具体情况进行设置。迁移实施中如果原始库为Oracle和DB2数据库的话
需设置为大小写敏感,若为SQL Server和MySQL数据库则需设置为大小写不敏感,所以在数据库
初始化库的过程中需要根据具体情况来选择。
注意事项:
在开发环境和测试环境的页大小、字符串大小写敏感等初始化参数一定要保持一致,避免使用.bak文件进行
还原的时候,因为初始化参数不一致导致无法还原的问题。所以在初始化库之前务必规划好上述参数,因为
页大小和字符串比较大小写敏感这两个参数一旦初始化完成,后期无法修改。如需修改,则只能删掉现有实例
重现初始化新的实例。
总结:
数据库在安装的过程中基本上就是下一步下一步,按照默认选项安装就好,安装路径根据自己的要求选择。
当数据库安装完成,在使用数据库配置助手dbca工具初始化库的过程中,其它步骤按照默认选项下一步即可,
当到这个页面时需要注意以下三个参数的设置,其它参数如无特殊要求按照默认选项就好。现截图如下:
11.何为字符串比较大小写敏感?
关于字符串比较大小写敏感主要涉及到两个方面的内容:
(1) 对字段的值比较而言
假如表Test中有如下两条记录
c1 c2
1 a
2 A
同样的查询语句:select * from Test where c2 = ‘a’;
在大小写不敏感的库中会查出如下的两条记录
c1 c2
1 a
2 A
而在大小写敏感的库中则只会查出如下的一条记录
C1 C2
1 a
(2) 对于表名、字段名而言
在设置为大小写敏感的库中进行查询的时候,可能经常会遇到无效的表名或列名的问题,
下面针对这种情况进行说明。
(i) 如果使用DM管理工具图形界面建表的话建议表名和字段名都使用大写。因为使用图形界面建表相当于
使用语句建表的时候加了双引号的,会固定住大小写。如果写成小写,那么就是小写了,在查询的时候
也需要加双引号,否则就有可能报无效的表名或列名的问题,比较麻烦;
(ii) 如果使用脚本建表的话,如果表名和字段名没有加双引号的话都会被系统自动转换成大写。
如:create table test(a int);系统会自动把表名test,字段名a转换成大写,处理方式与Oracle数据库一致。
所以针对大小写敏感的库,在使用建表脚本或者通过查询脚本进行查询的时候建议统一不要写双引号,
让系统统一自动都转化为大写;
(iii) 以上两点主要针对大小写敏感的库而言,大小写不敏感的库则不存在上述问题。
总结:基于以上两点,在初始化数据库的过程中就可以对字符串比较大小写敏感这个参数做出合理的选择了。
12. DM7是否需要设置所谓的外网IP?
DM7是不需要设置外网IP的,只要网络畅通,相应端口(默认端口为5236)开放的情况下就可以访问。
13.DM7是否支持增量备份?第三方管理工具是不是好用些?
DM7支持增量备份,详细内容请参考DM_DBA.pdf手册的第31章 备份和还原的相关章节。
个人觉得数据库本身自己做的增量备份肯定比所谓的第三方工具更稳定可靠。
14.DM7数据库管理员SYSDBA用户的密码忘记了能否找回?
(1) 原则上数据库管理员SYSDBA用户的密码忘记了是无法找回的;
(2) 极个别特殊的情况可能需要通过研发从源码层面进行修改,从而跳过密码认证这块。
温馨提示:
(1) 数据库管理员SYSDBA的密码不要随便修改,默认密码为SYSDBA(密码严格区分大小写)。
如果出于安全方面的考虑非得修改,请一定要做好备案工作;
(2) 如果数据库中还有其它的用户,可以尝试在数据迁移工具DTS中使用其它用户登录,把数据库中
相关用户的数据迁移到新的实例对应的用户中;
(3) 如果库里面没有业务数据或者数据不重要,则可以考虑卸载重装。
15.DM7如何判定当前库中一个表是否存在?
可以通过查询DBA_TABLES或ALL_TABLES,如果要查询某个用户下某个表是否存在,可以通过OWNER列进行限定。
如:查询用户TEST下是否存在表TAB,SQL脚本如下
select * from DBA_TABLES where owner = ‘TEST’ and table_name = ‘TAB’;
注:
(1) 关于DBA_TABLES中每个字段的具体含义可以参考DM_DBA.pdf手册_附录3 ORACLE兼容视图;
(2) 为了提高 DM7与ORACLE 的兼容性,DM7提供了较为丰富的与Oracle兼容的视图。
16.DM7如何配置归档?
DM7配置归档的详细操作步骤如下:
(1) 打开dm.ini中的归档开关:ARCH_INI=1;
(2) 在数据文件目录data/DAMENG下配置dmarch.ini,内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #归档类型 LOCAL/REALTIME
ARCH_DEST = d:\dmdbms\data\DAMENG\ARCH #归档目标路径(注意实际路径)
ARCH_FILE_SIZE = 1024 #单个归档文件大小,单位Mb,缺省128M
ARCH_SPACE_LIMIT = 10240 #REDO日志归档空间限制,单位为Mb,0表示无限制
(3) 重启数据库服务器
完成上述三步则就完成了DM7归档的配置。
关于每个参数具体含义介绍:
(i) ARCH_TYPE 归档类型,对于单机的数据库配置归档而言,基本就是本地归档(LOCAL),如果涉及到DM7
其它集群的配置时,则会涉及到其它的归档类型;
(ii) ARCH_DEST 归档目标路径,一般专门新建一个归档文件夹存放归档文件,这样产生的归档文件就会放到
该归档文件夹中;
(iii) ARCH_FILE_SIZE 单个归档文件的大小,数据库在运行的过程中会产生归档文件,当单个归档文件的大小
达到1024M时,系统会自动切换写下一个归档文件;
(iiii) ARCH_SPACE_LIMIT 归档空间限制,首先需要说明的一点就是归档文件是循环写的,上面已经提到了当
单个归档文件的大小达到1024M时,系统会自动切换写下一个归档文件。随着系统的运行归档日志文件
会越来越多,当达到归档空间限制之后,系统会自动删除老的归档文件。而关于这个归档空间限制的大小
一般需要结合备份策略来考虑,基本的设置的原则是至少要能够容纳下2~3个全库全库备份间的所有归档。
17.DM7如何屏蔽保留字?
方法一:双引号法
这个一般可以用来处理建表语句中的保留字冲突,如表名或者字段名是DM7的保留字。这种方法一般可以
快速地绕过问题,但是对于大小写敏感的库,这种用双引号的方法会固定死字段大小写,对于小写的字段,
可能会带来无效的表名或者列名的问题。
方法二:dm.ini中的参数设置
在dm.ini中有个参数EXCLUDE_RESERVED_WORDS,这个参数可以用来屏蔽你想要屏蔽的保留字,将需要屏蔽
的保留字写在=号后面,然后以逗号分隔。设置在dm.ini中的好处就是一旦设置,永久生效而且对所有客户端都有效,
这样就不需要在所有客户端系统中进行专门配置。但是设置在dm.ini中之后,这个保留字就永久性失效了,哪怕你想
通过manager客户端工具在本地连接也没用了。而且该方式还存在一个隐患就是由于屏蔽掉了一些系统的保留字,
所以可能会导致系统的一些功能无法正常使用。
建议:
在移植过程中遇到DM7的保留字,最好的处理方式还是对这些保留字进行修改,尽量不要使用DM7的保留字。
18.在安装DM7的过程中出现错误 ELF file OS ABI invalid 该如何解决?
常见错误截图如下:
解决办法:
报这个错误说明安装的数据库版本与操作系统版本不匹配,需找我们商务人员重新申请相匹配的数据库版本。
19.使用DM7时如何进行导入导出?
建议通过命令行的方式进行导入导出。详细可参见:DM_DBA.pdf手册 第31章 备份和还原 中逻辑备份和逻辑还原的
相关章节。
20.DM7如何关闭一个session?
可以通过调用一个系统函数SP_CLOSE_SESSION来关闭一个session。
函数定义:
VOID SP_CLOSE_SESSION(SESSION_ID INT)
功能说明:
停止一个活动的会话
参数说明:
SESSION_ID:会话 ID
举例说明:
SP_CLOSE_SESSION(510180488);
21.DM7有类似于Oracle的AWR分析报告吗?
有的,详细请参考DM_SQL.pdf手册中 21.25 DBMS_WORKLOAD_REPOSITORY包中的相关内容和示例说明。
22.Oracle中raw类型在DM7中可以用哪种类型代替?
Oracle中raw类型在DM7中可以使用varbinary代替。
23.如何扩展数据库的redo日志?
调整数据库redo日志的大小,如将2个redo日志都扩展到2G(注意redo日志的实际路径)。使用SYSDBA用户登录,
然后执行如下脚本:
alter database resize logfile ‘D:\dmdbms\data\DAMENG\DAMENG01.log’ to 2048;
alter database resize logfile ‘D:\dmdbms\data\DAMENG\DAMENG02.log’ to 2048;
24.DM7数据库如何进行卸载?
在使用DM7的过程中,有时候我们可能需要卸载DM7后重新安装新的数据库版本,下面简单讲述如何正常卸载
DM7数据库。
前提条件:在进行卸载达梦数据库之前,先正常关闭达梦数据库。
Windows环境:
方法1:在Windows的 开始 -> 所有程序 -> 达梦数据库 -> 卸载;
方法2:在达梦数据库的安装目录,如D:\dmdbms目录下可以看到达梦数据库的卸载程序uninstall.exe,双击该
程序也可以完成卸载。
注意事项:先保证达梦数据库处于关闭状态然后再进行卸载,否则Windows服务窗口中达梦数据库注册的一些服务和
注册表中的一些信息可能无法正常删除,这样可能会给下一次的安装带来麻烦。
Linux环境:
方法1:图形界面卸载
如果可以直接接触Linux服务器的桌面,在桌面上会有一个DMDBMS的文件夹,里面也有卸载的图标,
双击即可完成卸载,与Windows的界面风格完全一致;
方法2:字符界面卸载
在达梦数据库的安装目录,如/opt/dmdbms目录下有一个卸载脚本uninstall.sh,在Linux终端中执行命令
./uninstall.sh -i 即可以字符界面完成对达梦数据库的卸载。
注意事项:先保证达梦数据库处于关闭状态然后再进行卸载。