FAQ Overview

2005

插入记录时发现日志文件满,该怎么做?

DBMaster默认的日志文件大小为4MB,所以只有增加日志文件大小才能够解决此问题。有两种途径可以增加日志文件的大小。一种是增加日志文件的大小,另一种是添加日志文件数。当然,用户也可以同时增加文件的大小和数量。

作者: Sandy
更新时间:2016-01-18 04:47


能给一些DB设计的注意事项吗?

系统结构:
这个配置和其他的大致相同,你需要考虑到:
(1) 使用3级或者服务器/客户端来减少数据库服务器的任务量。
(2) 使用存储过程来减少不必要的来回重复工作。
DB服务器配置:
(1) 为了获得更好的性能,尽量分配1/2的物理存储给DCCA。
(2) 适当地分离出表空间文件到不同的磁盘。
(3) 把比较大的表放入一个单独的表空间,避免和小表混合。
模式设计:
(1) 设置锁模式为行锁或者页锁。默认将使用页锁,但是在一些OLTP环境下,行锁可能是更好的选择。这取决于表的模式(它的索引,大小和SQL命令等)。
(2) 使用到事务时,DBMaster默认为自动提交。用户应该清楚这种配置将会影响性能。
(3) 为表和索引设定70%或者80%的fillfactor。否则行移植或者索引分离将会导致数据库性能降低。
(4) 根据需要创建一个合适的索引。通过研究,40%以上的索引都不会被DBMS使用。请确定您在系统中选择了正确的索引。
AP设计:
(1) 如果需要的话请使用提示选择最好的执行计划。
(2) 使用DB_DTCLT和DB_ITIMO删除那些有可能死链接。(此功能默认为开启)
在DBMaster中,很难用一个简单的单词来表达什么是好的设计。以上所列的只是大的方向。用户也可以参考有关性能调优的手册。

作者: Sandy
更新时间:2016-01-18 04:48


在UNIX系统下连接到成功编译的EC程序时,为什么ESQL/C会报错?

因为对于Redhat9或者以后的版本,被用于连接EC程序的libdmapic.a需要在Redhat9 下重新编译。我们会为客户创建新的版本。

作者: Sandy
更新时间:2016-01-18 04:49


在JDBA中可以进行锁超时设定吗?

可以。您可以通过使用以下的代码达到您的目的:
Class.forName("dbmaster.sql.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:dbmaster://127.0.0.1:2453/dbsample4;CTIMO=30;","sysadm","");

作者: Sandy
更新时间:2016-02-23 04:54


在Windows系统下,为什么错误信息会是乱码呢?

当用户连接他们的ODBC程序时,我们建议用户连接dmapi4X.lib。否则,如果数据库没有很好得被配置,用户就有可能看见乱码的错误信息。

作者: Sandy
更新时间:2016-01-18 04:52


DBMaster什么时候、怎样使用用户自定义排序文件(EBCDIC_stroke.ord)?

要使用用户自定义排序文件,用户应该把排序文件放在$DBMaster_Home/shared/codeorder路径下,然后使用DB_Order关键字去设定排序文件的名称,以便DBMaster使用新定义的用户自定义排序文件。
只有在创建数据库时,才使用到排序文件。

作者: Sandy
更新时间:2016-01-18 04:53


当我们开启数据库时,是否有两个DBMaster.bin进程被默认开启? 1. 当用户连接数据库时,子进程是不是一个接一个被开启? 2. 如果用户想检查数据库是否活跃,在LINUX中,他们能否通过PS命令查看活跃进程个数?(如果DBMaster.bin进程的个数少于2个,是否意味着数据库断开?)

默认地,当DBMaster启动后,在Linux系统里有三个进程被启动;一个是可以通过AP访问的主进程,另两个分别是IO_Server (2) 和Service_Server (1)。IO_Server支持I/O需求但不能被终止,Service_Server如期更新统计信息,若不需要可以被终止。所以,当数据库启动时,至少两个进程存在。如果通过dmSQL/C连接数据库,另一个进程(3)将通过主进程序被启动以用于dmSQLC客户端向server端的连接。

作者: Sandy
更新时间:2016-01-18 04:54


怎样通过shell script rebuild数据库?能给一些示例吗?

请参考${dbmaster_home}\samples\DATABASE\init.sql.

                  CREATE DB DBSAMPLE4;

   CREATE TABLE SYSADM.Card ( NumSERIAL(1) PRIMARY KEY,FirstName                  VARCHAR(30), LastName VARCHAR(30),TitleVARCHAR(30), BMp LONG                     VARBINARY) IN DEFTABLESPACE;

INSERT INTO SYSADM.Card VALUES (?,?,?,?,?) ;

1, 'Eddie', 'Chang', 'Manager', &data1.b0(0,6666);

2, 'Hook', 'Hu', 'Software Engineer', &data1.b0(6666,6666);

3, 'Jackie', 'Yu', 'Software Engineer', &data1.b0(13332,6666);

4, 'Ray', 'Sung', 'Software Engineer', &data1.b0(19998,6666);

5, 'Louis', 'Liu', 'Software Engineer', &data1.b0(26664,6666);

6, 'Trent', 'Clowater', 'Software Engineer', &data1.b0(33330,6666);

7, 'Oscar', 'Tseng', 'Software Engineer', &data1.b0(39996,6666);

8, 'Jerry', 'Liu', 'Manager', &data1.b0(46662,6666);

END;

作者: Sandy
更新时间:2016-01-28 10:46


当通过终止DB命令关闭数据库时,DBMaster会强制终止那些活跃的会话吗?

是的,当DB因终止命令被关闭时,DBMaster会强制终止那些当前的会话。

作者: Sandy
更新时间:2016-01-28 10:49


关于下面类型的SQL有一些bug吗?我们从以下的SQL语法中将得到什么样的结果? select * from (select * from t1 where a=1) a1 left join t2 b1 on (a1.a=b1.a); Is the following SQL different meaning from the above SQL? select * from t1 left join t2 on (t1.a=1 and t1.a=t2.a);

SQL语句

select * from (select * from t1 where a=1) a1 left joint2 b1on (a1.a=b1.a)’

‘select * from t1 left join t2 on (t1.a=1 andt1.a=t2.a)’

意思是不一样的。实际上,第二个语句类似

‘select* from t1 left join t2on t1.a=t2.a where (t2.a=1)

‘on’条件是为join所用而不是为t1的过滤条件。

作者: Sandy
更新时间:2016-01-28 10:50


DBMaster有没有简单的命令行办法可以输出数据到CSV型的文本文件?

有的,你可以用工具JDATATransfer达到此目的,请参考JDATATransfer工具的使用说明。DBMaster会在以后的版本中添加此功能到dmSQL。


 
     
  
  
  
  
  
  
  
  
  
  
 
 
 


 
   
  
  
  
  
  
  
  
  
  
  
  
 
 

 
 
   
  
  
  
  
  
  
  
  
  
  
  
 
 
 

                       

 

 

作者: Sandy
更新时间:2016-01-29 03:42


如果没有注册DSN怎样才能访问DBMaster?

如果您没有注册DSN,当使用ADO时,可以使用以下的连接字符串:

            strConn="Driver=DBMaster4.1Driver;DATABASE=Dbsample4;SvAdr=192.168.0.164;PtNum=8888;UID=sysadm;Pwd=;ATCMT=1;"

您需要注意以下几点:

  1. 在连接字符串中不要改变关键字的顺序。
  2. 对于不同的数据库,您需要更改以下三个参数的值:DATABASE=Dbsample4; SvAdr=192.168.0.164; PtNum=8888
  3. 对于DBMaster 和 DBMaster的不同版本,您需要注意参数 Driver=DBMaster 4.1这样的设置,如下例:

eg:运行DBMaster 4.1, 设置Driver =DBMaster 4.1驱动;

        运行DBMaster 4.2, 设置Driver =DBMaster 4.2驱动;

        运行DBMaster 4.1, 设置Driver =DBMaster 4.1驱动;

        运行DBMaster 4.1, 设置Driver =DBMaster 4.1驱动;

作者: Sandy
更新时间:2016-02-23 04:23


内部怎样处理重复插入BLOB数据?当插入的BLOB数据是一样的时候它是共享这个BLOB数据吗?

如果相同的LO数据被包含于很多元组中,DBMaster将仅存储一个LO并在元组中共享,但这只发生在UPDATA数据时。当INSERT数据时,DBMaster不能判断LO数据是否被共享。所以,它将会分别存储LO数据而不是共享这些数据。

作者: Sandy
更新时间:2016-02-23 04:20


在执行dropping table 和loading table后,分别使用update statistics table和update statistics,为什么后一个的执行时间短于前一个呢?在DBMaster中这两种处理方法是不同的吗?执行update statistics 时,除了systablespace的数据之外,还有别的systemcatalog 被更新吗?

update statistics update statistics table处理方法是不同的。因为update statistics将会更新所有的表的字段,索引等等。所以为了节约资源,当累积一定数量的数据时它才更新统计。结果,用户会觉得update statistics节约时间。

用户可以使用以下语法强迫DBMaster更新所有统计:

update statistics sample=100

update statistics将更新表,字段,索引。所以所有包括这些的系统表都将被更新。

作者: Sandy
更新时间:2016-02-23 04:19


当调用ODBC函数返回SQL代码为SQL_ERROR 或SQL_SUSSESS_WITH_INFO时,程序该如何处理,需要进行错误处理吗?

是的,程序需要作错误处理。首先,用户可以使用函数SQLERROR()来得到错误信息的详细内容,然后针对不同的计算机语言使用不同的处理方法,例如,java程序使用SQLExceptionSQLWarning来处理,VC程序则不同。

作者: Sandy
更新时间:2016-02-23 03:40


当VC程序出现SQL_ERROR 或 SQL_SUCCESS_WITH_INFO时,如何进行错误处理?

这需要程序进行预算,如果SQLCODE=-1,则需要编写代码来处理错误,考虑到示例代码很长,所以不在这里添加,如果想参考示例代码,请与DBMaster的技术支持联系。

作者: Sandy
更新时间:2016-02-23 04:17


当VB程序出现SQL_ERROR 或 SQL_SUCCESS_WITH_INFO时,如何进行错误处理?

这时,需要使用对象adodb.sqlerror代替err对象来得到原始错误,因为err对象无法得到数据库的原始错误代码。下面是VB程序中进行错误处理的示例:

 

// VB

       Dim objConn As New ADODB.Connection

    On Error GoTo ErrorHandle

  

    objConn.Open "dsn=dbsample4"

    objConn.Execute "insert into t1 values (2, '12345678901234567abcdefg')"

    If objConn.Errors.Item(0).NativeError = 63 Then 'success with info

        Err.Raise objConn.Errors.Item(0).NativeError, objConn.Errors.Item(0).Source,  objConn.Errors.Item(0).Description, objConn.Errors.Item(0).HelpFile, objConn.Errors.Item(0).HelpContext

    End If

    Set objConn = Nothing

 

ErrorHandle:

    Err.Raise objConn.Errors.Item(0).NativeError, objConn.Errors.Item(0).Source, objConn.Errors.Item(0).Description, objConn.Errors.Item(0).HelpFile, objConn.Errors.Item(0).HelpContext

    Set objConn = Nothing

作者: Sandy
更新时间:2016-02-23 03:57


创建表时用到的参数FillFACTOR有什么功能?

FillFACTOR功能通过为当前的记录保留可扩展空间来优化空间的利用率,当一个记录的大小有所增加而该数据页上的空闲空间不足时,其他的记录将会被放置到另一个页面上,这将严重影响性能。所以,DBMaster设置FillFACTOR来避免出现此类情况。它的原理是:当记录的长度有所改变时,所有记录的长度不会超过数据页的大小,以避免一些记录被放置到其他数据页上。

作者: Sandy
更新时间:2016-02-23 04:14


如何决定FILLFACTOR的值?

如何选择合适的FILLFACTOR值要根据具体情况而定,下面列出一些大致的规则,如果一个表符合下面的一条标准,请设置一个较大的FILLFACTOR值。

  1. 表很少更新。
  2. 记录大小基本上是固定的,也就是说,所有字段基本都是固定长度的和非空的。如果表的字段都是固定大小的,那么FILLFACTOR的值可以设为100.
  3. 以上两条都不满足,但是,频繁更新的字段大部分是固定长度的。

提供一些步骤计算下限,不过请注意,计算数据页的实际使用情况将是非常复杂的。这里提供的方法仅仅是给出一个快速而有效的方式来计算一个范围:

  1. 计算空值Empty:所有可以为空字段的空值和可变字段的空值。
  2. 计算满值Full:所有填满字段和满长字段。
  3. 然后,FILLFACTOR的值不应该小于50Empty/Full*100之间的较大值。

对大多数情况,理想的FILLFACTOR值应该在这个值与100之间,通过计算实际情况的Empty值可以缩小这个范围。

例如,

table1 {

     c1 int not null;

     c2 int;

     c3 char(20) not null;

     c4 varchar(12) not null;

}

在这个例子中,Empty = 4 + 0 + 20 + 0 = 24, Full = 4 + 4 + 20 + 12 = 40,所以,FILLFCATOR至少应该为24/40*100 = 60。

然而,如果c4被程序限制至少为6个字符(例如,密码长度),那么Empty的值应该为4 + 0 + 20 + 6 = 30,这样,FILLFACTOR的值应该不小于30/40*100=75.

对于BLOB/CLOB字段,使用8 字节(OID的大小)作为它们的大小。

作者: Sandy
更新时间:2016-02-23 04:02


在PHP程序中,如何改变SFO的文件扩展名?

 

请看下例:

$conn=odbc_connect("nba","SYSADM","");

   if($conn)

         {

              error_reporting(0);

              odbc_do($conn,"drop table php_fotest");

              error_reporting(7);

         $res1=odbc_do($conn,

                       "create table php_fotest(c1 int,c2 file)");

          if($res1){

                             $res=odbc_prepare($conn,

                                     "insert into php_fotest values(?,?)");

                    odbc_exec($conn, "set extname to 'aaa'");

                   $param[0]=1;

                   $param[1]="'rahim.jpg'";

                   $res2=odbc_execute($res,$param);

                   if($res2)

                        {

                         $res3=odbc_exec($conn,"select c1,filename(c2) from php_fotest");

                         $str1=odbc_result($res3,1);

                         $str2=odbc_result($res3,2);

                         echo "$str1\n";

                         echo "$str2\n";

                          echo "Show dbmaster system fo image file ";

                          echo "<IMG SRC=\"display2.php?id=1&dbuser='SYSADM'&dsn='nba'&dbpwd=''\"><p>";

                        }

                   }

        }

作者: Sandy
更新时间:2016-02-23 04:13


如何将数据库从3.x版移植到4.X中?

可以使用Unload/load命令移植数据库,也就是先从3.x卸载数据库,然后把它加载到4.x,下面的步骤用3.7和4.2数据库为例进行说明:

  1. 如果需要的话,备份旧的数据库。
  2. 使用DBMaster3.7的dmSQL工具连接到原始数据库(命名为MIS),将MIS卸载到一个目标路径,假设为C:\ 37MIS \。
  3. 复制路径DB_FoDir下的所有文件到路径C:\ 37MIS \。
  4. 在DBMaster 4.2创建一个新的数据库,我们命名为NEWMIS,它的dmconfig.ini配置和数据库MIS相同,但是数据库路径却不同。
  5. 使用DBMaster 4.2的dmSQL工具连接到NEWMIS数据库,从目标路径加载旧数据库,为C:\ 37MIS \.。
  6. 移植工作完成。
  7. Check if all the objects, including stored procedure, UDF, View still work in the new database and enjoy the new function of DBMaster 4.2.  检查所有的对象包括存储过程,UDF,视图是否能够在新的数据库里正常运行,之后您就可以享受DBMaster4.2的全新功能了。

同样,移植数据库需要耐心,有很多需要注意的地方,有关移植数据库的详细信息,请参考《数据库移植用户使用手册》。

作者: Sandy
更新时间:2016-02-23 04:57


4.1.4和4.1.6能在一个操作系统中共存吗?

不能。它们不能共存于一个操作系统,否则,之前安装的ODBC驱动将会被后来安装的版本所重写。

作者: Sandy
更新时间:2016-02-23 04:59


DBLINK 能连接4.14和4.16吗?DBLINK连接相同的版本和连接不同的版本有什么不同之处呢?

是的,DBLINK能够连接4.14和4.16,也就是说无论是相同的或不同的版本通过DBLINK连接时没有什么不同之处。

作者: Sandy
更新时间:2016-02-23 05:00


如果数据库异常关闭,DBMaster会做恢复动作吗?(USE: DMBR: 1667)

如果数据库异常关闭,可能是页缓冲区数据没有写入数据文件。在启动数据库后,DBMaster服务器将会做一次恢复。这个恢复将检查数据文件是否有异常事务。如果有事务没有提交或回滚,服务器将做re-do 和un-do的动作来恢复这些事务以保持数据库的一致性。

作者: Sandy
更新时间:2016-02-23 05:02


存在多个日志文件,当从当前日志文件转换到下一个时,会出现检查点吗? (USE: DMBR: 1667)

是的,当从日志缓存写入日志文件而发现日志文件没有足够的空间时,服务器将把这些日志数据写入另一个日志文件,所以这个行为出现检点。

作者: Sandy
更新时间:2016-02-23 05:02


测试问题?

该内容正被修订,不能显示.

作者: Sandy
更新时间:2020-06-12 03:23


2006

当把从别的数据库(非DBMaster)上卸载的SQL脚本文件加载到DBMaster里时,该注意什么?(USE: DBMR: 1643)

要成功向DBMaster加载文件,应该注意以下几点:

  1. 设置文件的扩展名为.s0.
  2. 确报在s0文件中的行的最大长度不超过80个字符。使用转译符号“\”将每80个字符分离为两行或更多行。请记住要处理双字节单词。

作者: Sandy
更新时间:2016-02-23 07:27


当从一个DB上卸载文件时,DBMaster什么时候创建.s1文件?(USE: DBMR: 1643)

目前,从DBMaster上卸载的文件大小大概是1G,这是在dmSQL工具里DBMaster的限定,所以当DBMaster发现输出文件的大小接近1G时,它将会为其他的数据创建一个新的外部数据文件,直到输出完所有的数据。其他的文件将被命名为**.s1, **.s2等等。

作者: Sandy
更新时间:2016-02-23 07:28


服务器端从4.1.4升级4.1.6之后,4.1.4的客户端还能连接到已经升级后的服务器端吗?(USE: DBMR: 1674)

可以。4.1.4的客户端能轻松地连接到4.1.6的服务器端。

作者: Sandy
更新时间:2016-02-23 07:30


服务器端从4.1.4升级4.1.6到之后,与4.1.4版本链接的ODBC程序,能像以前一样正常运行吗?(USE: DBMR: 1674)

作者: Sandy
更新时间:2016-02-23 07:31


在执行dropping table 和loading table后,分别使用update statistics table和update statistics,为什么后一个的执行时间短于前一个呢?在DBMaster中这两种处理方法是不同的吗?执行update statistics 时除了systablespace的数据之外,还有别的系统表被更新吗?

update statistics update statistics table处理方法是不同的。因为update statistics将会更新所有表的字段,索引等。所以为了节约资源,当有累积一定数量的数据时才执行更新统计。结果,用户会觉得update statistics节约时间。

用户可以使用以下语法强迫DBMaster更新所有统计:

update statistics sample=100

update statistics将更新表,字段,索引。所以所有包括这些的系统表都将被更新。

作者: Sandy
更新时间:2016-02-23 07:39


怎样确定自动更新统计的后台程序正在运行(有什么可以明示的进程吗)?让更新统计工作的触发器是哪个?(像表里插入多少记录)?

当数据库为启动状态,如果在dmconfig.ini里设置DB_SVRST = 1,那么统计后台程序会在凌晨三点自动启用。用户可以通过 select * from sysuser 命令查看统计后台服务器是否被激活。SERVICE_SERVER就是这样。统计后台程序仅在凌晨三点自动开启,如果您想在另外的时间更新统计,你可以使用操作系统内部的进度表执行它,update statistics table_name将会完全更新table_name的统计值(默认sample=100.)。

更新统计后台将按照以下的规则更新表的统计值:

  • 表大小不超过20页,不更新统计数据
  • 插入数据不超过2页,不更新统计数据
  • 时间不超过10天。不更新统计数据

作者: Sandy
更新时间:2016-02-23 07:40


使用JDBC数据源连接DBMaster,对命令句柄的数量限制是多少?

DBMaster 4.16/4.20允许的最大命令句柄为257,但是在4.21,4.22,4.3和以后版本中,用户可以通过设置关键字DB_MXcmd来扩大该限制。默认值是257,可取值范围为1~32767。如果该值设置的过大,DBMaster会收集更多的内存。请充分考虑您应用程序使用的句柄,收集太多句柄会影响操作系统或数据库的性能。

作者: Sandy
更新时间:2016-02-23 07:42


应用程序中的命令句柄数量超过限制怎么办?

 用户应该修改应用程序, prepare1次,然后EXECUTE n 次。

例如:

ps2 = this.conn.prepareStatement("insert into TESTDB values(?, ?, ?);"); 

         for(int i=0; i<list.size();i++)

{

                            tData = (TestData)list.get(i);

                            ps2.setString(1,tData.shp_cd);

                            ps2.setString(2,tData.shp_nm);

                            ps2.setString(3,tData.tel_no);

                                 ps2.executeUpdate();

                            this.conn.commit();

}

为提高性能,我们建议如上例一样编写程序。也就是,PREPARES SQL 语句仅一次,然后在程序运行当中根据需要可EXECUTE多次。

作者: Sandy
更新时间:2016-02-23 07:44


执行插入命令后,如果当前页面已满,DBMaster如何查找空闲页面?

DBMaster内部会保留之前插入页面的id(hint page),当执行下一个insert SQL命令时,DBMaster会首先查找该页面进行insert动作,如果该页面空间不足,便查找下一页执行insert动作。例如,如果之前insert页面的id是200,然后执行了一些命令,DBMaster会首先在页面200插入数据,如果页面200没有足够的空间,DBMaster会按顺序扫描下一个页面(201)来寻找足够的空间,如果直到表空间底部仍然找不到空闲空间,它便会跳到表空间的头部重新扫描,继续寻找空闲页面。

作者: Sandy
更新时间:2016-02-23 07:45


在执行更新操作时,如果新数据大于之前的数据,DBMaster如何操作?

如果页面剩余空间可以存储新数据,DBMaster会首先删掉旧数据,然后在同样的地方存储新数据。如果页面剩余空间不够存储新数据,DBMaster在删除旧数据后,将新数据设置为间接数据。间接数据需要更多的I/O,可能引起性能下降,为避免产生间接数据,请在创建表时设置合适的FILLFACTOR值。

作者: Sandy
更新时间:2016-02-23 07:46


DBMaster如何处理delete命令?

DBMaster中,每个记录都有一个结构,DBMaster只是对这些结构标记上‘delete’标签,数据仍然存在于数据页中(用户看不到数据,但是对于DBMaster来说,数据仍然是存在的),这样做的目的是为了提高性能,但是从用户的视角看,整个数据已经被删除了。

作者: Sandy
更新时间:2016-02-23 07:47


在ESQL应用程序中使用cursor update,为什么发生错误?

例如:

表模式如下:

dmSQL> def table card1;

create table SYSADM.CARD1 (

 NUM  SERIAL(1),

 DD  INTEGER not null,

 EE  CHAR(1) not null,

 FIRSTNAME  VARCHAR(30) not null,

 LASTNAME  VARCHAR(30) not null  ,

 TITLE  VARCHAR(30) default null ,

 BMP  LONG VARBINARY default null )

 in DEFTABLESPACE  lock mode page  fillfactor 100 ;

alter table SYSADM.CARD1 primary key ( NUM, DD, EE, FIRSTNAME);

编写ESQL/C代码:

EXEC SQL declare scroll_cursor scroll cursor for

      select Num,dd,ee,LastName, FirstName from Card1

      where NUM < 9 order by EE,NUM, DD,FIRSTNAME 

      into :Num, :LastName :indvalue, :FirstName :indvalue

      for update of LastName;

上面的ESQL/C代码返回错误。

 

 当使用Cursor update,有两个限制:

  1. ORDER BY子句中的字段必须是索引字段。
  2. 如果在OERDER BY子句中有多个字段,这些字段的顺序必须同于索引的定义顺序。

所以,上面例子中的ORDER BY子句应该改为:

Create an index with then same sequence with NUM, DD, EE, FIRSTNAME

Order by NUM, DD, EE, FIRSTNAME

以保证顺序与索引定义顺序一致。

作者: Sandy
更新时间:2016-02-23 07:50


SQL手册中说:使用两个连续的单引号来表示字符串中的单引号。它的意思是如果我想插入带有单引号的数据,我应该使用另外的引号作为转换符。但是下面的语句中,我没有使用单引号作为转换符,语句仍然顺利执行了,为什么?(From DBMR1702, version: DBMaster 4.1.6) sprintf(sChnkbn, "'A");

如果在ESQL使用下面的语句,单引号将被看为转换次序。

EXEC SQL insert into 1702(a,b) values(1,'''A');

但是在语句 sprintf(sChnkbn, "'A");是一个C语句,C语句中的转换字符不是单引号,所以,在你的语句中,单引号被当做常规字符来处理

作者: Sandy
更新时间:2016-02-23 08:01


在Orcale中,用户可以通过下面的语句将date类型转换为char类型,那么在DBMaster中如何实现呢?

select * from QMDVFCMDBS where

sts_tkystr <= to_char(sysdate,'yyyymmdd') and sts_tkyend >= to_char(sysdate,'yyyymmdd')

 

DBMaster提供了转换函数,在DBMaster路径 \DBMaster\x.x\shared\udf下有两个转换函数todatedatetostr不过用户需要先创建这个UDF。

或者,通过下面的语句实现:

select replace(cast(curdate() as char(10)),'-','') as new_char;

假设有一个表的模式如下:

create table SYSADM.B (

 STS_TKYSTR  CHAR(10) default null ,

 STS_TKYEND  CHAR(10) default null )

可以像下面这些select:

select * from b where STS_TKYSTR <= replace(cast(curdate() as char(10)),'-','') and STS_TKYEND >= replace(cast(curdate() as char(10)),'-','');

作者: Sandy
更新时间:2016-02-23 07:58


如果遇到死锁的问题,如何来调查原因呢? (From DBMR1703, version: DBMaster 4.1.2, OS: Windows XP Embedded SP1)

为了调查原因,首先要监测锁,例如,如下所示:

dmSQL> select USER_NAME, TABLE_NAME, SYSLOCK.LK_OBJECT_ID,

SYSLOCK.LK_GRAN, SYSLOCK.HOLD_LK_CONNECTION, SYSLOCK.LK_CURRENT_MODE

from SYSLOCK, SYSTEM.SYSTABLE, SYSUSER where HOLD_LK_CONNECTION = CONNECTION_ID and LK_OBJECT_ID = TABLE_OID and TABLE_OWNER != 'SYSTEM' and LK_GRAN != 'SYSTEM';

 

USER_NAME  TABLE_NAME  LK_OBJECT_ID     LK_GRAN   HOLD_LK_CONNECTION   LK_CURRENT_MODE

==========   ==========    ==============   ========   ====================    ==================

SYSADM                          D    1b00000000000600     TABLE                                       575                                      X

1 rows selected

然后当死锁发生时,应该每隔几秒中就select SYSUSER来获得锁状态信息。

从以上获得的所有信息对调查死锁的原因都是有帮助的。

作者: Sandy
更新时间:2016-02-23 08:08


如何获得数据库系统信息? (Form as the above)

一般情况下,当用户遇到问题,他们需要分析数据库在发生问题之前和发生之时的系统信息。

所以用户需要监视数据库系统信息来了解系统状态,帮助更好地管理系统,然后解决问题。

为了不间断地监测数据库系统,用户可以编写一个时钟程序或者使用操作系统提供的时钟。Linux系统提供crontab命令,Windows系统提供at命令或通过图形化界面设置任务管理。

下面列出的脚本是关于Linux系统上crotab命令的使用示例和dmsqlc工具定时监测系统示例。

对于Windows平台,用户可以使用at命令和dmsql32工具设置执行相似的脚本。

  1. crontab 设置从星期一到星期五每5分钟运行一次checksys.bat$HOME/checksys.bat  crontab to set every 5 min and Mon-Friday to run  checksys.bat$HOME/checksys.bat

       crontab -e

       */5 * * * 1-5 $HOME/checksys.bat

 2. checksys.bat (chmod +x checksys.bat)

cd $HOME

dmsqlc $HOME/script/ttt >> $HOME/checksys.out

3. ttt script

connect to dbsample4 sysadm;

select now();

set linewidth off;

select * from sysinfo;

select * from sysuser;

;You can add the SQL command to Monitor Lock

select now();

disconnect;

q;

作者: Sandy
更新时间:2016-02-23 08:13


怎样在NCBLOB字段里插入包含单引号的数据?(From DBMR1711)

NCLOB数据类型是一种可以包含任何unicode字符的长度可变的数据类型。当输入NCLOB数据时,它需要用单引号引住unicode字符,并且单引号的前缀为'N'。

所以,如果你想输入包含单引号(')的NCLOB数据,它需要使用转义字符。在DBMaster里,转义字符就是单引号('),也就是说,在数据里的单引号之前添加另一个单引号就可以了。

例如:

dmSQL> def table tta;

create table SYSADM.TTA (

 C1  NCLOB default null )

 in DEFTABLESPACE  lock mode page  fillfactor 100 ;

在NCLOB字段输入'a'b':

dmSQL> insert into tta values(N'a''b');

1 rows inserted

dmSQL> select * from tta;

C1

========================

610027006200

1 rows selected

dmSQL> select cast(c1 as char(40))from tta;

CAST(C1 AS CHAR(40))

========================

a'b

1 rows selected

作者: Sandy
更新时间:2016-02-23 08:46


在CONCAT函数中如果一个字符串表达示包含一个NULL值时,将会返回什么值?

语法的设置决定了返回什么样的值决定于该语法的设置:

     SET CONCAT NULL RETURN { NULL | STRING }

此选项用于通过CONCAT内置函数或者连接谓词(||)进行字符串与NULL的连接时。

默认设置为NULL,如果此选项设定为NULL,那么任何字符串与Null值连接都将返回NULL。

如果此选项设定为STRING,那么任何字符串与Null值连接都返回这个字符串,因为这个空值会被当做空的字符串处理。

例如:

dmSQL> select concat ('aaa', null);

                    CONCAT ('AAA', NULL)                              

===================================================================

NULL                            

1 rows selected

dmSQL> set concat null return string;

dmSQL> select concat ('aaa', null);

               CONCAT ('AAA', NULL)                              

===================================================================

aaa                                                                  

1 rows selected

作者: Sandy
更新时间:2016-02-23 08:49


在DBMaster中,UID/Password的加密方式是什么?(From DBMR1717)

DBMaster使用的这种加密技术是DES和RSA的混合DBMaster使用的这种加密技术是DES和RSA的混合

作者: Sandy
更新时间:2016-02-23 08:53


当通过网络连接到数据库时,用户ID和密码是被加密了的吗?或者只有设定DB_NetEc=1,才会加密?设置DB_NetEc=0,会不会有泄露用户ID和密码的可能性?

是的,在网络上,无论是否设置关键字DB_NetEc。用户ID和密码都已被加密。即使设定DB_NetEc=0,在网上用户ID和密码也不会被泄露。

作者: Sandy
更新时间:2016-02-23 08:56


DBMaster支持什么ADO功能?(From DBMR1726)

在ADO模式中关有三个层次,根据每一种模式,DBMaster分别支持:

  1. DBMaster支持Microsoft Activex 数据对象库,但是在OLEDB驱动中不支持服务器端游标。
  2. DBMaster不支持Microsoft Activex 数据对象(多维) 库。
  3. DBMaster不完全支持为了DLL和安全的Microsoft ADO扩展。

作者: Sandy
更新时间:2016-02-23 09:18


使用同样的连接串为什么能连接到DBMaster4.1而连接不到4.2/4.3?(From DBMR1734)

因为DBMaster在4.1和4.2/4.3之中使用的检验规则是不同的。

对于4.1,DBMaster使用简单的检验规则检验连接串,所以如果连接串有一些没用的字符,DBMaster4.1也能允许其连接到数据库。但是对4.2和4.3.0来说,DBMaster采用了严格的检验规则,如果在连接串中有无效的或者未知的字符串,DBMaster将返回错误。这就是为什么可以连接4.1而不能连接4.2/4.3的原因。

在4.3.1(包括4.3.1)以后的版本,我们已将检验规则修改为简单的。

作者: Sandy
更新时间:2016-02-23 09:20


正确的连接字符串应该是什么?(From DBMR1734)

为了连接数据库,DBMaster提供了两种方法:注册DSN和不注册DSN。

如果已经注册了DSN,要成功连接到DBMaster的正确连接串应该是:

strConn = "DSN=data_source_name;UID=user_name;PWD=password"

如果没有注册DSN,当使用ADO时,请根据以下连接串格式进行:

strConn = "Driver=DBMaster 4.1 Driver;

DATABASE=Dbsample4;

SvAdr=192.168.0.164;

PtNum=8888;

UID=sysadm;

Pwd=;

ATCMT=1;"

请注意以下几点:

1.     关键字的顺序不能改变。

2.     不同的数据库,下面的关键字应该修改其值:

DATABASE=;

SvAdr=;

PtNum=;

3.     对于DBMaster和DBMaster的不同版本,为了与软件相一致,应该修改Driver关键字的值

例如:

          如果连接的数据库是DBMaster 4.1, 设置 Driver=DBMaster 4.1 Driver

          如果连接的数据库是DBMaster 4.2, 设置 Driver=DBMaster 4.2 Driver

          如果连接的数据库是DBMaster 4.1, 设置 Driver=DBMaster 4.1 Driver

          如果连接的数据库是DBMaster 4.2, 设置 Driver=DBMaster 4.2 Driver

作者: Sandy
更新时间:2016-02-23 09:25


如果我想减少磁盘I/O,怎么用DBMaster操作呢?(From DBMR1742)

DBMaster4.3支持两个内部配置关键字(DB_DSYNC, 和DB_JSYCN),它们能够关闭DBMaster flush功能并让操作系统去控制IO。但这是危险的,因为如果系统由于异常操作而崩溃,有可能引起数据库数据不一致。所以通常来讲,我们不建议这样做。如果确实想减少数据库的I/O,请尝试以下操作:

  • Ÿ    设置DB_JSYNC = 0(在启动数据库之前关闭日志文件flush功能,在配置文件dmconfig.ini中设置)
  • Ÿ    设置DB_DSYNC = 0(在启动数据库之前关闭日志文件flush功能,在配置文件dmconfig.ini中设置)
  • Ÿ    设置DB_STSVR = 0(关闭统计服务)
  • Ÿ    设置DB_BKSVR = 0(关闭备份服务)
  • Ÿ    设置DB_IOSVR = 0(关闭IO后台程序服务)
  • Ÿ    在查询中不能使用DISTINCT,GROUP BY, ORDER BY连接表(否则连接结果是很大的),这是为了避免DBMaster排序(创建一个临时文件)
  • Ÿ    不能创建系统文件对象(避免文件IO)
  • Ÿ    不能使用全文检索,重建索引(避免索引文件IO)
  • Ÿ    关闭表空间自动扩展功能。

作者: Sandy
更新时间:2016-02-23 09:27


当我使用dmSQL工具连接数据库服务器时,为什么返回了以下错误信息?(From DBMR1741) ERROR (1119): [DBMaster] OS shared memory setting is too small, please increase OS shared memory maximum size. [dbstart. 816],0,0,0

这不是内存的问题,请为数据库设置关键字DB_SVADR,如下所示:

DB_SVADR=192.168.0.170;

这样就可以了。

 

作者: Sandy
更新时间:2016-02-23 09:36


2007

为什么安了防毒软件之后,dmserver无法运行? (From DBMR1737 & 1754)

这可能是防毒软件的原因。一些防毒软件比如NOD32,会阻止DBMaster运行db文件,然后引起dmserver运行失败。

对于NOD32,可以将DB安装路径和数据库文件路径添加到NOD32的AMON 白名单,白名单是一个文件和文件夹列表,列表中的文件和文件夹是可以排除扫描之外的。或者在NOD32里禁用文件扫描功能来解决此问题。

作者: Sandy
更新时间:2016-02-23 10:13


在经过高版本的DBMaster启动后,为什么用以前的DBMaster版本无法启动了?怎么解决此问题。(From DBMR1747)

一旦用更高版本的DB启动数据库,一些文件版本或者系统表就被修改,更高级的数据库不能降级到低版本或更早版本。所以它再也不能用以前的版本启动了。

但是,可以使用dmSQL工具先卸载DB,然后重新装载它到以前的DBMaster版本里。

作者: Sandy
更新时间:2016-02-23 10:14


在Windows平台,当最小化dmserver窗口时,为什么内存占有减小?(From 1748)

这应该是Windows的行为。不仅仅是dmserver存在这种现象,别的程序像Outlook或者IE也存在此情况。如果你最小化dmserver到系统托盘区或者作为一种服务启动DB,这种情况将不会发生。

作者: Sandy
更新时间:2016-02-23 10:44


在Windows平台手动安装DBMaster客户端和DSN通常有哪些步骤?(From DBMR1783; Version: DBMaster 4.16)

一般地,安装DBMaster客户端和DSN有如下四个步骤(以4.16为例):

步骤1:复制文件,确保以下的文件在正确的路径下

路径

文件

Windows 路径

(如C:\Windows\, C:\Winnt)

dmconfig.ini

dmerr41.tab

DMSQL.INI

Windows 系统路径

(如C:\Windows\system32\,   C:\Winnt\system32)

dmapi41.dll

DMSQL.INI

(DBMaster 根目录)

\4.1\

COPYRIGHT

EVALUATION

grammar.sql

README.TXT

(DBMaster 根目录)

\4.1\bin\

dmdttut.dll

dmjdbaut.dll

dmjdbc20.jar

dmjdbc20xa.jar

dmjdbc30.jar

dmjsvrut.dll

dmppc32.exe

dmppcc.exe

dmset.dll

dmsql32.exe

dmxtm.dll

dmxtm.jar

dmxtt.dll

dmxtt.jar

expat.dll

icudt22l.dll

icuin22.dll

icuuc22.dll

jcfgditor.ico

jdatatran.ico

jdbatool.ico

jh.jar

jhelp.jar

jmonitor.ico

jsvrmanager.ico

jtools.jar

startup.jar

xerces-c_2_1_0.dll

xtm.ico

xtm.jar

xtt.ico

xtt.jar

(DBMaster 根目录)

\4.1\include\  

dmxtm.h

dmxtt.h

eqmacro.h

eqspincl.h

esqlda.h

esqlincl.h

esqlprot.h

esqltype.h

jni.h

jni_md.h

libudf.h

odbc.h

sql.h

sqlca.h

sqlext.h

sqlopt.h

sqltypes.h

sqlucode.h

sqlunix.h

XMLTransfer.hpp

XTMTransfer.hpp

(DBMaster根目录)

\4.1\jre\

All files

(DBMaster根目录)

\4.1\lib\

dmapi41.lib

dmxtm.lib

dmxtt.lib

(DBMaster根目录)

\4.1\   shared\errtab\

dmisql.tab

dmJdbc.properties

dmjtool.tab

(DBMaster根目录)

\4.1\   shared\codepage\

dmB5LToU.map

dmB5UToL.map

dmCyrillicLToU.map

dmCyrillicUToL.map

dmGBKLToU.map

dmGBKUToL.map

dmGreekLToU.map

dmGreekUToL.map

dmJISLToU.map

dmJISUToL.map

dmLatin1LToU.map

dmLatin1UToL.map

dmLatin2LToU.map

dmLatin2UToL.map

But for other JAVA Tools, creating shortcut is used to open DBMaster JAVA Tool.

一些工具能通过打开exe文件直接使用,像dmppcc (dmppc32.exe) 和 dmSQL(dmsql32.exe)。但是对于JAVA工具,要创建快捷方式打开DBMaster JAVA工具。

创建JDBA工具的快捷方式:

目标Target: C:\DBMaster\4.1\jre\bin\javaw.exe -classpath startup.jar;dmjdbc20.jar;jhelp.jar;jtools.jar jdba

开始路径: C:\DBMaster\4.1\bin

ICO: %SystemDrive%\DBMaster\4.1\bin\jdbatool.ico

步骤2:配置dmconfig.ini文件

     [DBSAMPLE4]

     DB_PTNUM = 2453

     DB_SVADR = 192.16.0.121   ; address of the server machine

     DB_USRID = SYSADM

步骤3:注册ODBC驱动

[HKEY_LOCAL_MACHINE\SOFTWARE\DBMaster]

[HKEY_LOCAL_MACHINE\SOFTWARE\DBMaster\4.1]

"HOME"="C:\\DBMaster\\4.1"

"COMPILER"=""

"INSTALLTYPE"="Client"

"CURRENTVERSION"="4.1.6"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\DBMaster 4.1 Driver]

"Driver"="C:\\WINDOWS\\system32\\DMAPI41.DLL"

"Setup"="C:\\DBMaster\\4.1\\bin\\DMSET.DLL"

"APILevel"="1"

"ConnectFunctions"="YYN"

"CPTimeout"="60"

"DriverODBCVer"="03.00"

"FileUsage"="0"

"SQLLevel"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]

"DBMaster 4.1 Driver"="Installed"    

步骤4:注册DSN

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DBSAMPLE4]

"Driver"="C:\\WINDOWS\\system32\\DMAPI41.DLL"

"Database"="DBSAMPLE4"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]

"DBSAMPLE4"="DBMaster 4.1 Driver"

作者: Sandy
更新时间:2016-02-24 03:19


在Windows平台手动安装DBMaster驱动和DSN通常有哪些步骤?(From DBMR1783; 版本: DBMaster 4.16)

一般地,安装DBMaster客户端和DSN有如下四个步骤,(以4.16为例):

步骤1复制文件,确保以下的文件在正确的路径下

路径

文件

Windows 主路径

(C:\Windows\, C:\Winnt)

dmconfig.ini

dmerr41.tab

Windows 系统路径

(如:C:\Windows\system32\, C:\Winnt\system32)

dmapi41.dll

dmjdbc41.dll

(DBMaster 根目录)

\4.1\

COPYRIGHT

EVALUATION

README.TXT

(DBMaster根目录)

\4.1\bin\

dmjdbc20.jar

dmjdbc20xa.jar

dmjdbc30.jar

dmset.dll

(DBMaster 根目录)

\4.1\   shared\errtab\

 

dmJdbc.properties

(DBMaster 根目录)

\4.1\   shared\codepage\

dmB5LToU.map

dmB5UToL.map

dmCyrillicLToU.map

dmCyrillicUToL.map

dmGBKLToU.map

dmGBKUToL.map

dmGreekLToU.map

dmGreekUToL.map

dmJISLToU.map

dmJISUToL.map

dmLatin1LToU.map

dmLatin1UToL.map

dmLatin2LToU.map

dmLatin2UToL.map

步骤2:配置dmconfig.ini文件

     [DBSAMPLE4]

     DB_PTNUM = 2453

     DB_SVADR = 192.16.0.121   ; address of the server machine

     DB_USRID = SYSADM

步骤3:注册ODBC驱动

[HKEY_LOCAL_MACHINE\SOFTWARE\DBMaster]

[HKEY_LOCAL_MACHINE\SOFTWARE\DBMaster\4.1]

"HOME"="C:\\DBMaster\\4.1"

"COMPILER"=""

"INSTALLTYPE"="Driver"

"CURRENTVERSION"="4.1.6"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\DBMaster 4.1 Driver]

"Driver"="C:\\WINDOWS\\system32\\DMAPI41.DLL"

"Setup"="C:\\DBMaster\\4.1\\bin\\DMSET.DLL"

"APILevel"="1"

"ConnectFunctions"="YYN"

"CPTimeout"="60"

"DriverODBCVer"="03.00"

"FileUsage"="0"

"SQLLevel"="1"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]

"DBMaster 4.1 Driver"="Installed"    

步骤4:注册DSN

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DBSAMPLE4]

"Driver"="C:\\WINDOWS\\system32\\DMAPI41.DLL"

"Database"="DBSAMPLE4"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]

"DBSAMPLE4"="DBMaster 4.1 Driver"

作者: Sandy
更新时间:2016-02-24 04:05


ASP访问DBMaster的过程是怎样的? (From DBMR1797;)

ASP访问DBMaster的过程如下:(连接串=“DSN=ISDB;UID=SYSADM;PWD=”):

IIS ->ADO ->MSDASQL ->MS ODBC Driver Manager ->DBMaster Driver ->DBMaster Server.

作者: Sandy
更新时间:2016-02-24 04:12


有时用JDBATool监视数据库会话会发现当执行connection.close 方法时ASP页的连接并没有被释放,它会继续持续40秒,为什么? (From DBMR1797 ;)

这不是DBMaster服务器的行为,连接保持是因为客户端实际并没有释放连接。原因可能是IIS, ADO 或者ODBC驱动有连接池。

DBMaster服务器可以强制暂停一个连接,但是不能告知客户端释放连接。如果用户想要使用ASP控制连接超时,请调查IIS, ADO 或者ODBC的连接池。如果,一些客户端程序不能自由释放开启的连接,DBMaster能通过设置关键字DB_DtCltDB_ITimO来暂停无效的连接。

我们建议:在ASP代码中执行开启连接操作时,IIS能够加载ADO组件并通过ADO创建一个到DBMaster的连接。但是在ASP代码中执行关闭连接操作时,即使破坏连接对象(set conn = nothing),IIS都不能立即从DBMaster释放连接。此后,如果我们打开连接DBMaster的任意一页,IIS会使用现有的连接而不会创建一个新的连接。如果在长时间内没有新的要求(如40秒),IIS将释放此链接。

作者: Sandy
更新时间:2016-02-24 04:14


在DBMaster内部如何处理ALTER TABLE这个语句?(From DBMR1740)

1. 在DBMaster4.1x之前(包括4.1x),”ALTER TABLE”语句将复制另一个内部表(select into),所以它会占据双倍的磁盘空间并写入日志(请注意日志满的问题)

 2. 在DBMaster4.2x之后的版本(包括4.2x),仅在表的尾部添加一个字段并且默认值为null就能够非常轻松地进行ALTER TABLE(仅修改表模式,与表中的数据关系不大)。除了这种情况,所有的‘ALTER TABLE’SQL命令也需要占据双倍磁盘空间并写日志文件(也请注意日志满的问题)。

 3. 解决的办法是:创建一个新的内部表-> 从修改的源表中选择数据库到新的内部表-> 删除已修改的表-> 重命名新的内部表-> 标记内部表为public。

 4. SELECT...INTO也会写入日志文件,它会占有巨大的日志文件空间。在对一个大表执行'ALTER TABLE'之前,请检查日志文件空间是否充足。

作者: Sandy
更新时间:2016-02-24 04:36


配置关键字DCI_UDCUR的详细信息是什么?

关键字DCI_UDCUR已经在DBMaster4.2版本以后删除了(01/062006),在之前的版本,这个关键字被用于单线程加速。默认的更新当前信息是ON。当用户需要更新一个记录并且这个记录正在被读,它将判断更新的索引与正在被读的是否相同,两个索引中的键值是否一致。如果相同则使用"update where OID = xxx".

但是在多线程中,这种设置是有风险的,因为当读取键值时,获取的数据可能被别的连接所修改,以导致数据不一致。

另外,使用新的DBMaster版本,用户必须使用带有PK或唯一键的REWRITE/DELETE来防止更新/删除一些记录。

作者: Sandy
更新时间:2016-02-24 04:37


在一个表中有两个Unicode记录,一个是简体中文,一个是日文。当执行一个查询,为什么它会返回所有的记录,而不是根据搜索条件正确的那个呢?(Version: 4.2)

当在DBMaster4.2版本中设置DB_LCODE的值为1时,SIGNATURE TEXT INDEX将会返回所有,但是IVF TEXT INDEX将返回正确的那个。现在SIGNATURE TEXT INDEX不支持Unicode,IVF TEXT INDEX支持。所以,我们建议删除SIGNATRUE TEXT INDEX,建立 IVF TEXT INDEX来解决此问题。

请参考以下的示例:

dmSQL>create table test_srh (ID serial,Name char(30),TextBlock NCLOB);

dmSQL>create  text index IDXTEXTBLOCK on test_srh (TextBlock);

dmSQL>insert into test_srh (TextBlock) values ('a080505b'u);        <-- 塞入资料为  肠子

dmSQL>insert into test_srh (TextBlock) values ('e130fc30eb30'u);     <-- 塞入资料为  メール

dmSQL>rebuild text index IDXTEXTBLOCK for test_srh;                 <-- 重建 text index

dmSQL>select * from test_srh where TextBlock match 'a080'u;          <-- 查询 肠

 

    ID                   NAME                 TEXTBLOCK

=========== ============================== ================

          1              NULL              a080505b

          2              NULL              e130fc30eb30

 

 

dmSQL> drop text index idxtextblock from test_srh;

 

dmSQL> create ivf text index idxtextblock on test_srh (TextBlock);

 

dmSQL>  rebuild text index IDXTEXTBLOCK for test_srh;

 

dmSQL>  select * from test_srh where TextBlock match 'a080'u;

 

    ID                   NAME                 TEXTBLOCK

=========== ============================== ================

          1              NULL              a080505b

作者: Sandy
更新时间:2016-02-24 04:40


使用SQL能够控制ODBC日志的开启和关闭吗?(From DBMR 1805)

现在,用户只能通过设置配置文件dmconfig.ini和重启数据库来控制ODBC日志的开启和关闭。重启数据库才能使关键字的设置有效。

作者: Sandy
更新时间:2016-02-24 04:41


Shift-JIS 和EUC-JP数据能被存储在相同的数据库或者相同的表中吗?(From DBMR 1805)

目前,在DBMaster4.x这是不可能的。在DBMaster5.0有可能会实现。现在,Shift-JIS
和 EUC-JP数据只能被分别存储在两个不同的DB中。

作者: Sandy
更新时间:2016-02-24 04:42


当安装DBMaster时我们可以选择字符集,这是否意味着也可以选择信息文件的字符集?(From DBMR 1805)

在安装DBMaster期间,选择字符集和语言有两个步骤。字符集仅决定数据存储形式,和DBMaster信息文件无关。

在安装DBMaster的最初,你能够选择语言编码;它会决定DBMaster的显示语言和在GUI工具及别的工具中所返回的DBMaster信息。

第二级的语言选择是决定在DBMaster中默认使用哪种字符集来保存数据的。

作者: Sandy
更新时间:2016-02-24 04:43


如果想更改字符集,需要重新安装DBMaster和重建数据库吗?有没有像Oracle的NLS_LANG这种编码方法可以使用户不用重建数据库?(From DBMR 1805)

如果想更改字符集,用户只需用新DB_LCODE来重建DB。

NLS_LANGE是Oracle的一个参数,它只对客户端字符集有用。设置NLS_LANGE能够改变客户端的字符集设置。

DBMaster数据库字符集是由关键字DB_LCODE来决定的。客户端字符集是客户端操作系统默认的字符集设置。DBMaster对它没有设定,仅支持服务器端DB_LCODE

作者: Sandy
更新时间:2016-02-24 04:44


在DBMaster存储过程中,如果使用临时表来保存结果集,怎样处理临时表?什么时候删掉?(From DBMR 1800)

临时表仅存在于当前会话,DBMaster在推出会话时会自动删除临时表。所以在存储过程中如果使用临时表来保存结果集,用户不必在得到结果之后删除临时表。

如果在当前会话中执行了多次存储过程,那么第二次将会显示错误:这个表已经存在。为了避免这样的情况,应该在存储过程开头添加“drop table table_name”语句。

在 “$ begin code section;”语句的后面,请添加如下的两个语句:

$ WHENEVER SQLERROR CONTINUE;

$ drop table temporanea;

 

作者: Sandy
更新时间:2016-02-24 04:46


引起客户端断开连接的可能原因是什么?

可能的原因有:

1. ldle超时

2. 服务器重启

3. 网络问题

4. Bug,如果是bug每次将会出现错误信息

5. 套接字错误。如套接字不能写入。类似DBMR1806

6. 用户断开连接

7. DBA或者SYSADM断开连接

作者: Sandy
更新时间:2016-02-24 04:47


DBMaster能在NCLOB字段插入UTF16的文本文件吗?

在插入文本文件到NCLOB之前,DBMaster会将文本文件转化为Unicode,所以,如果这个文件是以Unicode保存的,它将不用被转换而直接插入。从4.2版本(包括4.2)以后,DBMaster支持命令”set bfiletype Unicode/ASCII”(默认设置是ASCII),使用这个命令Unicode文本文件可以被直接插入到NCLOB字段。

例如:

首先,转换README.TXT为UTF16编码,然后保存在C:\DBMaster\4.3路径下。

dmSQL> create table UTF16(fileContent nclob, pk serial);

dmSQL> set bfiletype unicode;

dmSQL> insert into UTF16 values(?);

dmSQL/Val> &'C:\DBMaster\4.3\README.TXT';

1 rows inserted

dmSQL/Val> end;

dmSQL> set bfiletype ASCII;  // default setting

请注意,在4.2版本之前的版本,DBMaster不支持命令”set bfiletype Unicode/ASCII”。所以用户不能够直接插入UTF16的文本文件。一个方法可以解决此问题,就是先将Unicode文件转换为本地编码,然后插入。另一个方法是使用程序打开文件,用Unicode数据类型putData就可以了。

作者: Sandy
更新时间:2016-02-24 04:51


怎样断开无意义的会话?(From MR1809)

要自动断开连接DBMaster提供了两个关键字DB_ITimODB_DtClt.

关键字DB_ITimO被用于服务器端。DB_ITimO用来指定空闲时间间隔,根据这个值,DBMaster可以自动断开那些在大于设定值的间隔中没有任何数据库操作的连接。在设定DB_DtClt之前,请确保DB_ITimO是开启的。(默认设置为关闭)

关键字DB_DtClt被用于客户端。所以客户可以为自己设置DB_DtClt的值,每一位客户可以拥有不同的侦测次数。DB_DtClt仅用于侦测连接,它不能够断开连接。对于每一位客户,服务器使用DB_ITimODB_DtCl的最大值来断开连接。

现在,DBMaster不能识别无用的和那些长时间没有数据操作的连接(Idle)。所以断开无用的连接唯一办法,就是设置DB_ITIimO为一个大的值。因为较小的DB_ITIimO值可能会断开一些有用的连接。

 

作者: Sandy
更新时间:2016-02-24 04:52


为什么会发生错误8349?虽然索引包括了一个Varchar(2000)类型的字段,但数据的长度并没有超过1024字节,怎样解决这个问题呢?(From DBMR1811)

(1). 首先,当创建一个包含varchar类型字段的索引时,DBMaster不会检查出索引的长度。

例如:

dmSQL> create table dbmr1811(id  SERIAL(1),application_name  VARCHAR(2000) default null );

dmSQL> create index idx_dbmr1811 on dbmr1811 (application_name);

以上的idx_dbmr1811包含了一个长度超过1024的varchar(2000)字段,但是能够成功创建索引,原因是DBMaster直到使用这个索引时,才检验它的长度。

(2). 当使用以上的索引时,DBMaster将根据不同的执行计划检验部分索引的长度。当一个执行计划使用嵌套连接时,它不知道这个数据的长度,所以它将会使用varchar类型的定义长度(在此处为2000字节)作为数据长度来分配缓存。当检验长度时,如果发现索引长度1024字节时,就会返回错误8394。

例如:

dmSQL> create table c1(a1  VARCHAR(2000) default null );

dmSQL> create  index idx_c1 on c1 ( a1 );

dmSQL> create table d1(a1  VARCHAR(2000) default null );

dmSQL> create  index idx_d1 on d1 ( a1 );

dmSQL> select * from c1 JOIN d1 on c1.a1 = d1.a1 where 1=1;

ERROR (8349): [DBMaster] total length of index key exceeds maximum length (1024 Bytes)

(3).有两种方法可以避免这种情况。

一种是执行“update statistics”。在执行“update statistics”之后,执行计划使用合并连接并且varchar的长度是实际长度并非定义的长度。

另一个方法是在表中使用强制合并连接。DBMaster4.3提供了强制优化的语法;你可以使用“MERGE JOIN…”语法让查询运行,然后使用“MERGE JOIN…”,并非Nested JOIN进行。

例如:

dmSQL> select * from c1 MERGE JOIN  d1 on c1.a1 = d1.a1 where 1=1;

(4). 请注意,尽管成功地创建了这个类型索引(包括varchar类型字段),但插入的数据不能超过1024字节。

(5). 您最好不要在长字段建立普通索引。这种类型的索引将占用过多的索引页并且查询时有可能不被使用。所以我们建议用户在长字段创建全文索引。

作者: Sandy
更新时间:2016-02-24 04:56


对于字段统计Low Value和High Value的意思什么呢?(From DBMR1813)

你可以参考JDBA里的字段统计。

例如:

dmSQL> create table test(a serial);

dmSQL> insert into test values();

1 rows inserted

dmSQL> insert into test values();

1 rows inserted

dmSQL> insert into test values();

1 rows inserted

dmSQL> insert into test values();

1 rows inserted

dmSQL> select * from test;

     A     

===========

          1

          2

          3

          4

4 rows selected

 

这个例子,在JDBA里,你能够看到以下的统计数据:

Column

#of   Distinct values

Average   Length

Low   Value

High   Value

A

4

4

2

3

 

所以它们是字段的统计值。

Low-value (loVal)意思是第二个最小值;

High-value (hiVal)意思是第二个最大值;

所以,在此例中,Low Value是2是High Value 3。

最大值和最小值都被统计过滤了,所以low-value 和 high-value将使用第二个最小值和最大值。

作者: Sandy
更新时间:2016-02-24 04:58


怎样检查DB启动为NT服务后的状态,服务开启但有时连接失败该怎么办?(From DBMR1832)

将DB启动为NT服务后,DB正处在创建日志文件的启动期间,这时只有日志文件在增加,而从数据库端不容易判断DB的状态。

用户可以在"connect DB"之前设置一个等待时间,或者写一个程序来连接DB,如果连接失败,请重试,直到连接成功为止。

作者: Sandy
更新时间:2016-02-24 05:00


当序列号超过最大值时,有没有办法使序列号自动重置?(From DBMR1836)

通过存储过程和触发器可以达到此目的。

例如:假设这有一个名为 t1 (c1 serial)的表

[存储过程]

$ create procedure sp1(char(32) tbname, int ns1); { $ begin declare section;

  char sqlstring[100];

$ end declare section;

 

$ begin code section;

 

if (ns1 >= 2147483646)

   {

   sprintf(sqlstring, "alter table %s set serial 0", tbname);

   $ execute immediate from :sqlstring;

   }

 

$ end code section;

 

}

 

  [SQL命令]

create procedure from 'sp1.ec';

create trigger tr1 after insert on t1 for each row (call sp1('t1', new.c1));

 

作者: Sandy
更新时间:2016-02-24 05:02


怎样有效使用内存,需要更改一些设置吗?(From DBMR 1839)

有很多因素影响性能,例如硬盘,操作系统,数据库系统,应用系统。

在数据库因素中还有很多因素,性能是由这些因素决定的。内存分配只是它们中的一个。

为了达到最好的性能,请考虑所有的因素。

确保有足够的物理内存对防止操作系统经常在DCCA和磁盘间交换是非常重要的,否则,会降低其性能。

请参考以下的更改设置:

  1. 页缓冲大小—应该根据hit ratio来调节
  2. 日志文件大小和日志缓存—如果系统有长事务,需要设置得大一点
  3. SCA—设置更多的DB_LetPT 和 DB_LetRP,SCA就更大,因为在SCA里有很多锁记录。
  4. 主要调节页缓存的大小,不是SCA。
  5. 另外,需要留出一些空余的内存。

性能调整应该结合真实系统的运行情况来看。在首次设定之后,用户应该继续监视数据库。

作者: Sandy
更新时间:2016-02-24 05:03


哪些行为使用的是内存而不是DCCA? (From DBMR 1839)

每一个连接将会在数据库服务器端(非DCCA)为存储私人数据而分配出私人空间,比如分类数据。

当需要内存分配时ITT是一个本地的内存,操作系统允许多少DBMaster将获取多少。如果分配的数据超过ITT,DBMaster将创建外部文件。

内存表也是本地内存,如果超过分配大小,DBMaster将会返回“超出内存”提示。

作者: Sandy
更新时间:2016-02-24 05:04


在网络系统里使用UTF-8字符集时,在以下的情况中怎样避免垃圾字符?(From DBMR 1847) 1. Web AP插入/选择UTF-8数据。 2. Web AP通过Ms Access插入数据和更新数据等等。 3. MS Access或dmSQL插入数据到DB然后Web AP选择数据。

1. Web AP运行UTF-8数据是没有问题的,DBMaster只支持U16LE。

2. 如果对nclob/nvarchar/nchar等类型的数据进行排序,客户可以使用ODBC驱动管理器来通过MS Access来访问数据。

3. 用户能够创建如nclob/nvarchar/nchar的字段类型来存储Unicode数据,但是应该通过它们自身的插入/获取功能从U8转换成U16LE。

4. 在通过dmSQL插入数据之前,首先应转换数据为Unicode,然后使用'xxxx'u 插入数据。这就意味不能直接通过dmSQL插入UTF-8,在插入之前应该将UTF-8转换为UTF-16,然后插入UTF-16数据。

这有两种方法:

A). DBMaster提供客户端UDF—U8toU16/U16toU8来帮助用户转换数据,当时它们的字段类型应该是如nclob/nchar/nvarchar这样的。

select u8tou16(c1) from t1;

这样数据将会是正确的,并且没有垃圾字符,dmSQL不懂这些易读的数据。

B). 像SQL Server一样,存储UTF8到二进位字段类型。但是不能使用数据库搜索功能(like...etc),这就是SQLServer的解决方法。

使用UDF应该更改它们的程序,但是使用二进制存储不需要更改。

作者: Sandy
更新时间:2016-02-24 05:06


DBMaster支持函数TO_DATE/TO_CHAR/TO_TIMESTAMP?

TO_DATA: DBMaster支持这个UDF,但是用户应该自己添加,检查DBMaster安装路径\4.3\shared\udf\to_date.sql或者使用cast来达到目的。

TO_Char:使用cast。

TO_Timestamp:使用cast。

作者: Sandy
更新时间:2016-02-24 05:07


在ESQL/C里怎样为主变量使用NCHAR (unicode)数据类型?

请如下所示检查esqltype.h定义的NCHAR。

typedef char    nchar;             /* for unicode #004 */

typedef varchar nvarchar;          /* for unicode #004 */

typedef longvarchar nclob;         /* for unicode #004 */ 

如果esqltype.h有这种定义,用户能够在ESLQ/C使用nchar,但是用户应该给出正确的Unicode(自行将本地字符转换为Unicode)数据到nchar缓冲器。

例如:

create table nt1 (c1 int, c2 nchar(10));

 /****************************************************************************
 * test nchar: test nchar

 * NOTE: user must make sure their input unicode data is correct, we do not provide unicode <-> local utility function

 **********************************************************
test_nchar()
{
   EXEC SQL begin declare section;
   nchar tc2[22];
   nchar hvstring[300];
   char buf[300];
   int tc1, ind1, ind2;
   EXEC SQL end declare section;
   int i;

 

   printf("\ntest nchar: -----\n");

 

   $ delete from nt1;
     
   // this is a local string
   sprintf(buf, "insert into nt1 values (1, '1234567890')");
   // The following is a lazy way to convert ascii string
   for (i = 0; i < strlen(buf); i++)
      {
      hvstring[i*2] = buf[i];
      hvstring[i*2+1] = 0;
      }
   // Add NULL terminate 0x0000 for unicode string
   hvstring[i*2] = hvstring[i*2+1] = 0;

 

   // execute the unicode sql command
   $ execute immediate from :hvstring;
   chkErr();
  
   // select the result to a unicode string buffer
   $ select * from nt1 into :tc1 :ind1, :tc2 :ind2;
   chkErr();
  
   printf("tc1=%d, ind2=%d, tc2=", tc1, ind2);
  
   // print out the hex for the unicode string
   for (i = 0; i < ind2; i++)
      printf("%02x", (unsigned char)tc2[i]);
     
   $ delete from nt1;
   chkErr();

 

   // insert the unicode string data to table  
   $ insert into nt1 values (:tc1 :ind1, :tc2 :ind2);
   chkErr();
  
   printf("\n");

 

   $ commit;
   chkErr();
}

 

作者: Sandy
更新时间:2016-02-24 05:10


为什么在DBMaster客户端JTools无法启动?(来自于DBMR1842; 版本: DBMaster 4.1.2)

有两种可能,最可能的原因是权限控制。

  1. 或许防毒软件阻止了访问。请检查所有的防毒软件。
  2. 当前用户没有ACCESS权限:检查所有相关路径和文件的权限,如检查DBMaster安装路径以及它的子路径,确认当前用户是否有‘读写’权限。如果当前用户没有这些权限,错误将会发生。

对于DBMaster4.1.2,JRE文件夹下的大部分文件和子文件夹都没有为everyone设置‘读写’权限。赋予everyone‘读写’权限后,问题将会解决。

这个问题只存在于DBMaster4.1.2。之后的版本不会出现该问题。

4.1.2版与之后的版本使用的是不同的安装工具(install shield 和 inno setup),不同安装工具的不同动作导致了问题的发生。要解决问题,用户需要先对文件夹和文件授权;或者安装更高版本的DBMaster客户端(高于4.1.2)。

作者: Sandy
更新时间:2016-02-24 07:44


在build wrun32.dll时,lib文件的次序有影响吗?

AcuGT5.x 中,如果按照下面的次序增加DCI库:dmapi50.lib dmacu52.libdmdcic.lib(确定dmapi50.lib是第一个),运行COBOL程序不会出错。但是在AcuGT6.x中,同样次序的lib文件会导致错误。如果以下面的次序build wrun32.dll:dmacu52.lib, dmdcic.libdmapi50.lib (dmapi50.lib 是最后一个),ACU COBOL程序不会出任何错误。

这是因为AcuGT5.x版本与6.x版本的不同,6.x在检查链接库次序时或许有一些特别考虑。DBMaster DCI对此没有做任何修改,问题的发生与不同的AcuGT版本有关系。

另外,AcuGT 5.x 和 6.x使用不同的方法build wrun32.dll:AcuGT5.x使用wrun32.mak文件,AcuGT6.x 使用wrun32 VC++ 6.0工程(wrun32.dsw)。

作者: Sandy
更新时间:2016-02-24 07:45


如何通过命令执行压缩备份和从压缩备份文件中恢复? (来自DBMR 1846)

DBMaster仅对完整备份文件进行压缩,不会压缩增量备份文件,因为增量备份的文件本身就很小,而它在恢复时容易导致一些其他问题。

目前,DBMaster不支持用命令行来恢复压缩的备份文件。压缩备份文件功能要通过备份服务器实现,或者开启关键字DB_BKZIP,然后使用JServer Manager工具实现。

作者: Sandy
更新时间:2016-02-24 07:46


在DBMaster 4.0中,监测日志文件输出到哪里了?下面的两种情况下一样吗?1. 由NT服务启动数据库。2. 由dmserver启动,并在启动时设置监测日志路径。

 监测日志文件会位于下面的路径中:

1. 操作系统路径。 (如 C:\WINNT\system32).

2. DBMaster主目录\bin 或工作路径。

3. DB_AUDIR: 4.3支持设置AUDIT LOG 路径。如果没有设置该关键字,AUDIT LOG将位于DB_DbDir 下。

在4.0中,用户不能设置AUDIT LOG路径,但可以在文件DBNAME.LOG中查找。

操作系统

 

NT服务启动数据库

 

Dmserver启动数据库

 

注意

 

windows 2003 server

C:\WINDOWS\System32

DBMaster\4.0\bin

如果Windows2003   server是64位的,通过服务C:\WINDOWS\SysWOW64启动数据库。

如果Windows2003   server是32位的,通过服务C:\WINDOWS\System32启动数据库。

windows 2000 server

C:\WINNT\system32

DBMaster\4.0\bin

N/A

作者: Sandy
更新时间:2016-02-24 07:48


2008

为什么DBMaster不使用NAS?

 DBMaster不使用NA的原因有:

1. 简单的说,我们不能授权支持这种方式。

2. 网络使性能降低。

3. 网络故障会引起数据不一致。

4. 它不能保证日志缓存成功flush。

5. 当日志文件在本地时,用户如果在网络上存储数据和blob,DBMaster运行正常,但是我们不能保证当发生故障时数据能被成功恢复。所以,为了安全起见我们不建议这么做。

作者: Sandy
更新时间:2016-02-24 07:53


为什么数日后一些查询会变慢?更新统计也不提速?要使这些查询像以前的速度一样唯一的方法是卸载表,删除表然后再重新上载表,为什么会发生这样的问题?(From 1851, 版本: DBMaster4.3)

这可能是关于优化器的一个特殊情况,DBMaster优化器会设想数据在表中的分配状态是均衡的。如果客户端的数据分配是skew的话优化器不能找出到QEP的合并连接(最好的执行计划),它将采用嵌套连接来执行。

因为数据是skew,所以在客户执行更新统计table_name simple=100而获取真正的统计值之后,DBMaster优化器还会使用嵌套连接来执行。

甚至可以创建另一个索引,优化器将把主键作为执行索引。

但是当卸载和上载之后,默认的优化器将使用默认统计值来指定执行计划,它会设想这个数据分配是均衡的,所以它将会采用最好的执行计划。

这不是一个bug;DBMaster已经改良了优化器规则来支持所有种类分配的数据并实施最好的执行计划。

作者: Sandy
更新时间:2016-02-24 07:54


DBMaster 5.0支持哪种Linux平台?

在5.0之后,DBMaster将支持Glibc2.3。

请注意:

1. Glibc2.1 Linux环境不能在Glibc2.3环境下运行。

2. Glibc2.1将会成为2级支持,默认支持的是(1级)Linux是Glibc2.3。

作者: Sandy
更新时间:2016-02-24 07:55


能解释有关SDB文件的内容和作用吗?(From DBMR 1854)

SDB文件是存储系统目录和用户表定义和索引。例如:SYSTABLE, SYSCOLUMN和用户表定义。

作者: Sandy
更新时间:2016-02-24 07:55


是什么引起DB文件和SDB的损坏?(From DBMR 1854)

当这种情况发生时,不一定是DB引擎的问题。多数情况下,DB文件破坏是由硬件和环境引起的。例如,突发事件,突然断电,网络设备问题,操作系统失败,病毒等等。

我们过去从来没有听过用户发生DBMaster SDB文件损坏。如果DBMaster DB文件被损坏,用户可以把这些文件发给我们,我们将在数据页或者记录中检查这些问题并且尝试修复它。

因为硬盘可能被破坏,所以备份数据库是非常重要的。用户经常正常的终止数据库也是非常重要的。除非需要最好不要使用新日志模式启动数据库。中止数据库时如果用户有事务发生异常,最好启动数据库两次以确保数据库的redo/undo操作已经完全完成。

作者: Sandy
更新时间:2016-02-24 07:56


当使用存储过程而发生编译错误时为什么.msg文件是空的?

一般来说,如果.msg文件是空的,就意味着用户没有安装C编译器。请安装C编译器,如VC6 或者 VC7 或者.NET C++,DBMaster 5.0只支持VC6和.NET2003两种编译器。

作者: Sandy
更新时间:2016-02-24 08:06


为什么DBMaster没有进行增量备份而却复制了日志文件?(DBMR 1875)

这是一个正常操作,可以避免日志满的问题。尽管没有增量备份,当日志文件满后,备份服务器(设置DB_BkSvr = 1)将继续执行增量备份。

作者: Sandy
更新时间:2016-02-24 08:08


下面的两个语句: On the machine the database was last started from before it terminated abnormally, use the UNIX ipcrm utility to remove the allocated shared memory from the system. 哪一个键必须从共享内存中被移除?一直都一样吗?(From DBMR 1880)

 ipcs:检查系统中共享内存分配

ipcrm:manually deal locate shared memory on a system 手动分配系统中的共享内存

当删除共享内存时,请使用shmid (SharedMemory ID),一些操作之后,这个key会被更改。

例如:

  [dbmaster@la-as4-s bin]$ ipcs

 

------ Shared Memory Segments --------

key                  shmid       owner      perms      bytes      nattch     status

0x0009c93b 294914     dbmaster   660        93249536   2

 

------ Semaphore Arrays --------

key        semid      owner      perms      nsems

 

[dbmaster@la-as4-s bin]$ ipcrm -m 294914

 

[dbmaster@la-as4-s bin]$ ipcs

 

------ Shared Memory Segments --------

key                  shmid      owner      perms      bytes      nattch     status

0x00000000 294914     dbmaster   660        93249536   1          dest

 

------ Semaphore Arrays --------

key        semid      owner      perms      nsems

 

另外,在ipcrm共享内存之后,当已经关闭所有相关的终端后,共享内存将被删除。

例如关闭所有终端,然后开启一个新的:

[dbmaster@la-as4-s bin]$ ipcs

 

------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

 

------ Semaphore Arrays --------

key        semid      owner      perms      nsems

你可以看到共享内存294914被删除了。

作者: Sandy
更新时间:2016-02-24 08:12


当DBMaster4.0.5升级到5.0时我们可以将本地编码由中文更改为日文吗?会发生什么问题吗?

Unload/load是文本模式,所以,数据将是一致的,DB_LCODE与数据一致没有关系。

作者: Sandy
更新时间:2016-02-24 08:13


DBMaster 5.0和DCI支持最新版本的ACUCOBOL吗?

DBMaster 5.0 DCI 已经同ACUCOBOL 7.2.2一起应用于SYSCOM内部系统了。这个版本没有问题。最新的ACUCOBOL 版本是8.0,这个版本我们目前没有做测试。

作者: Sandy
更新时间:2016-02-24 08:15


在Windows平台上,对关键字DB_NJNLB是否有什么限制? (DBMR 1882, version: DBMaster 5.0)

目前,Windows平台上,DBMaster 对关键字DB_NJNLB有一些限制;下表列出了当前Windows操作系统的限制。

       

Windows平台上对DBMaker日志缓存(DB_NJNLB)的限制

DBMaker 版本

Windows 平台

限制

描述

DBMaker5.0

Windows 2000 server + sp4

63M

 

DBMaker5.0

Windows XP + sp2

63M

 

DBMaker5.0

Windows 2003 Server

63M

 

DBMaker5.0

Windows 2003 server + sp2

63M

 

DBMaker5.0

Windows Vista Ultimate

63M

 

DBMaker5.0

Windows 2008

63M

 

DBMaker5.0

DBMaker5.0 Bundle

Windows2003 64bit + sp2

31M

DB_NJNLB 受64bit 平台的限制。

作者: Sandy
更新时间:2016-02-24 10:16


请解释一下如何在dmSQL中设置参数和保存设置? (From DBMR 1887)

打开dmSQL后,有些默认的设置,如,AUTOCOMMIT, LOCK TIMEOUT和LINEWIDTH 等。一些设置保存在dmconfg.ini文件中,一些保存在DMSQLENV.INI文件中。所以,启动dmSQL时,这些设定会分别从dmconfig.ini文件和DMSQLENV.INI文件加载。

当在dmSQL中保存这些设置时,仍然会在两个文件中更新,下一次启动dmSQL时,再次从两个文件中调用。

另外,dmSQL不允许用户选择存储哪个参数,所以,在保存之前,用户需要检查确认当前的所有设置都是希望值。

作者: Sandy
更新时间:2016-02-24 11:01


在线完整备份会影响到在线事务吗?(DBMR: 1892, 版本: DBMaster 4.1 bundle)

在线完整备份的主要成本是IO.在检查数据库状态和内部设定后,数据库服务器会执行复制操作,复制数据库文件,它主要耗费的是系统的输入输出。

作者: Sandy
更新时间:2016-02-24 11:04


对于完整在线备份和数据库复制,推荐的间隔时间是多少?(DBMR: 1892, version: DBMaster 4.1 bundle)

在设置备份时程时,用户需要考虑如何设置才能在数据库故障发生时减少数据库丢失的损失,从而更有利于进行恢复。 内部值取决于用户数据库是否繁忙,如果非常繁忙,则应该设置比较小的间隔值。请结合系统的时间情况来进行设置,以防止数据丢失。

作者: Sandy
更新时间:2016-02-24 11:06


如何在4.1.6 bundle中安装rollover.exe,如何使用rollover.exe来执行完整恢复? (DBMR: 1892, version: DBMaster 4.1 bundle)

首先,用户必须复制rollover.exe到4.1.6的路径下,以保证它和其他exe文件和dll文件位于同一个路径下。

备份和恢复指导手册中有一章专门讲解如何使用rollover工具,详细信息请参考。

如果数据库中存在多份日志文件,并且用户需要恢复到发生崩溃前的最后状态,那么为当前的多个日志文件指定正确的顺序是非常重要的,尤其在rollover过程中。日志文件的顺序取决于DB_JNFIL的顺序。

例如,DB_JNFIL = jnl1.jnl jnl2.jnl jnl3.jnl

所以,在恢复当前日志时,jnl1.jnl是第一个,jnl2.jnl是第二个,jnl3.jnl是第三个。

作者: Sandy
更新时间:2016-02-24 11:09


如何以csv格式输出查询结果? (DBMR: 1893, version: DBMaster 4.3.2 bundle)

Export 命令只支持基本表。

EXPORT [INTO data-file]

            TABLE table-name

            [DESCRIPTION description-file]

            [LOG log-file]

            [STOP_ON_ERROR],

不支持export出查询结果。

考虑到性能问题,可以创建一个视图来代替查询结果。

例如:

 (1) Create view v2 as select * from t1 inner join t2 on t1.c1 = t2.c3;

 (2) export into tmp.csv table v2 description tmp.des;

视图是动态的,当被使用到时就会执行,所以导出CSV格式文件不会做额外的动作,从而性能将会好于创建临时表那种方式。

作者: Sandy
更新时间:2016-02-24 11:11


在4.3.3 bundle版中,如何使用ESQL/C存储过程? (DBMR 1912)

假设HOME路径为C:\dbmaster\43bundle.

使用过程将用到4.3.3 标准版中的一些文件夹和文件,所以用户需要复制这些相关的文件到bundle路径下。

通过下面的步骤,用户可以为在4.3.3bundle中使用ESQL/C存储过程准备环境。

步骤:

(1)   在注册表中注册DBMaster bundle版:为bundle注册HOME和COMPILER。

(2)   复制dmppcc.exe 到bundle\bin (C:\dbmaster\43bundle\bin)下

(3)   复制dmapi43.dll bundle\bin (C:\dbmaster\43bundle\bin)下

(4)   复制dmconfig.ini到 bundle\bin (C:\dbmaster\43bundle\bin)下

(5)   复制templates 文件夹到bundle (C:\dbmaster\43bundle\templates)下

(6)   从标准版中复制include 文件夹到bundle (C:\dbmaster\43bundle\include)下

(7)   从标准版中复制lib 文件夹到bundle (C:\dbmaster\43bundle\lib)下

(8)   修改templates文件夹下的文件 vc60.mak:修改文件夹为正在使用的文件夹;如果vc60.mak中还有其他文件夹或文件,那么也要将这些文件夹或文件复制到bundle文件夹下。

例如:

    C:\DBMaster\4.3\include => C:\dbmaster\43bundle\include

    C:\DBMaster\4.3\lib      => C:\dbmaster\43bundle\lib

现在,用户能够在bundle4.3.3中创建和使用ESQL/C存储过程了。

在使用之前,记着删除4.3标准版,以保证环境的正确性。

注意: bundle版文件 dmconfig.inidmapi43.dll 分别存放在两个文件夹中。一个是C:\dbmaster\43bundle",另一个是"C:\dbmaster\43bundle\bin"。

作者: Sandy
更新时间:2016-02-25 07:33


DBMaster是否支持在子查询中对目标表进行UPDATE/INSERT/DELETE?(DBMR: 1913)

目前,DBMaster不支持在子查询中对目标表进行UPDATE/INSERT/DELETE操作,不过用户可以通过临时表来替换目标表。

例如:

dmSQL> INSERT INTO uselgcsvcs

SELECT host_id, service_name, MAX(specification) as specification FROM usesvcs T WHERE NOT EXISTS (SELECT service_name FROM uselgcsvcs L WHERE T.host_id = L.host_id and T.service_name = L.service_name) GROUP BY host_id, service_name;

ERROR (6172): [DBMaster] cannot select into a table which has already been referenced in the query

作者: Sandy
更新时间:2016-02-25 07:44


在64bit平台上如何为DBMaster 4.3设置DSN? (DBMR: 1911, version: DBMaster 4.3 bundle)

除下面的两点外,其他设置都与32bit平台相同。

(1)   用户需要在[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node] 中注册DBMaster4.3 和ODBC驱动。

Node (Wow6432Node)用来在64bit操作系统注册32bit软件。

(2)   需要使用32bit ODBC 数据库源管理器,而不是64bit的。

默认打开64bit,不是32bit。32bit驱动管理器是odbcad32.exe,它位于“C:\WINDOWS\SysWOW64”(假设操作系统是Windows 2003 x64 Edition)下。

请使用32bit驱动管理器来创建DSN。

我们不建议用户在64bit 操作系统上使用32bit DBMaster。我们不久将会发布64bit  (DBMaster 5.1)DBMaster版本。

作者: Sandy
更新时间:2016-02-25 07:45


在经过XMLExport 和 XMLImport工具的export和import后,为什么字符数据的编码与原来的编码不一样了? (DBMR 1917; 版本: DBMaster 4.X)

A1. 对于日文版DBMaster, XML文件的编码是Shift_JIS。Shift_JIS编码有两种:83pv和90pv。

因为DBMaster XMLImport 内部在数据插入之前会将数据转换为Unicode编码。默认情况,Unicode对应于90pv类型的Shift_JIS。所以,如果原来的数据是83pv的数据,在import到数据库后,83pv的数据会被转换为90pv的数据。

更详细信息请参考:http://homepage1.nifty.com/hm7/works/AppleScript/83pvSpChar-to-90pv.text

在将数据插入到数据库之前,用户可以将83pv转换为90pv,因为DBMaster 4.x系列产品的XMLImport仅接受90pv Shift_JIS。

DBMaster 4.x 系列只支持90pv是因为微软的公告:http://support.microsoft.com/kb/170559/EN-US/。 所以我们将83pv转换到90pv。

DBMaster 5.x 系列会支持83pv,而不需要转换为90pv,因为日文操作系统(CP932)采用83pv,比90pv更常见。

例如:

假设用户原来的数据(∈∋⊆⊇⊂⊃∪∩∧∨¬)是83pv的,16进制编码为81 B8 81 B9 81 BA 81 BB 81 BC 81 BD 87 9C 87 9B 81 C8 81 C9 FA 54。Import到数据库后,83pv数据被转换为90pv数据,导入后的90pv的数据的16进制编码为81 B8 81 B9 81 BA 81 BB 81 BC 81 BD 81 BE 81 BF 81 C8 81 C9 81 CA。

DBMaster XMLImport内部会在插入数据之前将数据转换为Unicode:

  1. 得到83pv数据'0x879c'  => 转换为Unicode - 0x222a  (因为DBMaster 使用expat分析器来解析xml文件,而expat解析器只接受Unicode data。)
  2. 得到Unicode 数据- 0x222a ,插入到数据库中,将Unicode 数据 - 0x222a 转换为Shift-jis; 这时,Unicode 默认映射到90pv类型 Shift_JIS,所以数据传输的数据是'0x81be'。ASCII码数据是不同的。

无论是83pv shift-jis (∩- 0x879c) 还是90pv shift-jis(∩-0x81be) 都是映射到Unicode - 0x222a, 所以在浏览器端的数据显示是一样的。但是,ASCII编码的数据处理不同。

作者: Sandy
更新时间:2016-02-25 07:58


DBMaster 在Linux系统上是否支持异类异步表复制? (DBMR 1918)

DBMaster支持HATR(异类异步表复制)功能,但是要求DBMaster服务器必须是在Windows操作系统上的。因为DBMaster使用ODBC驱动管理器来执行HATR。

现在,DBMaster5.0.1提供了新功能:HATR可以在Linux系统上工作,并且支持快速复制。

有关Windows上执行HATR,请参考DBA手册。

有关Linux上执行HATR,请联系DBMaster技术支持获取《如何使用HATR功能.doc文件。

(作者注:后来5.0.1支持了该功能)

作者: Sandy
更新时间:2016-02-25 08:02


关键字DB_ISOLV 和 DB_BROWS有什么关系?

. DBMaster 锁选项的影响大小顺序为:SQL 命令 >连接选项 >dmconfig.ini 设置。

如果DB_ISOLV! = 2, 3, 4, DB_BROWS = 1 可以工作,如果 DB_ISOLV = 2 或 3或 4, DB_BROWS 便成为没有作用的关键字了。

他们直接的关系如下表明示:

DB_ISOLV

DB_BROWS

1(default) 

0 (脏数据)

1 (select 取得 S 锁)

2(read committed)

0 和 1都不会工作

3(repeatable)

0 和 1都不会工作

4(Phantom)

0 和 1都不会工作

作者: Sandy
更新时间:2016-02-25 08:03


DBMaster可以有下面的行为吗? (DBMR: 1925; 版本: DBMaster 5.0)

insert

   Tran1                   Tran2

   ================  ==================

   ins c1 =1

                           ins c1=1 (lock)

   commit

                           Unique key violation (error)

 

 update

   Tran1                   Tran2

   ===============    ==================

                           select c1, get {1}

   upd c1 = 2 where c1 = 1

                           select c1, get {1}

   commit

                           select c1, get {2}

 

 delete

   Tran1                   Tran2

   ==============    ====================

   select c1, get {2}

                           delete where c1 = 2

   select c1, get {2}

                           commit

   select c1, get { }

对于 <insert>, Transaction 1 的插入动作在数据页结构( OID + data)中获得 X 锁,Transaction 2 的插入动作在不同的数据页结构( OID + data)中也获得 X 锁,DBMaster 的OID 通常是不同的,所在,在数据库引擎中他们是不同的锁定对象,所以不会返回锁超时信息。

对于 <update> 和 <delete>, DBMaster 锁不支持version 锁设计。这时数据库内核的架构,目前还不支持。

作者: Sandy
更新时间:2016-02-25 08:10


DBMaster budle版有没有在线完全/增量备份和恢复数据库的功能?(DBMR 1935; version: DBMaster bundle)

DBMaster bundle 版5.0包含了JTools工具。

在5.0之前,用户需要安装标准版的JTools来恢复数据库。标准版的Jserver manager可以用在DBMaster Bundle中作为恢复工具使用的。

作者: Sandy
更新时间:2016-02-26 08:20


对于备份和恢复能够使用压缩和解压缩吗?

如果设置DB_BKZIP为开启,压缩备份文件功能取决于备份服务器或者JServer
Manager工具,所以回滚(命令行工具)不能支持备份和恢复的zip/unzip。

作者: Sandy
更新时间:2016-02-26 08:21


DBMaster的那些常规事务包括在线完全/增量备份和更新统计等,它们会互相竞争吗?

 所有DBMaster事务取决于日志系统,更新统计也是,而在线完全/增量备份也是根据日志(undo/redo)来备份文件,所以在'update
statistics'时它是没有问题的。

作者: Sandy
更新时间:2016-02-26 08:22


完全备份100G数据库需要多长时间?(包括解压缩和压缩)?(包括压缩备份和不压缩备份) (DBMR 1935; 版本: DBMaster bundle 4.3.3)

有两个因素会影响完全备份的时间,它们是:

数据类型:当进行带压缩的完全备份时,压缩情况根据不同的数据而不同。常规数据要好于多媒体数据。

压缩或者不压缩:因为CPU和I/O花费的时间是不同的。带压缩的完整备份主要花费CPU,不带压缩的完全备份主要花费I/O,但是CPU的速度要比I/O快很多。一般来说,带压缩的完全备份是更好的选择,除非压缩量非常大。

实际上,我们测试了设想的两种情况,由于硬盘的限制,测试数据库大概是50G。

 

请参考下面的表格::

Windows

Time(unit:   second)

Size of   backup Dir

Empty DB(51.9G)

(DB_BkSvr = 1)

不带压缩的备份

2848

51.9G

压缩备份

(DB_BKZIP = 1)

1796

115M

Insert some   ordinary and blob data(53.7G)

(DB_BkSvr = 1

DB_BKFOM =2

DB_BMODE =2)

不带压缩的备份

3045

53.7G

压缩备份

(DB_BKZIP = 1)

2022

3.65G(包含 fo 路径)

 

测试方法是使用普通版4.3.3 JServer manager执行在线完全备份。

作者: Sandy
更新时间:2016-02-26 08:23


当在DBMaster5.0运行DBMaster perl示例程序 ("demo.pl") 时,用户应该注意什么?

假设DBD::DBMaster的版本是0.15。

  1. 注意DBMaster的版本:原始的Makefile.PL的入口可能在第12行:

my $DEFAULTVER = '3.7';

       按照下面的更改入口:

my $DEFAULTVER = '5.0';

2. 用户会发现:在demo.pl程序中"fetchrow_hashref"方法不会取得正确的结果,在每行只显示0。

 

这是示例的一个bug,因为关于区分大小写的问题DBMaster4.x和5.x已经做了更新,所以demo.pl应该按照如下更改:

$hash_ref->{"Id"},$hash_ref->{"Name"},$hash_ref->{"Title"},$hash_ref->{"Phone"});

==>

$hash_ref->{"ID"},$hash_ref->{"NAME"},$hash_ref->{"TITLE"},$hash_ref->{"PHONE"});

作者: Sandy
更新时间:2016-02-26 08:29


为什么在Vista的客户端连接在Windows XP sp2上的服务器端失败呢?(DBMR 1885; 版本: DBMaster 5.0)

因为所测试的DB服务器和客户端使用了不同的LCode。所以测试返回的错误信息包括LCode不一致和驱动器的SQLSetConnectAttr失败。在DB服务器端和DB客户端的dmconfig.in里都添加DB_LCode,并保证这两个值是相同的,才能连接成功。

作者: Sandy
更新时间:2016-02-26 08:30


当从DBMaster4.3.0 import数据到Excel 2003时,为什么会返回“选项类型超出范围”这样的错误信息呢?(DBMR 1930; 版本: DBMaster4.3.0)

这是一个bug;我们已经在DBMaster4.3.0之后的版本进行修复了,并且测试了4.3.1,4.3.2和4.3.3都是正常的。用户可以尝试升级DBMaster版本再进行重新测试。

另外,一般来讲,对于错误选项类型超出范围”应该与连接串相关。如果连接串包括不支持的选项或者在尾端有垃圾字符,有时也可能返回这个错误信息,但不会总是这样。

作者: Sandy
更新时间:2016-02-26 08:31


在插入数据过程中如果发生网络断开DBMaster将怎样处理?(DBMR 1945)

如果在插入数据过程中发生这样的情况,当前断开的连接可能会在server端保留并且会话仍然占用资源。该会话虽然存在但它已成为无效的会话。DBMaster不会自动释放无用连接的资源,所以用户可能会看见锁超时的错误信息。用户应该断开这些无用的会话以便释放资源。

如果在提交一个事务之前发生网络断开,在断开死连接之后,中止的事务将会被回滚。

作者: Sandy
更新时间:2016-02-26 08:32


当使用DBMaster编译PHP时,会发生“undefined reference to ´__ctype_b'”错误,原因是什么?该怎么办?(DBMR 1946, Version; DBMaster 4.2)

这个错误不是DBMaster的问题;它是Linux glibc版本问题。DBMaster使用glibc-2.1来make静态库,但是glibc-2.3删除了一些函数—ctype_b(), _ctype_toupper()…并且glibc保证共享库的二进制兼容性,这些共享库不包括静态库,所以不能保证静态库是兼容的,这就是返回undefined reference to ´__ctype_b'错误信息的原因。

用以下的方法解决这个问题:

1. 移动/home/dbmaster/4.2/lib/libdmapic.a到别的文件夹下。

2. 复制/home/dbmaster/4.2/lib/so/libdmapic.so到/home/dbmaster/4.2/lib/。

3. ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-dbmaster=/home/dbmaster/4.2  --enable-track-vars  --enable-mbstring

4. make

这是一个连接.so的解决方法,别的客户已经make成功并应用于他们的系统中。

作者: Sandy
更新时间:2016-02-26 08:34


DBMaster有没有关于像Oracle语法“SELECT id FROM groups START WITH id=2 CONNECT BY PRIOR parent_id = id”这样的解决方法?如果没有,有没有别的办法得到相同的结果?(DBMR1954)

DBMaster不支持回归SQL,但是通过多个个别SQL,也能得到相同的结果。

例如,用户通过临时表运行以下的步骤:

drop table t1;

drop table t2;

create table t1 (c1 int, c2 int);

create table t2 (c1 int, c2 int);

 

insert into t1 values (1, 11);

insert into t1 values (1, 12);

insert into t1 values (2, 21);

insert into t1 values (11, 111);

insert into t1 values (11, 112);

insert into t1 values (12, 121);

insert into t1 values (12, 122);

insert into t1 values (12, 123);

insert into t1 values (13, 131);

insert into t1 values (14, 141);

insert into t1 values (121, 1211);

insert into t1 values (123, 1231);

insert into t1 values (131, 1311);

insert into t1 values (1231, 12311);

insert into t1 values (12311, 123111);

 

/*

SELECT c1 FROM t1

START WITH c1=1 CONNECT BY

PRIOR c1 = c2;

 

RecursiveQuery(sqlcmd, startwith, prior)

 

RecursiveQuery("SELECT c1 FROM t1", "c1=1", "c1=c2") */

 

drop table tt1;

drop table tt2;

create table tt1 (c1 int, c2 int);

create table tt2 (c1 int, c2 int);

 

delete from tt1;

select c1, c2 from t1 where c1=1 into tt1; select * from tt1 into t2;

 

// loop begin

 

delete from tt2;

select t1.c1, t1.c2 from t1, tt1 where tt1.c2=t1.c1 into tt2; select * from tt2 into t2;

 

delete from tt1;

select t1.c1, t1.c2 from t1, tt2 where tt2.c2=t1.c1 into tt1; select * from tt1 into t2;

 

delete from tt2;

select t1.c1, t1.c2 from t1, tt1 where tt1.c2=t1.c1 into tt2; select * from tt2 into t2;

 

delete from tt1;

select t1.c1, t1.c2 from t1, tt2 where tt2.c2=t1.c1 into tt1; select * from tt1 into t2;

 

delete from tt2;

select t1.c1, t1.c2 from t1, tt1 where tt1.c2=t1.c1 into tt2; select * from tt2 into t2;

 

// loop end until select into no rows

 

drop table tt1;

drop table tt2;

 

select distinct c1 from t2;

同样,DBMaster SP能够提供帮助:

首先,创建sp connby.ec

/*

SELECT id FROM groups

START WITH id=2 CONNECT BY

PRIOR parent_id = id;

*/

 

exec sql create procedure connectby_groups (integer hid) returns int outid;

{

exec sql begin declare section;

int i, cnt;

char sqlstr[256];

exec sql end declare section;

 

exec sql begin code section;

 

$ whenever sqlerror continue;

exec sql drop table temp_connectby;

$ whenever sqlerror goto dmSP_EXIT_LABEL;

 

exec sql create temp table temp_t1 (id int, parent_id int);

exec sql create temp table temp_t2 (id int, parent_id int);

exec sql create temp table temp_connectby (id int, parent_id int);

 

exec sql select id, parent_id from groups where id=:hid into temp_t1;

exec sql select id, parent_id from temp_t1 into temp_connectby;

 

do {

exec sql delete from temp_t2;

exec sql select a.id, a.parent_id from groups a, temp_t1 b where a.id=b.parent_id into temp_t2;

exec sql select count(*) from temp_t2 into :cnt;

if (cnt > 0)

exec sql select id, parent_id from temp_t2 into temp_connectby;

else

break;

 

exec sql delete from temp_t1;

exec sql select a.id, a.parent_id from groups a, temp_t2 b where a.id=b.parent_id into temp_t1;

exec sql select count(*) from temp_t1 into :cnt;

if (cnt > 0)

exec sql select id, parent_id from temp_t1 into temp_connectby;

else

break;

} while (1);

 

exec sql RETURNS select distinct id from temp_connectby into :outid;

 

exec sql drop table temp_t1;

exec sql drop table temp_t2;

exec sql end code section;

}

然后运行示例SQL:

create db sample5;

 

create table groups (id int, parent_id int);

 

insert into groups values (1, null);

insert into groups values (11, 1);

insert into groups values (12, 1);

insert into groups values (13, 1);

insert into groups values (111, 11);

insert into groups values (112, 11);

insert into groups values (131, 13);

insert into groups values (1121, 112);

insert into groups values (11211, 1121);

insert into groups values (112111, 11211);

 

terminate db;

 

start db sample5 sysadm;

 

create proc from 'connby.ec';

 

call connectby_groups(112111);

call connectby_groups(1);

call connectby_groups(131);

call connectby_groups(168);

call connectby_groups(11211);

 

terminate db;

作者: Sandy
更新时间:2016-02-26 08:42


文件databasename.pid有何作用?(DBMR1955; 版本: DBMaster4.3)

文件DBName.pid用来保存dmserver运行程序id。

使用‘dmserver –k’来关闭数据库时它会起到作用,我们需要知道哪一个程序id是由dmserver获取的,因为我们在关闭的情况下,不能够获得‘dmserver –k’模式的共享内存,所以保留这个文件为‘dmserver –k’关闭数据库时作为参考。

如果通过dmSQL执行“terminate db”命令关闭数据库,那么这个文件是没有用的,它只适用于 ‘dmserver –k’模式。

作者: Sandy
更新时间:2016-02-26 08:43


一些用户有这样的经验,当在Windows2003上将数据库启动为服务时发生错误信息11206,如果服务器重新启动,这个问题不会出现,并且服务运行正常。但是,当停止服务并重新启动它时,这个错误报告再次产生直到重新启动机器,这是为什么?(DBMR1957; 版本:DBMaster 4.3)

首先,请检查防病毒软件是否阻止了DBMaster访问db文件,这个能导致启动数据库失败并返回错误信息11206,这个问题类似于DBMR1737。

作者: Sandy
更新时间:2016-02-26 08:44


错误信息11206,11210和11213之间有什么不同?(DBMR1957; 版本:DBMaster 4.3)

用户可以通过它们的说明对它们做以区别:

Error 11213:文件或目录不存在。

Error 11210:没有权限访问文件。

Error 11206:无法创建或打开文件。

当启动数据库时,DBMaster将访问db文件,所以它需要在有关的db路径下找到文件,如果找不到就会返回错误信息11213,或者,如果没有访问此文件的权限则返回错误信息11210。而11206包括这两种情况,同时也包括造成执行文件失败的其他不清楚原因。

如果遇见任何一个错误,客户应该考虑到以上所有导致执行文件/路径失败的原因。

作者: Sandy
更新时间:2016-02-26 08:45


怎样从DBMaster安装的示例StoreProc文件夹下的03mail.ec成功创建存储过程?(版本; DBMaster 4.3)

要正确使用03mail.ec,用户需要连接wsock32.lib:

首先,按照以下方式修改templates\vc60.mak:

LINK32_FLAGS=wsock32.lib C:\DBMaster\4.3\lib\dmudf.lib

然后,从C:\dbmaster\4.3\samples\StoreProc\03mail.ec'创建过程。

便可以了。

作者: Sandy
更新时间:2016-02-26 08:45


怎样从DBMaster导出数据到CSV文件?

DBMaster支持此export导出功能;详细信息用户可以参考第7.1章Backup Restore
Guide42

作者: Sandy
更新时间:2016-02-26 08:46


在bundle 4.3.3中,如何使用Java存储过程?(DBMR 1912)

假设HOME路径为:C:\dbmaster\43bundle.

参照下面的步骤在4.3.3bundle中创建Java sp的构建环境:

(1)   从标准版中复制JRE文件夹到bundle (C:\dbmaster\43bundle\jre)下

(2)   复制dmclassloader.jar 到 bundle\bin (C:\dbmaster\43bundle\bin)下

(3)   移动bundle所有jar 文件到bundle\bin (C:\dbmaster\43bundle\bin)下,Jar 文件有:dmjdbc20xa.jar, dmjdbc20.jar, dmjdbc30.jar.

注意:如果任何一个jar文件位于C:\dbmaster\43bundle 文件夹,调用java sp都不会执行任何操作。

之后,用户可以在bundle4.3.3中创建和使用java sp了。

作者: Sandy
更新时间:2016-02-26 09:10


请解释一下在线完整备份的内部行为? (DBMR: 1892, version: DBMaster 4.1 bundle)

当执行在线完整备份时,内部引擎将会:

  • 检查数据库状态和日志文件状态
  • 在数据库中设置一些内部设定
  • 复制数据库文件到数据库备份路径下
  • 复制数据库日志文件到数据库备份路径下

作者: Sandy
更新时间:2016-02-26 09:15


2009

对最终用户如何隐藏dmsql工具窗口?

为隐藏dmsql窗口,开发人员可以在程序中添加下面一句代码:

d:\dbmaster\5.0\bin\dmSQL32.exe /b

参数/b可以帮助隐藏窗口,不过请记住在脚本档中一定要加quit,否则,该进程会一直保留,直到在任务管理器中把它结束。

例如,执行dmsql32.exe /b test.sql

其中,test.sql 的内容如下:

 

connect to dbsample5 sysadm;

set linewidth off;

set printto dbinfo.out;

select * from SYSINFO;

select * from SYSUSER;

set printto off;

disconnect;

q;

作者: Sandy
更新时间:2020-06-19 04:43


文件md5.dll有什么作用,如何使用与MD5相关的函数?

md5.dll 是示例(SAMPLE)中UDF的dll文件。用户也可以自己创建dll。有关更详细信息,请参考位于路径‘DBMasterInstallDir\samples\udf’下的README文件。

作者: Sandy
更新时间:2016-02-26 09:43


ITT表示什么意思,它的有效值范围是多少?

 ITT – 内部临时表:在表连接,select…order by中排序使用。

ITT占用的是物理存储空间,不是DCCA。

DBMaster有非常灵活的机制计算物理存储的适量使用情况,如果使用的存储空间超过了ITT大小,它便会使用临时文件。

从SYSINFO表中查询JDBA工具中的ITT信息如下:

0716 MAX_ITT_SIZE: 首先,监测操作系统空闲存储空间, 然后分配DBMaster内部公式计算出的结果值。

0717 CURRENT_ITT_SIZE: 当前使用的ITT存储空间。

ITT 值必须是正值,如果显示负值则是异常情况,可能由于没有监测操作系统空闲存储空间或是在公式中使用了不正确的值而引起的。

作者: Sandy
更新时间:2016-02-26 09:45


DBMaster是否支持在Linux系统的HATR功能? (DBMR1918; version:DBMaster 5.0.1)

DBMaster支持HATR(异类异步表复制)功能,但是要求DBMaster服务器必须是在Windows操作系统上的。因为DBMaster使用ODBC驱动管理器来执行HATR。

现在,DBMaster5.0.1提供了新功能:HATR可以在Linux系统上工作,并且支持快速复制。

有关Windows上执行HATR,请参考DBA手册。

有关Linux上执行HATR,请联系DBMaster技术支持获取《如何使用HATR功能.doc文件。

作者: Sandy
更新时间:2016-02-26 09:46


DBMaster bundle 版对使用zip backup功能的数据库大小有限制吗? (DBMR1968;Version: DBMaster 4.3.4 bundle)

关于Zip backup,DBMaster对数据库的大小没有限制,但由于硬盘空间原因,我们只测试过100G的数据库。

不过请注意,如果操作系统有限制,或有其他问题,那么程序也会存在同样的限制或问题。

作者: Sandy
更新时间:2016-02-26 09:47


如果用户设置了PITR时间,如02/10 10:00:00,DBMaster会把数据库恢复到这个时间点吗? (DBMR1968;Version: DBMaster 4.3.4 bundle)

会的,DBMaster会将数据库恢复到确切的时间点(DB_RTime)。

如果设置了DB_RTime,在执行恢复数据库的过程中,DBMaster会在各个日志文件中比较日志记录的时间,如果日志记录的时间早于DB_RTime,则恢复该日志记录,而对于没有提交的事务,则执行回滚操作。

作者: Sandy
更新时间:2016-02-26 09:48


在执行下一个完整备份后,DBMaster是否会移动当前的增量备份文件?

在5.0之前(不包括5.0),DBMaster不移动DB_BKDIR下的增量备份文件。但是用户发现在执行了一个新的完整备份后,那些增量备份文件便失去了存在的意义。所以,从5.0开始,执行一个新的完整备份后,DBMaster会转移原来的没有作用的增量备份文件。

无论用户是否设置了关键字DB_BkOdr,5.0都会转移DB_BKDIR路径下之前的增量备份文件。如果设置了DB_BkOdr,之前的增量备份文件将会被复制到DB_BkOdr下。这就是说,DBMaster 5.0会在执行下一个新完整备份前,删除或备份之前的增量备份文件。

对于备份,5.0做了改动,详细信息请参考相关手册。

作者: Sandy
更新时间:2016-02-26 09:49


可以人为改变增量备份文件的路径吗?

不可以,增量备份文件必须位于DB_BKDIR下,5.0以及以后的版本,DB_BkOdr不仅保存之前的完整备份文件,而且还保存之前的增量备份文件。

作者: Sandy
更新时间:2016-02-26 09:50


在bundle 版中,如何通过在线备份文件来备份和恢复数据库? (DBMR1973; 版本:DBMaster bundle 4.3.4)

在bundle版中,有两种方法可以备份和恢复数据库。一种是使用Jserver Manager工具。但是如果用户只安装了DBMaster客户端,那么不能使用JServer Manager工具,备份和恢复数据库这两个功能都是在服务器端使用的。

另一种方法是使用Rollover工具,该工具位于DBMaster 4.3.4 标准版的bin目录下。

作者: Sandy
更新时间:2016-02-26 09:51


在程序中如何使用OID?(DBMR1974; 版本:DBMaster 4.2 in Linux)

OID是一种特殊数据类型。虽然可以在查询中使用OID来从表中选择数据,但这不是SQL语言中常用的,OID 通常用在内部程序接口中。所以建议用户不要在程序中直接使用OID,否则,有时可能会导致乱码的出现。

实际上,用户需要的可能仅仅是与OID相关的对象名称。

如下面的例子:

select USER_NAME, TABLE_NAME, SYSLOCK.LK_GRAN, SYSLOCK.HOLD_LK_CONNECTION, SYSLOCK.LK_CURRENT_MODE from SYSLOCK,SYSTEM.SYSTABLE,SYSUSER where HOLD_LK_CONNECTION = CONNECTION_ID and LK_OBJECT_ID = TABLE_OID and TABLE_OWNER != 'SYSTEM';

作者: Sandy
更新时间:2016-02-26 09:53


如果升级DBMaster 4.3到5.1,程序端有何注意事项?(DBMR1975; 版本:DBMaster 4.3)

程序端的注意事项有:

  • ODBC Driver: 如果程序参考了驱动名称(如“Driver={DBMaster  4.3 Driver}…”),用户需要更该为5.1驱动。
  • DSN: 如何程序参考了DSN,用户需要用5.1驱动重新建立DSN。
  • 如果参考了dmapi43.lib,用户需要用dmapi51.lib将其替换。如果参考了4.3 include文件,用户应该用5.1include文件来替换。
  • JDBC Driver:如果使用了CLASSPATH 和 LD_LIBRARY_PATH环境变量。用户需要修改并使其参考5.1的相关文件。
  • DDL: 如果使用DLL,用户应该根据UTF-8数据来调整每个字段的长度。 如果要升级的数据库是5.0版本或5.0之后的版本,用户还需注意对象名称的长度限制。

作者: Sandy
更新时间:2016-02-26 09:55


可以建构DBMaster 4.3.4 bundle的中文版吗?

DBMaster 4.3.4 bundle 中文版不是DBMaster的正式官方产品,我们可以提供,但是要采取快速修订版的方式,而且在这个版本中,只有错误信息是简体中文的。

DBMaster 5.1 bundle支持了英文、简体中文、繁体中文等错误信息,用户可以在官方下载地址下载。ftp://www.dbmaster.com.tw/pub/DBMaster/5.1.0J/dbmaster-5.1.0BundleJTools-WIN32.zip

在客户端的dmconfig.ini文件中添加关键字DB_ERRLCODE来设置错误信息的语言编码。

英文为:DB_ERRLCODE = EN.ASCII

简体中文为:DB_ERRLCODE = ZH_CN.GBK

繁体中文为:DB_ERRLCODE = ZH_TW.BIG5

客户端连接会检查关键字DB_ERRLCODE的设定,如果设置的本地错误信息是正确的,便会返回DB_ERRLCODE=<string>。这个关键字用来设定客户端的错误信息字符集。在多语言数据库中,客户端可以设置自己的错误信息输出编码。存放错误信息的表位于dbmaster/5.1/shared/locale/locale.lang/ 路径下。关键字的值可以是地区定义与字符集的组合。用户还可以通过命令SELECT GETSYSINFO('ERRLCODE'来查看客户端的错误信息字符集。

作者: Sandy
更新时间:2016-02-26 09:56


如何使用函数TO_DATE (string_expr, date_format_string)?

函数TO_DATE (string_expr, date_format_string) 的作用是将指定字符串转换成DATE类型的数据。指定的字符串可以是任何数据类型,但是在转换成一个日期时,必须是一个有效的日期。TO_DATE函数包含两个参数:字符串(string_expr)和日期格式串(date_format_string)。字符串参数代表要转换的字符串,而日期格式串代表DATE类型的显示结果。这种显示结果必须和前面字符串的表达形式一样。详见下面的例子。

TO_DATE 函数位于DBMaster的安装目录DBMaster\version\shared\udf下,它并不是数据库默认创建的。如果要使用该函数,用户需要手动创建它。 

可执行下面的命令来创建: 

create function to_date.TO_DATE(varchar(20), varchar(20)) RETURNS DATE;

使用TO_DATE的示例:

select to_date('2009-Jan-01', 'YYYY-mon-DD');

select to_date('2009-1-01', 'YYYY-MM-DD');

select to_date('Feb/29-2000','MoM/DD-YYYY');

 

作者: Sandy
更新时间:2016-02-26 09:58


2010

当DBMaster安装在高端机上,组提交会产生什么影响?(DBMR: 1922 DBMaster 4.2 OS: CentOS 4.0)

设置DB_GCXMW = 0,关闭组提交,保持服务器端连接处于激活状态。当数据库服务器准备进行组提交时,一些连接会先处于睡眠状态,随后再一起提交。但是dbserver不能激活处于睡眠状态的连接,这样将有可能导致客户端命令停留在“EXDIR”状态。

版本:DBMaster 4.x, 5.x

产品:Normal, Bundle

平台:Linux

作者: Sandy
更新时间:2016-02-26 10:00


DBMaster何时使用ITT?

ITT内部临时表是DBMaster内部数据库对象,这些对象应用于内存表、查询类别(比如 - group by, order by, merge join)。它的生命周期是从执行开始到结束。执行结束后,ITT将会被删除。

版本:DBMaster 4.x, 5.x

产品:Normal, Bundle

平台:Linux, Windows

作者: Sandy
更新时间:2016-02-26 10:01


DBMaster 5.1如何支持英文、简体中文、繁体中文的错误信息?

在客户端配置文件dmconfig.ini中添加关键字db_errlcode

英文:DB_ERRLCODE = EN.ASCII

简体中文:DB_ERRLCODE = ZH_CN.GBK

繁体中文:DB_ERRLCODE = ZH_TW.BIG5

客户端连接将测试DB_ERRLCODE的设置,并纠正本地错误信息,返回关键字DB_ERRLCODE=<string>,此关键字用于设置客户端错误信息字符集。在多语言数据库中,客户端可以设置错误信息的本地输出编码。

错误信息表存放在dbmaker/5.1/shared/locale/locale.lang/ directory。

关键字可以是本地定义和字符集的组合。

用户可以使用命令SELECT GETSYSINFO ('ERRLCODE')返回客户端错误信息字符集。

版本:DBMaster 5.1

产品:Normal, Bundle

平台:Linux, Windows

作者: Sandy
更新时间:2016-02-26 10:02


当升级dbmaster 4.3到5.1版本时 ,在应用端应注意些什么?(DBMR: 1975)

应用端注意事项:

ODBC驱动程序:如果应用程序涉及驱动程序名(比如 “Driver= {DBMaster 4.3 Driver}…”), 用户应该把它修改为5.1驱动程序。

DSN:如果应用程序涉及到DSN,用户应该利用5.1驱动器重新创建DSN。

如果涉及到dmapi43.lib, 用户应该用dmapi51.lib代替它;

     如果涉及到4.3内部文件,用户应该用5.1内部文件代替它。

JDBC驱动程序:如果使用环境变量CLASSPATH和LD_LIBRARY_PATH,用户应该修改它们关联到5.1相关文件。

DDL:使用DDL时,用户应该根据UTF8数据库调整每列的长度;

并且,如果被移植的数据库是5.0或5.0以上版本,用户应该注意对象命名限制。

注意:DBMaster5.1新增了一个关键字DB_CLILCODE,当使用多语言数据库或者数据库服务器端的LCODE是UTF-8时,客户端可以使用任意本地编码连接该UTF-8数据库的服务器。

版本:DBMaster 5.1

产品:Normal, Bundle

平台:Linux, Windows

作者: Sandy
更新时间:2016-02-26 10:04


在UTF-8数据库中,如何避免php程序中的垃圾字符问题?

此问题是由于php页中的数据是UTF-8编码引起的。当数据发送到驱动管理器时,驱动管理器发现DBMaster支持unicode ODBC函数,所以驱动管理器会把UTF-8数据当做本地数据处理(操作系统默认的语言编码,例如:日文系统中的Shift-JIS),并将数据转换为unicode。此时,转化的Unicode数据是错误的数据,所以它从DBMaster保存/取出时就会导致垃圾数据流入/流出。

解决方法:使用DBMaster ANSI驱动器可避免驱动管理器将UTF-8数据转化为Unicode数据。在安装DBMaster ANSI驱动器前,需对注册文件(dbmaster51_ansi_driver.reg)进行适当的设置更改。

ANSI驱动注册文件内容有:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Dbmaster 5.1 ANSI Driver]

"Driver"="d:\\Dbmaster\\5.1\\bin\\DMAPI51a.DLL"

"Setup"="d:\\Dbmaster\\5.1\\bin\\DMSET.DLL"

"APILevel"="1"

"ConnectFunctions"="YYN"

"CPTimeout"="60"

"DriverODBCVer"="03.00"

"FileUsage"="0"

"SQLLevel"="1"

步骤包括:

(1)     如果驱动名称不是5.1,把驱动器名称改为DBMaster 5.1 ANSI的驱动名称

(2)     修改驱动程序并设置安装目录

(3)     如果不是5.1版本,把dmapi51a.dll修改为dmapixxa.dll

因此,如果用户使用DBMaster 5.1,只需进行步骤(2)。

请从驱动管理器中删除DSN(默认为数据库名),并使用"DBMaster 5.1 ansi 驱动"重新注册DSN。安装dmapi51a.dll后,DBMaster ANSI驱动程序已经存在,只需注册它即可。DBMaster ANSI驱动器只删除Unicode ODBC函数。

作者: Sandy
更新时间:2016-02-26 10:05


JDBC连接支持哪些参数?

JDBC连接字符串不仅包括连接信息,而且还支持数据库的一些关键词设置。在DBMaster中,连接字符串目前支持的关键词有:UID, PWD, SVADR, PTNUM, ATCMT, CTIMO, DIFCO, STRSZ, STROP, DSCMT, ERRLCODE, CLILCODE

LTIMO(5.4.3 #29936, 20200708) 

以下将介绍如何设置JDBC连接字符串,并给出简单的例子来说明这些关键词的用法:

JDBC连接字符串:

URL=" jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;uid=sysadm;pwd=abc; atcmt=1; strsz=1000; strop=1; dscmt=1; errlcode=JA; clilcode=Shift-JIS;”

Conn = DriverManager.getConnection (URL);

例如

UID, PWD

Write UID and PWD in URL string and getConnection (url) by url one parameter. Program connects to database successfully by this way.

Test Program:

public class KeyWords {

    static String driver ="dbmaster.sql.JdbcOdbcDriver";

    static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;uid=sysadm;pwd=;";

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

                     Class.forName (driver);

                     Connection conn = DriverManager.getConnection (url);

                     try{

                                System.out.print ("Connect Successful!");

         }

         catch (Exception e){

               e.getStackTrace ();

         }

    }

}

ATCMT:通过getAutoCommit ()函数,可获知自动提交模式的状态。

测试程序:

public class KeyWords {

    static String driver ="dbmaster.sql.JdbcOdbcDriver";

    static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0;";

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

         Class.forName (driver);

         Connection conn = DriverManager.getConnection (url, "SYSADM", "");

         try{

               Boolean i = conn.getAutoCommit ();

               System.out.print("AUTO-Commit-STAUS:"+i+"\n");

                     }

         catch (Exception e){

               e.getStackTrace ();

         }

    }

}

Step (1): Set ATCMT = 0 in url

Result in Console:

AUTO-Commit-STAUS:false

Step (2): Set ATCMT = 1 in url in above program.

Result in console:

AUTO-Commit-STAUS:true

DSCMT:这个关键词定义了应用程序断开数据库时是否提交事务。

测试程序:

public class KeyWords {

    static String driver ="dbmaster.sql.JdbcOdbcDriver";

    static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0;DSCMT = 0;";

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

         Class.forName(driver);

         Connection conn = DriverManager.getConnection (url, "SYSADM", "");

         try{

               Boolean i = conn.getAutoCommit ();

               System.out.print("AUTO-Commit-STAUS:"+i+"\n");

            Statement stmt = conn.createStatement ();

            int effctCount = stmt.executeUpdate("UPDATE jobs SET JOB_DESC='Snow,Modify,Dbmaster-test' WHERE JOB_ID = 1");

            System.out.println ("The Modified Rows Count is :"+effctCount+"\n");

            ResultSet rs = stmt.executeQuery ("select * from jobs");

            rs.next ();

            String s1= rs.getString (1);

            String s = rs.getString ("JOB_DESC");

            System.out.print ("The Modified\nJOB_ID:"+s1+"JOB_DESC:"+s);

         }

         catch (SQLException e){

               e.getStackTrace ();

         }

    }

Step (1): DB_DSCMT keyword act on auto-commit off status, DBMaster decides to whether execute commit command when a client's application issues a SQLDisconnect.so we should set ATCMT = 0 before test keyword DSCMT.

 URL = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ATCMT = 0; DSCMT = 0;”

Step (2): Execute UPDATE statement in AP and Query the result from DBSAMPLE5 to examine the modified result whether affected in database.

Step (3): Query the result from dmSQL and we will find the new data which modified via AP can’t affect in database. This proves DSCMT = 0 is an available setting in URL.

dmSQL> select * from jobs where JOB_ID = 1;

 

  JOB_ID                         JOB_DESC                      MIN_LVL MAX_LVL

=========== ================================================== =======

          1 New Hire - Job not specified                            10      10

Step (4): set DSCMT=1, execute STEP (2) and STEP (3) again. We will find the new data which modified via AP had been affected in database too. This proves DSCMT = 1 is an available setting in URL.

dmSQL> select * from jobs;

  JOB_ID                     JOB_DESC                      MIN_LVL MAX_LVL

=========== ================================================== =======

      1    Snow, Modify, Dbmaster-test                                10      10

ERRLCODE: 用户可以将ERRLCODE设置为en、ja、zh_TW、zh_CN、UTF-8等DBMaster支持的编码。

测试程序:通过函数GETSYSINFO ()可以获取ERRLCODE错误信息字符集。

public class KeyWords {

    static String driver ="dbmaster.sql.JdbcOdbcDriver";

    static String url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;ERRLCODE =zh_CN;";

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

         Class.forName (driver);

         Connection conn = DriverManager.getConnection (url, "SYSADM", "");

         try {

               Statement stmt = conn.createStatement ();

           ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')");

               rs.next ();

               String s = rs.getString (1);

               System.out.print ("ERRLCODE:"+s);

Step (1): set ERRLCODE =zh_CN in url.

Restlt in console:

ERRLCODE:zh_CN 

Step (2): set ERRLCODE =en in URL.

Restlt in console:

ERRLCODE:en

CLILCODE此关键词指定客户端的数据库字符集编码。当使用多语言数据库并且数据库服务器端的LCODE设置为UTF-8时,客户端可以使用任意本地编码连接该UTF-8数据库服务器,DBMaster支持的编码有BIG5、 EUC-JP、UTF-8等。但是,如果服务器端LCODE没有设置为UTF-8,客户端的CLILCODE值必须与服务器端LCODE编码相同。

测试程序:使用上面测试关键词ERRLCODE的测试程序,只需在该程序上做以下更改:

用“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('clilcode')")代替测试程序的“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')"

CLICODE = EUC-JP OR CLILCODE=GBK代替ERRLCODE (ERRLCODE=zh_CN)的URL。

Step (1) set CLILCODE = EUC-JP in url, url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;CLILCODE =EUC-JP;";

Result in console:

CLILCODE: EUC-JP

Step (2) set CLILCODE = GBK, url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;CLILCODE =GBK;";

Result in console:

CLILCODE: GBK

STROP此关键词定义在进行字符串连接操作时是否删除字符串尾部空格。值为0,表示在执行字符串连接操作前保留CHAR类型数据尾部的空格;值为1,表示在执行字符串连接前删除其尾部空格。

测试程序:使用以上测试关键词ERRLCODE的测试程序,只需在该程序上做以下更改:

使用“ResultSet rs = stmt.executeQuery ("SELECT CONCAT ('aaa','bbbb')")代替测试程序的“ResultSet rs = stmt.executeQuery ("SELECT GETSYSINFO ('errlcode')");”。

使用 STROP = 0 or STROP = 1代替ERRLCODE (ERRLCODE=zh_CN)的URL。

Step (1): set STROP=0 in URL: url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;STROP=0";

Result in Console:

aaa bbbb

Step (2): set STROP=1 in URL: url = "jdbc:dbmaster://127.0.0.1:2453/DBSAMPLE5;STROP=1";

Result in console:

Aaabbbb

作者: Sandy
更新时间:2020-07-09 15:31


应用程序连接DBMaster时需要进行哪些参数设置,有什么参考顺序?

连接字符串不仅包括数据库连接的必要信息,而且包括一些数据库设置的相关连接选项,例如:LCODE数据库字符编码设置、事务隔离等级(SQL_TXN_ISOLATION)设置、自动提交模式开启或关闭状态设置等。

使用SQLSetConnectOption函数设置连接选项,例如:

你可以在dmconfig.ini中设置使用关键词字设置CLICODE,或者在AP中使用CLIENT_CHAR_SET设置字符编码。

例如:

In dmconfig.ini:

DB_CLILCODE=GBK;

In PHP program:

SET CLIENT_CHAR_SET GBK;

用户可以选择下面的方法,即使用配置关键词DB_IsoLv,或者在AP中使用“SQLSetConnectOption SQL_TXN_ISOLATION”进行设置。

例如

In dmconfig.ini

DB_ISOLV = 1 ;( 1,2,3,4 four options)

In ODBC program:

SQLSetConnectOption (hdbc, SQL_TXN_ISOLATION, SQL_TXN_ READ_UNCOMMITTED)

SQLSetConnectOption (hdbc, SQL_TXN_ISOLATION, SQL_TXN_READ_COMMITTED)

SQLSetConnectOption (hdbc, SQL_TXN_ISOLATION, SQL_TXN_REPEATABLE_READ)

SQLSetConnectOption (hdbc, SQL_TXN_ISOLATION, SQL_TXN_ SERIALIZABLE)

用户可以在AP中使用“SQLSetConnectOption ”函数设置SQL_AUTOCOMMIT

In ODBC program:

SQLSetConnectOption (hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF);

SQLSetConnectOption (hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_ON);

如果连接字符串包含连接选项信息,应用程序将直接访问连接字符串,否则从dbmconfig.ini中获取连接选项信息。

版本:DBMaster 5.1.1

产品:Normal, Bundle

平台:Windows

作者: Sandy
更新时间:2016-02-26 10:38


发生锁超时时,如何从错误信息检测数据库状态并找到解决方法?

1) 检查错误信息:

锁超时是正常的数据库行为。多个事务之间存在竞争时,等待时间超过设置的最大时间,则引起锁超时。(默认的等待时间是5秒。可以使用”set lock time n seconds”重新设置间隔时间,也可以在dmconfig.ini中设置关键词DB_LTimO并重启数据库。)

我们可以通过以下方式检测锁状态:

一种方法是在dmconfig.ini中设置关键词

DB_LGDIR=<你的日志路径>

DB_LGLCK=1

DB_LGSVR=3 ;( 1......6)

如果用户想获得更多信息,可以设置DB_LGSVR>3,并在目录中检查有关锁超时的错误信息,锁超时发生时,该目录由DB_LGDIR指定。

查看以下错误信息:

文件“db_name_data.LOG”:

LOG_TIME,BEG_TIME,STATE,RETCODE,EXE_TIME,SV_FUNC,CONNECT_ID,USERNAME,LOGIN_TIME,LOGIN_ADDR,STMT_ID,ERROR_ARG,OTHER_INFO,SQL_CMD

"2010/06/12 15:01:29","2010/06/12 15:01:24","X", 1102,5.01,"EXECUTE ", 3868,"SYSADM","2010/06/12 14:59:56","local",0,": Object ID : 2.18.12 ,Connection ID : 1976, LKMode : X .NONE, LKStatus : GRANTED, Command : [EXIT] insert into t1 values(16,'Skirt') [unknown 1096], 501507, 0, 0","INFO_03868_1","update t1 set c2 = 'Hello' where c1 = 16"

"2010/06/12 15:07:25","2010/06/12 15:07:25","X", 6151,0.00,"PREPARE ", 1976,"SYSADM","2010/06/12 14:59:52","local",0,": 123 [bisort.c 294], 122, 2, 0",,"select * from t1 order by 123"

"2010/06/12 15:07:34","2010/06/12 15:07:34","X", 6151,0.00,"PREPARE ", 1976,"SYSADM","2010/06/12 14:59:52","local",0,": 3 [bisort.c 294], 2, 2, 0",,"select * from t1 order by 1,2,3"

 

文件File “db_name_data.TXT”:

INFO_03868_1 --------------------

[ERR_LK_TIMEOUT]:: Object ID : 2.18.12 ,Connection ID : 1976, LKMode : X .NONE, LKStatus : GRANTED, Command : [EXIT] insert into t1 values(16,'Skirt')

另一种方法是从SYSLOCK、SYSTABLE、SYSYUSER中搜索锁超时信息。

例如:

dmSQL> update t1 set c2 = 'Hello' where c1 = 16;

ERROR (1102): [Dbmaster] lock time-out: Object ID: 2.18.12, Connection ID: 1976, LKMode: X .NONE, LKStatus: GRANTED, Command: [EXIT] insert into t1 values (16,'Skirt')

 

锁超时发生时,对象ID = 2.18.12被ID = 1976占用,状态是X(在1976连接被释放前,没有用户可以获得对象:2.18.12),导致后来的连接无法获得正确的数据库信息,发生锁超时。

分析锁超时的原因:

首先,执行下列SQL语句,知道什么连接占用数据库资源。

dmSQL> select HOLD_LK_CONNECTION, LOGIN_IP_ADDR, LOGIN_HOST, LOGIN_TIME, USER_NAME, TABLE_OWNER, TABLE_NAME, LK_NEW_MODE, LK_GRAN, LK_STATUS, LK_CURRENT_MODE, TIME_OF_SQL_CMD, SQL_CMD from SYSTEM.SYSLOCK, SYSTEM.SYSTABLE, SYSTEM.SYSUSER where HOLD_LK_CONNECTION=CONNECTION_ID and TABLE_ID=TABLE_OID and LK_GRAN! ='SYSTEM' and TABLE_NAME not like 'SYS%' order by 1, 2, 3, 4, 5, 6;

 

HOLD_LK_CONNECTION LOGIN_IP_ADDR LOGIN_HOST LOGIN_TIME USER_NAME TABLE_OWNER TABLE_NAME LK_NEW_MODE LK_GRAN LK_STATUS LK_CURRENT_MODE TIME_OF_SQL_CMD

SQL_CMD

=======================================================================

1976 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:52 SYSADM SYSADM T1 NONE.NONE TABLE GRANTED IX .NONE 2010/06/12 15:01:00 [EXIT] insert into t1 values(16,'Skirt')

 

1976 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:52 SYSADM SYSADM T1 NONE.NONE TUPLE GRANTED X .NONE 2010/06/12 15:01:00 [EXIT] insert into t1 values(16,'Skirt')

 

1976 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:52 SYSADM SYSADM T1 NONE.NONE PAGE GRANTED IX .NONE 2010/06/12 15:01:00 [EXIT] insert into t1 values(16,'Skirt')

 

3868 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:56 SYSADM SYSADM T1 NONE.NONE TABLE GRANTED IX .NONE 2010/06/12 15:01:50 [EXEC] select HOLD_LK_CONNECTION, LOGIN_IP_ADDR, LOGIN_HOST, LOGIN_TIME, USER_NAME, TABLE_OWNER,TABLE_NAME, LK_NEW_MODE, LK_GRAN, LK_STATUS, LK_CURRENT_MODE, TIME_OF_SQL_CMD, SQL_CMD from SYSTEM.SYSLOCK, SYSTEM.SYSTABLE, SYSTEM.SYSUSER where HOLD_LK_CONNECTION=CONNECTION_ID and TABLE_ID=TABLE_OID and LK_GRAN !='SYSTEM' and TABLE_NAME not like 'SYS%' order by 1,2,3,4,5,6

 

3868 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:56 SYSADM SYSADM T1 NONE.NONE PAGE GRANTED IU .NONE 2010/06/12 15:01:50 [EXEC] select HOLD_LK_CONNECTION, LOGIN_IP_ADDR, LOGIN_HOST, LOGIN_TIME, USER_NAME, TABLE_OWNER,TABLE_NAME, LK_NEW_MODE, LK_GRAN, LK_STATUS, LK_CURRENT_MODE, TIME_OF_SQL_CMD, SQL_CMD from SYSTEM.SYSLOCK, SYSTEM.SYSTABLE, SYSTEM.SYSUSER where HOLD_LK_CONNECTION=CONNECTION_ID and TABLE_ID=TABLE_OID and LK_GRAN !='SYSTEM' and TABLE_NAME not like 'SYS%' order by 1,2,3,4,5,6

 

We found connection ID 1976 lock the resource by executing command: insert into t1 values (16,'Skirt').

接下来,执行下列SQL语句,获得连接1976和对象2.18.12的详细信息。

dmSQL> select HOLD_LK_CONNECTION, LOGIN_IP_ADDR, LOGIN_HOST, LOGIN_TIME, USER_NAME, TABLE_OWNER, TABLE_NAME, LK_NEW_MODE,

LK_GRAN, LK_STATUS, LK_CURRENT_MODE, TIME_OF_SQL_CMD, SQL_CMD from SYSLOCK, SYSTABLE, SYSTEM.SYSUSER where

HOLD_LK_CONNECTION=CONNECTION_ID and TABLE_ID=TABLE_OID and HOLD_LK_CONNECTION=1976 and LK_OBJECT_ID='2.18.12' order by

1, 2, 3, 4, 5, 6;

 

HOLD_LK_CONNECTION LOGIN_IP_ADDR LOGIN_HOST LOGIN_TIME USER_NAME TABLE_OWNER TABLE_NAME LK_NEW_MODE LK_GRAN LK_STATUS LK_CURRENT_MODE TIME_OF_SQL_CMD

SQL_CMD

=======================================================================

1976 127.0.0.1 LA-WANGXUEWEI 2010/06/12 14:59:52 SYSADM SYSADM T1 NONE.NONE TUPLE GRANTED X .NONE 2010/06/12 15:01:00 [EXIT] insert into t1 values(16,'Skirt')

 

 

该例表明:连接1976状态为[EXIT],并向t1中插入值(16,'Skirt')。它表明SQL命令已经被完整地执行,但是没有释放资源。原因可归结为两点:一是程序还没有提交;二是连接断开,导致后面的提交命令执行失败,数据库服务器陷入等待状态。由于以上原因,源2.18.12一直不能被释放。用户可以执行kill connection命令强制释放资源。

总的来说,用户可以通过以上两种方式获得信息,并开始分析锁超时的原因,就知道占有资源的连接的状态是繁忙还是空闲。如果行为正常,完全执行后将释放资源。如果连接处于空闲状态,应该执行“kill connection HOLD_LK_CONNECTION number”释放资源。

2)发生死锁的解决方法

为了提高系统的并发性,减少每个事务的等待时间,可以采取以下方法:

一. 缩短事务长度,使每个事务在尽可能短的时间内完成。

二. 降低锁粒度,并尽可能使用元组锁。(在DBMaster中,默认的锁粒度级别是行)

三. 使用索引扫描。多个事务通过不同索引扫描同一个表可能会提高并发的粒度。

四. 在不影响事务的有效性下,降低事务的隔离级别。(DBMaster默认的最低级别是:只读未提交)

版本:DBMaster 5.x

产品:Normal, Bundle

平台:Windows

 

作者: Sandy
更新时间:2016-02-26 10:46


怎样使用DBMaster在PHP程序中从客户端连接到服务器端?(DBMR2016)

对于PHP程序连接到DB,我们通常仅需要设置ODBC数据源,然后通过DSN名连接。例如:$Conn =odbc_connect (“DBSample5”,”SYSADM”,”xxxxx”);

如果用户需要使客户端和DB服务器端分离,则可以执行以下步骤:

1.在客户端安装DBMaster驱动或Client

2.为数据库设置IP和端口号

3..在ODBC源中添加DSN

注意:因为dmconfig.ini已经被设定,用户只需要从ODBC设置的DropDownList (数据库名 (N) :)选项中选择数据库名称。

版本: DBMaster 5.x

产品: Normal, Bundle

平台: Windows

作者: Sandy
更新时间:2016-03-03 03:36


怎样为DBMaster更新产品序列号?

在购买DBMaster时升级序列号会同时增加使用者的授权数。您可以在获取您的许可序列号之后升级产品许可。按照以下的说明进行:

Windows 平台

    1. 从Windows“开始”菜单下选择“程序”,点击DBMaster选项中的“序列号升级”,将运行序列号升级程序。

    2. 点击 “许可信息”查看当前的序列号信息;点击“确定”返回到序列号升级程序。点击OK返回到升级程序。

    3. 点击“下一步”,将显示CASEMaker用户许可协议。

    4. 详细阅读其中的内容,如果同意许可协议中的条款,请点击“我同意”。此时将显示CASEMaker产品升级介绍

    5. 点击“下一步”,将显示产品升级对话框。

    6. 在相应的位置输入升级序列号和代理服务器信息。点击“下一步”,安装ID将显示在升级信息对话框中。

    7. 如果升级的过程顺利,并显示“您的产品已经升级”提示信息,请点击“确定”。如果升级过程失败,请保存好安装ID,然后按照升级信息对话框中的提示来手动升级产品。

    8. 点击“确定”。将显示技术支持以及CASEMaker技术支持的联系方式等信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

    9. 点击“完成”结束操作。下一次启动DBMaster时就会使用新的序列号。

Linux 平台

    1. 将工作目录修改为/APP_HOME/bin。此目录包含目前产品序列号的升级程序。

    2. 执行序列号升级程序 。程序启动后会显示多个选项。

    3. 选取第二个选项。此时显示CASEMaker用户许可协议。

    4. 详细阅读其中的内容。如果同意许可协议中的内容,请继续下一步。

    5. 按照提示,在适当的地方输入升级序列号和代理服务器信息;如果您的计算机网络工作顺利,请输入“A”后点击ENTER键否则输入“M” 后点击ENTER键来查看安装ID以及如何手动升级产品等相关说明。

无法连接网络:

如果您不能访问网络或激活选项失效,可以通过以下的说明升级产品序列号。

首先请保存安装ID,然后在一台可以连接网络的计算机上访问http://activate.DBMaster.com.tw/,复制ID到所需要的步骤,点击提交按钮。您将收到一个activation.dat文件,复制这些文件到原计算机的C:\DBMaster\5.x\路径下来完成DBMaster的激活。

版本: DBMaster 4.x, 5.x

产品: Normal, Bundle

平台: Windows, Linux

作者: Sandy
更新时间:2016-03-03 03:37


如何避免发生“错误(6101):分配了太多的操作命令”?(DBMR: 2017)

在一个连接里,程序默认可以分配的语句句柄为257个。当语句达到数据库限制值时,则返回此错误信息。因为在创建语句时并没有相应地关闭程序中的语句,从而引起语句的增加而达到限制值。若发生此错误,用户应该检查程序中是否删除了存在的语句。另外,如果由于事务或别的原因引起语句超过257的话,用户可以在dbmconfig.ini里设置关键字DB_MXCMD= xxx来解决此问题。需要注意的是,在设置DB_MXCMD关键字后需要重新启动数据库。

版本: DBMaster  5.x

产品: Normal, Bundle

平台: Windows, Linux

作者: Sandy
更新时间:2016-03-03 03:37


通过dmservice启动数据库时,如何避免从客户端到服务器端的连接错误?

将DBMaster服务器和客户端安装在不同的计算机上,在服务器端通过dmservice启动DB并由客户端连接至DB。如果连接失败,您可以关掉防火墙重新尝试,此问题或许就能够得到解决。但这并非导致此情况发生的唯一原因,在关掉防火墙后,如果还不能解决该问题,就应该从其它方面分析导致此错误的原因了。

版本: DBMaster 5.x, DBMaster 5.x

产品: Normal

平台: window XP

作者: Sandy
更新时间:2016-03-03 03:39


在数据库中,当不同程序对同一张表同时执行不同操作时,如何避免锁超时的发生?例如,unload和其它DML操作同时发生(DBMR2123)。

锁对于相同数据库对象上的多个事物之间的并发控制来说,是十分重要的。当多个用户同时访问同一个数据库对象,将会发生锁超时。尽管这是一种正常行为,其目的是为了确保数据库中的数据一致性,然而在一些特定情况下,同时访问的这种需求是可以得到满足的。但是如何处理这种特殊要求呢?这就需要用户根据实际情况来选择不同的处理办法。

以下是以DBMR2123为例进行的详细描述:

当用户从表test中下载数据,另一个应用程序正在同时操作表test(delete, insert etc)时,将会发生锁超时。为了避免锁超时的发生,我们可以使用临时表。

详见如下:

Select * from test into temp_test;

Unload data from (select * from temp_test) to test_file;

这并不会影响原始表的性能,但需要扩展默认表空间,因为临时表通常指定在默认表空间中。

版本: DBMaster 4.x\5.x DBMaster4.x\5.x

产品: Normal

平台: Windows xp

作者: Sandy
更新时间:2016-03-03 03:41


在执行EXPORT命令并输出到CSV数据文件后,如果字段数据包含返回代码,如何避免行约束(DBMR: 2126)?

在执行Export命令时,如果字段数据包含返回代码,将会有一个错误的处理结果输出到CSV文件中。例如表中仅含有一条记录,如果记录包含返回代码,DBMaster会认为是一条以上的记录。我们可以在描述文件中通过设置参数来获取预想的输出结果。

例如:

这是之前的描述文件:

FORMAT=VARIABLE

COLUMN_DELIMITER=','

ROW_TERMINATOR="\n"

QUOTATION=SINGLE_QUOTE

NUMBER_OF_ROWS_FOR_EACH_TRANSACTION=-1

在执行以上描述文件中的“Export into testtb.csv table testtb description desc.txt;”命令后,不正确的约束将出现在CSV文件中。

我们可以在描述文件中对原始内容做如下修改,以确保输出结果正确并不会自动产生新行。

修改后的描述文件:

FORMAT=VARIABLE

COLUMN_DELIMITER=','

ROW_TERMINATOR="\r\n"

QUOTATION=DOUBLE_QUOTE

NUMBER_OF_ROWS_FOR_EACH_TRANSACTION=-1

版本: DBMaster5.x, DBMaster4.2, DBMaster5.x

产品: Normal

平台: Window xp

作者: Sandy
更新时间:2016-03-03 03:44


2011

如何通过VB6.0或2005的ADODB连接,从SQL获得表的索引名?(DBMR2040)

使用单条SQL语句不能直接获得索引字段名,必须通过多条SQL语句才可以得到。首先,从system.sysindex获得num_column, reserve3;其次,使上述结果与system.syscolumn的column_name相匹配。我们可以通过ec来编写存储过程以实现上述操作。

我们可以凭借SQLStatistics通过openSchema的ADO函数来获得索引字段的数据库元数据。

请注意,DBMaster5.1的OLEDB可支持此方法。对于DBMaster4.3版本,您应该把提供商改为“MSDASQL,把数据源改为“dbsample4”;

使用方法如下:

DBMaster4.x

Dim conStr As String

Set conn = New ADODB.Connection

conStr = "Provider=MSDASQL; data source=dbsample4; user id=sysadm; password=;  "

 conn.Open conStr

 'Set rs = conn.OpenSchema(adSchemaIndexes, Array(Empty, "scheme_name", Empty, Empty, "table_name"))

While Not rs.EOF

 Debug.Print rs!COLUMN_NAME

   rs.MoveNext

 Wend

DBMaster5.x

Dim conStr As String

 Set conn = New ADODB.Connection

conStr = "Provider=dmole51; data source=dbsample5; user id=sysadm; password=; "

 conn.Open conStr

Set rs = conn.OpenSchema(adSchemaIndexes, Array(Empty, Empty, Empty, Empty, "CARD"))

 While Not rs.EOF

 Debug.Print rs!COLUMN_NAME

 rs.MoveNext

 Wend

版本: DBMaster 5.x, DBMaster 4.3

产品: Normal

平台: all windows

作者: Sandy
更新时间:2016-03-03 03:48


如何避免编号为10851的错误:- 当数据库在DBMaster 5系列上创建,而参照DBMaster 4系列的DB_USRBB配置设定时,配置文件中的值无效?(DBMR: 2106)

当用户要把数据库从系列4升级到系列5时,应首先创建一个空的数据库5。如果用户把相同的数据库设置从系列4复制到系列5时,可能会面临数据库创建时DB_USRBB的设定值配置错误的问题 – 10851(配置文件中的值无效),因为DB_USRBB的默认值在5系列中被重新定义了。有两种方法可以避免这种错误的发生。

[4.x db]

Db_usrbb=/home/dbmaster/4.3/database/customer.bb 2

[5.x db]

Db_usrbb=/home/dbmaster/5.2/database/customer.bb 3

1)将*.BB大小从2修改到3。

2)直接从dmconfig.ini文件中删除参数。

版本: DBMaster4.x, DBMaster5.x

产品: Normal / Bundle

平台: All

作者: Sandy
更新时间:2016-03-03 03:49


如何避免“因为11206错误在重启操作系统后仍无法启动dbmaster服务器”的问题?(DBMR: 2111)

当用户想使用Windows服务器来启动数据库,但是在重新启动操作系统时数据库不能自动启动,并且同时返回‘11206’-不能创建/打开文件的错误。导致该错误的原因是当时文件的许可权被日志文件以外的其它进程所掌握。当数据库服务器试图获得所有数据库的存取权限时,如果任一文件已经被其它类似防毒软件(nod32)的进程所掌握,那么数据库服务器将会报告此错误。我们可以通过检查和调整防毒软件的选项,让数据库服务器重新获得所有数据库文件的存取权限以避免此错误的发生。

版本: DBMaster4 系列/ 5系列

产品: bundle

平台: All windows

作者: Sandy
更新时间:2016-03-03 03:50


如何在内部进行页压缩操作? (DBMR: 2081, DBMR: 2132)

在锁的粒度小于页锁的情况下,页压缩将会强制锁定整个页以将锁提升至页锁;但是锁粒度的提升会增加锁超时的机会,或者在更高的并发性上导致死锁。我们可以通过一些有效方法来减少内部的页压缩操作。

在以下两种情况下,将更容易发生数据库的页压缩。一种是包括VARCHA数据类型的表;另一种是表可以包括其它任何数据类型,但没有初始值,并且使用了DEFAULT NULL。

关于VARCHAR,它是varchar的特殊行为。varchar类型适合实际数据大小并始终不分配固定空间。所以在varchar类型下更新数据时,很容易导致原始大小不能满足新数据大小的需求,而需要寻找其它的连续空间。在页可用空间足够大但不连续的情况下,DBMaster服务器会自动通过压缩页来收集片段空间。数据库在进行页压缩的时候会强制性的将整个页锁住 ,然后试图使用该页空闲部分,在这个时候有可能real lock(deadlock 或者lock time-out)就发生了。

DBMaster数据库支持的其它数据类型,一开始它们的初始值就被设定为“DEFAULT NULL”,所以不用在表初始化中预设存储空间。当要把新的数据行添加其中时,DBMaster数据库会检查页中的连续可用空间。如上述情况。

为了减少页压缩,我们可以参考以下方法:

  1. 把varchar数据类型替换为char数据类型,并像其它数据类型一样设定数据初始值为NOT NULL。
  2. 调整填充因子的值为适当的值。
  3. 方法1和2 只是减少了发生页压缩的机会,但并不能彻底避免页压缩。如果方法1和2都不能满足需要,我们会视客户的要求来解决这个问题。

版本: DBMaster4.x, DBMaster5.x

产品: Normal / Bundle

平台: All

作者: Sandy
更新时间:2016-03-03 04:30


如何获得DEADLOCK错误信息?(DBMR: 2081)

我们可以在dmconfig.ini配置文件中设置关键字来获得有关DEADLOCK的信息。关于DEADLOCK新日志系统的详细设置,如下所示:

可以在dmconfig.ini文件中设置下面的关键字:

DB_LGDIR=<you log path>

DB_LGLCK=1

DB_LGSVR=3 ;( 1......6)

我们也可以将关键字DB_LGSVR设置为大于3来获得更多信息。最后,当出现设置锁时,您可以直接检查DB_LGDIR所指定的关于死锁的错误信息。

版本: DBMaster4 系列/ 5系列

产品: Normal/ bundle

平台: All

作者: Sandy
更新时间:2016-03-03 04:31


如何启动/终止dmserver?如何检查在linux运行下的数据库服务器?

以DBSAMPLE5为例。

  1. 在Linux操作系统下启动和终止dmserver的方法如下:

1)       启动dmserver:

/home/DBMaster/5.2/bin/dmserver DBSAMPLE5

2)       终止dmserver(利用客户端工具dmsqlc)

dmsqlc>connect to DBSAMPLE5 SYSADM;

dmsqlc>terminate db;

dmsqlc>quit;

注意:用户也可以使用命令来关闭数据库,但我们不建议使用这种方法。

/home/DBMaster/5.2/bin/dmserver –k DBSAMPLE5

  1. 检查数据库服务器在Linux系统下运行的方法如下所示:

用户可以使用ps命令“ps -ef | grep dmserver”来检查数据库服务器(dmserver)进程是否存在。如果有多个数据库在同一个操作系统下运行,您可以使用像“ps –ef | grep ‘dmserver.bin DATABASE_NAME’”这样的ps命令来指定数据库的名称。

例如– “ps –ef | grep dmserver”

[dbmaster@rh4as bin]$ ps -ef | grep dmserver

dbmaster 10626     1  0 12:01 ?        00:00:00 dmserver.bin TTT

dbmaster  10627 10626  0 12:01 pts/1    00:00:00 dmserver.bin TTT

dbmaster  10628 10626  0 12:01 pts/1    00:00:00 dmserver.bin TTT

dbmaster 10657     1  1 12:07 ?        00:00:00 dmserver.bin XXX

dbmaster 10658 10657  0 12:07 pts/1    00:00:00 dmserver.bin XXX

dbmaster 10659 10657  0 12:07 pts/1    00:00:00 dmserver.bin XXX

例如– “ps –ef | grep ‘dmserver.bin TTT’:

[dbmaster@rh4as bin]$ ps -ef | grep 'dmserver.bin TTT'

dbmaster 10626     1  0 12:01 ?        00:00:00 dmserver.bin TTT

dbmaster 10627 10626  0 12:01 pts/1    00:00:00 dmserver.bin TTT

dbmaster 10628 10626 0 12:01 pts/1    00:00:00 dmserver.bin TTT

版本: DBMaster4 系列/ 5系列

产品: Normal / Bundle

平台: All Linux

作者: Sandy
更新时间:2016-03-03 04:42


如何在64bit平台上使用32bit应用程序和DBMaster?(DBMR: 2106, 2144)

用户有一个32bit的应用程序并且想要它在64bit Windows操作系统上运行,由于这个应用程序是32bit的并且用户不愿意重新将程序编译成64bit,或者说这个应用程序根本无法转化为64bit,这个时候就需要一个32bit的数据源,可是操作系统是64bit。在这种情况下,如果用户试着通过正式安装版来安装数据库驱动器则会出现错误。此错误的出现属于正常现象,因为DBMaster 32bit正式版安装程序不支持在x64环境上运行。但是DBMaster 32bit bundle版支持x64操作系统,并且可以通过32bit odbc驱动管理器访问数据库服务器,所以我们建议用户使用32bit bundle版来避免此错误。

如果用户的AP可以被编译为64bit并且他们愿意使用64bit AP,此外,他们使用DBMaster5.1及以上版本,那么在64bit操作系统下他们不必使用32bit bundle版,可以直接安装64bit正式版。这是因为DBMaster从5.1版本开始支持64bit操作系统。

下面介绍如何在64bit操作系统上注册32bit bundle驱动器和DSN。具体步骤如下:

(1)注册32bit bundle驱动器

步骤(1) 在[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers]下面的位置创建一个新键:

Name =”Your Driver Name”, for example, you can named” DBMaster 5.1B Driver”

Type=”REG_SZ”

Data=” Installed”

如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers]

"DBMaster 5.1B Driver"="Installed"

步骤(2) 在下面的位置注册自己的Driver:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI]

通常的方法是首先创建并编辑一个.reg檔(例如:DBMaster 5.1B Driver.reg),然后将注册档导入注册表。.reg档的内容如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\DBMaster 5.1B Driver] "Driver"="D:\\bundle\\DMAPI51.DLL"

"Setup"="D:\\bundle\\DMSET.DLL"

"APILevel"="1"

"ConnectFunction"="YYN"

"DriverODBCVer"="03.00"

"FileUsage"="0"

"SQLLevel"="1"

"HOME"="D:\\bundle"

注意:32bit ODBC驱动器必须注册到\ Wow6432Node\....位置。

(2)注册32bit DSN

通常在64bit操作系统上创建32bit DSN有两种方法。一种方法是,如果用户的操作系统上存在dmset.dll,那么可以直接从C:\Windows\SysWOW64\ 目录下执行odbcad32.exe命令来创建DSN并检查其连接。另一种方法是,直接编辑注册表,创建.reg档并添加下面内容,然后将注册档导入注册表。

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources]

"DBSAMPLE5"="DBMaster 5.1B Driver"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\DBSAMPLE5]

"Driver"="D:\\DBMaster\\5.2\\bin\\DMAPI52.DLL"

"Database"="DBSAMPLE5"

注意:第一个“DBSAMPLE5”代表DSN的名字,第二个“DBSAMPLE5”代表数据库名字,用户可以自主为它们命名,DSN和数据库名字可以相同也可以不同。

版本: DBMaster All

产品: Bundle

平台: All Windows

 

 

作者: Sandy
更新时间:2016-03-03 04:56


如何避免“无法读取代码页文件”的18065错误?

首先,确定客户端驱动程序可以读取代码页(Bundle\shared\codepage\xxxx.map),并且在删除所有.map文件后可复制此错误。

例如:用户意外删除.map文件或无权限访问,亦或出现其它错误而导致此错误的发生。

版本:DBMaster 5.x, DBMaster4.x

产品:Normal / Bundle

平台:All

作者: Sandy
更新时间:2016-03-03 07:02


如何利用存储过程COPYTABLE将旧表复制成一个新表?(DBMR: 2136)

用户可以通过调用存储过程“CALL COPYTABLE ()”在现有表的基础上复制一个新表。使用方法如下:

COPYTABLE(VARCHAR(32) source_schema_name INPUT,

VARCHAR(32) source_table_name INPUT,

VARCHAR(32) destination_schema_name INPUT,

VARCHAR(32) destination_table_name INPUT,

VARCHAR(128) tablespace_lock_mode_option_string INPUT,

VARCHAR(2048) where_condition_string INPUT,

INT fg_rename_index INPUT,

INT commit_count INPUT)

复制源表的定义和数据到目的表。

使用此存储过程时请注意以下事项:

(1).必须在自动提交开启的时候,该存储过程才会执行。

(2).依据DCI规则标志,用户可以设置0或1重命名索引。

(3).为commit动作设定一个提交计数功能,每复制n笔数据执行一次提交,用户可设置成0至n。

注意:一旦出现错误,在该错误发生之前的任何操作都将被提交,没有执行的命令将记录在_spusr.log中。用户可以在dmconfig.ini配置文件中设置DB_SPLOG关键词来指定存储log的目录,或者在用户执行应用程序的目录中找到它们。

用户在使用的过程中需要注意第五个参数。第五个参数允许用户设置三个选项:表空间、锁模式和填充因子。此外,关于第五个参数您可以一次设置一个选项,也可以同时设置三个选项。请注意,如果指定了相同的表空间,所有的设置都将和源表相同;如果您指定了其他表空间,记住设置不同的选项——锁模式或填充因子为不同的值,否则在不同的表空间里将使用默认设置。

例:

(1)创建表t1并查看t1的表结构。

dmSQL> def table t1;

create table SYSADM.T1 ( C1 TIMESTAMP default null )

in DEFTABLESPACE lock mode row fillfactor 100 ;

(2)在表t1所在的表空间创建表t2并查看其表结构。

dmSQL> call copytable('SYSADM', 'T1', 'SYSADM', 'T2', '', '', 0, 1);

dmSQL> DEF TABLE T2;

create table SYSADM.T2 ( C1 TIMESTAMP default null )

in DEFTABLESPACE lock mode row fillfactor 100 ;

(3)在其他表空间创建表t2并查看其表结构。

dmSQL> call copytable('SYSADM', 'T1', 'SYSADM', 'T2', 'IN TS1 LOCK

MODE PAGE FILLFACTOR 75', '', 0, 1);

//tablespace : ts1

//lock mode : page

//fillfactor : 75

 

dmSQL> def table t2;

Create table SYSADM.T2 ( C1 TIMESTAMP default null)

in TS1 lock mode page fillfactor 75 ;

一般来说,锁模式最好设置成行锁。

版本: DBMaster 4.3 or Above

产品: Normal / Bundle

平台: All

作者: Sandy
更新时间:2016-03-03 07:16


如何避免此错误:用户在评估版的Windows VM上安装并激活了DBMaster,激活Windows VM后,DBMaster不能启动并报告“无效许可”。

用户在评估版的Windows VM上安装了激活版的DBMaster 5.2,当激活Windows VM 后,DBMaster报告无效许可。出现此错误属于正常现象,因为我们产生activation.dat是根据Machine ID生成的,而Machine ID和Windows VM操作系统的产品许可相关,所以激活Windows VM后DBMaster不能启动运行并报告“无效许可”。通过“Upgrade” 重新激活DBMaster就可解决此问题。

版本:DBMaster5.x, 4.x

产品:Normal / Bundle

平台:Windows

作者: Sandy
更新时间:2016-03-03 08:01


如何避免使用DBMaster Bundle版本时出现的5388错误?

如果我们有COBOL程序并且想在Linux系统下通过DCI访问DBMaster(bundle version),那么首先需要编译runcbl运行时,而编译运行时则需要链接libdmapic.so文件。DBMaster为其正式版和Bundle版提供不同的链接文件名。一般情况下,如果相应的文件是libdmapic.a文件,那么在编译运行时时必须保证使用正确的文件名。用户在编译runcbl运行时时会使用libdmapic.a,但是DBMaster Linux bundle版本却不包含libdmapic.a文件,所以当连接数据库时就会返回5388错误(字符集转换工具打开失败)。要避免此错误请使用libdmapic.so文件重新编译runcbl运行时,同时请记住在MAKEFILE中更改libdmapic.a为libdmapic.so。此外,请把LD_LIBRARY_PATH环境参数设置为xxx/bundle,例如:export LD_LIBRARY_PATH=/home/bundle。

版本:DBMaster 5.x, 4.x

产品:Bundle

平台:Linux

作者: Sandy
更新时间:2016-03-03 08:01


如何避免从DBMaster4.1移植数据库到5.2时出现的WARNING63错误?

用户想从DBMaster4.1移植数据库到5.2,首先从DBMaster4.1通过unload命令将数据库导出,然后通过load命令尝试导入到5.2,此时出现了Warning63错误(数据转换成不同类型时,数据被截断)。出现此错误的原因是末尾“换行符”是不可打印的SJIS符。从表空间导出数据,最好的解决方法是 “set unload chartohex on”,但此功能只从DBMaster4.3版本开始支持。

一般情况下,我们认为删除掉有问题记录的末尾"\t”,该 WARNING (63)就会消失。但事实上,即使末尾的"\t”被删除掉,其他的"\t”仍然不能被正确导入。而且一些SJIS日本汉字也不能正确导入。

例如:"能"

日本汉字"能"字的十六进制是945c,"5c"与换行符-"0D0A"的十六进制是一样的,所以"5c"会被认为是换行符-"\"而导致错误。当导入此SJIS日本汉字时,删掉"945c"的末尾变成"94",则会引起一些不同于之前的错误记录数据。

此外,DBMaster4.1版本并不支持“set unload chartohex on”的解决方法,所以用户不能直接从4.1导出数据库再导入到5.2。正确的方法如下:

(1). 升级DBMaster4.1版本至DBMaster4.34。用户可使用DBMaster4.1的DB文件来启动数据库,并且在此之前请先备份DB。

(2). 使用"set unload chartohex on"方法从DBMaster4.34导出数据。

(3). 导入数据到DBMaster5.2。

这样就可以成功实现从DBMaster4.1版本移植数据库到DBMaster5.2版本。

版本:DBMaster5.x

产品:Normal /Bundle

平台:全部

作者: Sandy
更新时间:2016-03-03 08:02


2012

如何避免使用高频率字符3?

首先,用户应该备份c:\DBMaster\4.3\shared\stopword\ tw.tab 下的文件tw.tab ,然后打开tw.tab 删除以下内容。

0

1

2

3

4

5

6

7

8

9

10

然后,重新命名tw.tab 为stopword.tab.(用户可以自己命名xx.tab)

接下来,在dmconfig.ini中设置DB_STPWD= stopword.tab,重启数据库。

最后,删除原始的文本索引并重新创建它来排除高频率字符3.

 

版本: DBMaster5.x

产品: Normal

平台: Windows

作者: Sandy
更新时间:2016-03-03 08:23


如何使MFCOBOL 兼容Visual COBOL?

Q1. 如何避免此错误:用户在评估版的Windows VM上安装并激活了DBMaster,激活Windows VM后,DBMaster不能启动并报告“无效许可”。 回答1:用户在评估版的Windows VM上安装了激活版的DBMaster 5.2,当激活Windows VM 后,DBMaster报告无效许可。出现此错误属于正常现象,因为我们产生activation.dat是根据Machine ID生成的,而Machine ID和Windows VM操作系统的产品许可相关,所以激活Windows VM后DBMaster不能启动运行并报告“无效许可”。通过“Upgrade” 重新激活DBMaster就可解决此问题。 版本:DBMaster5.x, 4.x 产品:Normal / Bundle 平台:Windows Q2.如何避免使用DBMaster Bundle版本时出现的5388错误? 回答2:如果我们有COBOL程序并且想在Linux系统下通过DCI访问DBMaster(bundle version),那么首先需要编译runcbl运行时,而编译运行时则需要链接libdmapic.so文件。DBMaster为其正式版和Bundle版提供不同的链接文件名。一般情况下,如果相应的文件是libdmapic.a文件,那么在编译运行时时必须保证使用正确的文件名。用户在编译runcbl运行时时会使用libdmapic.a,但是DBMaster Linux bundle版本却不包含libdmapic.a文件,所以当连接数据库时就会返回5388错误(字符集转换工具打开失败)。要避免此错误请使用libdmapic.so文件重新编译runcbl运行时,同时请记住在MAKEFILE中更改libdmapic.a为libdmapic.so。此外,请把LD_LIBRARY_PATH环境参数设置为xxx/bundle,例如:export LD_LIBRARY_PATH=/home/bundle。 版本:DBMaster 5.x, 4.x 产品:Bundle 平台:Linux Q3.如何避免从DBMaster4.1移植数据库到5.2时出现的WARNING63错误? 回答3:

在替换Micro Focus Net Express 为Visual COBOL 之后,当编译COBOL PROGRAM 时我们将发现会面临一些错误(例如“Visual Cobol不支持N type”),所以在使用Visual COBOL 编译COBOL PROGRAM 时需要注意以下四点。

  • 环境变量

32 bit Windows

set path=%path%;C:\Program Files\Micro Focus\Visual COBOL 2010\bin

64 bit Windows

set path=%path%;C:\Program Files (x86)\Micro Focus\Visual COBOL 2010\bin64

  • Microsoft Visual Studio

对于Net Express 5.1, VC的版本是9.0,Visual COBOL 2010R4中VC版本为10.0.,所以我们必须安装正确的版本并且设置正确的PATH。例如,

32 bit Windows

call "C:\Program Files\Microsoft Visual Studio 10.0"\VC\bin\vcvars32.bat

copy "C:\Program Files\Microsoft Visual Studio 10.0"\VC\lib\oldnames.lib .

64 bit Windows

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0"\VC\bin\amd64\vcvars64.bat

拷贝"C:\Program Files (x86)\Microsoft Visual Studio 10.0"\VC\lib\amd64\oldnames.lib .

  • N type的定义

03 WK-N PIC N(50).

03 WK-5 PIC N(01).

Net Express 5.1中的N type被定义为152,在Visual Cobol 2010R4中被定义为168.我们必须在MFDCI中添加一个新的type来映射它。所以只有新的DCI版本支持Visual Cobol的N type。

  • x32 平台的FCD3选项

The File Control Description (FCD)是一个包含文件使用信息的数据区域。这里有两个版本的FCD,使用哪一个取决于COBLE环境运行在32位还是64位系统上。如下表所示:

COBOL Development System

FCD Used

Mainframe Express

FCD2

32-bit Visual COBOL

FCD2

64-bit Visual COBOL

FCD3

.NET Support within Visual COBOL

FCD3

32-bit Server Express

FCD2 or FCD3

64-bit Server Express

FCD3

 

由于"FCD3"在32bit/64bit 上是不同于Net express ,Visual Cobol 的默认选项(32位使用"FCD2",64位使用“FCD3”) 。在32位系统我们需要使用“NOFCD3”进行编译,否则会出现错误114。如下使用:

首先,在xfd.cfg文件(用户可以为xfd.cfg指定路径)中添加以下信息:

NOFCD3 CREATEXFD CALLFH “DBMAKETINTF”

然后执行cbllink命令:

cbllink -oTEST.exe -uxfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl.lib dmdcic.lib dmapi52.lib

或者

cbllink -oTEST.exe -u C:\test\xfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl.lib dmdcic.lib dmapi52.lib

另外,我提供一个使用NOFCD3 的新DCI库作为默认选项,用户无需添加其他选项。

cbllink -oTEST.exe -uxfd.cfg -g -b TEST.cbl oldnames.lib dmmfcbl_fcd3.lib dmdcic.lib dmapi52.lib

注意 1:

新的lib仅在32位平台上适用,并不兼容Net Express version (完全不同的数据结构),所以我们重命名lib名为dmmfcbl_fcd3.lib

注意 2:

如果用户想编译COBOL 程序为INT或者GNT格式,因为COBOL命令不能识别NOFCD3 选项,请使用新的lib dmmfcbl_fcd3.lib 来替换dmmfcbl.lib,这样避免错误114的发生。(内存访问违背).。使用方法如下:

编译DBMASTERINTF.dll

cbllink -v -K -L -d -oDBMASTERINTF.dll mfcall.obj oldnames.lib dmmfcbl_fcd3.lib dmdcic.lib dmapi52.lib

编译GNT,执行DBMASTERINTF.dll.

cobol test.cbl CREATEXFD CALLFH "DBMASTERINTF.dll" gnt

版本: DBMaker5.x

产品: Normal /Bundle

平台:All

作者: Sandy
更新时间:2016-03-03 08:16


如何使文件排序顺序按照日文字母顺序排序?(dbmr2178)

关于排序顺序,DBMaster按照默认的二进制排序顺序进行。

如果用户想使用其他语言作为排序选项,应该创建一个类似于big5_stroke.ord的顺序文件,然后放置在C:\DBMaster\5.2\shared\codeorder下。然后在dmconfig.ini 中设置DB_Order = xxxx_stroke.ord 。

我们将提供一个SJIS的顺序文件sjis_dict.ord 。

版本:DBMaster 5.x, 4.3

产品:Bundle/Normal

平台:ALL

作者: Sandy
更新时间:2016-03-03 08:21


当出现多线程使用相同的连接句柄调用服务器函数时如何避免这些限制? (DBMR2299)?

当多线程使用相同的连接句柄调用服务器函数时将会碰到一些预料不到的行为(例如挂起)。我们可以设置DB_MTIMO 来解决此问题。

DB_MTIMO = 0/n (关闭/秒)

使用DB_MTIMO确保同一时间只有一个ODBC函数将被执行。使用latch来防止另一个线程在同一时间使用同一个连接句柄执行ODBC函数。

尽管我们可以设置此关键字来解决此问题,但是一般情况下我们不推荐用户这么设置。因为可能会引起数据库性能降低或者出现未知的问题。

 

版本:DBMaster5.x

产品: Normal

平台:Windows

作者: Sandy
更新时间:2016-03-04 03:24


关于DBMaster中的NULL转换函数(DBMR2355)?

以下是NULL转换函数的描述内容,请参考。

 

1. IFNULL 是一个ODBC函数。IFNULL (v1, v2) 等同于coalesce(v1,v2),并且等同于“if v1 is not null, then v1 else v2”。

2. NULLIF是一个SQL 99 函数。NULLIF(v1, v2)等同于“if v1=v2 then NULL else v1“。

3. COALESCE 是一个SQL 99函数。COALESCE (v1, v2, v3,….vn)等同于“if v1 IS NOT NULL then v1 else if v2 IS NOT NULL then v3 else………….else vn”。 

 

版本: DBMaster4.x/5.x

产品: 普通版/评估版

平台:全部

作者: Sandy
更新时间:2016-03-04 03:24


DBMaster5.2中通过ODBC从Long Varchar类型读取数据时如何避免读取双倍内容的问题?

在一个类型为Long Varchar的列中插入大量纯文本数据,然后使用JDBA工具读取,查询结果是正确的。但是如果使用ASP.NET读取则会读取到双倍的内容。示例AP代码部分如下:

string strSQL = @"SELECT LNSOURCE FROM TMP_FLNAME WHERE PUBLISH = 'N0'

AND FLCODE = ?;";

OdbcConnection Conn = new OdbcConnection(strConnLaw);

Conn.Open();

OdbcCommand Comm = new OdbcCommand(strSQL, Conn);

Comm.Parameters.Add("FLCODE", OdbcType.Char, 8).Value = hidFLCode.Value.Trim();

OdbcDataReader dr = Comm.ExecuteReader();

if (dr.Read())

{

        // The datatype of LNSOURCE is long varchar

        Response.Write("<pre>" + dr["LNSOURCE"].ToString()+"</pre>");

}

dr.Close();

Conn.Close();

 

我们可以使用OleDb去避免双倍读取问题,但是请注意用户需要确认在连接字符串中 “Provide”应该为”Provider=DMOLE52” 而不是”Provider=DMOLE52.1”。

另外,如果用户坚持使用ODBC,他们可以通过修改AP来避免双重内容读取问题,使用DataReader 的“GetChars”and add ”CommandBehavior.SequentialAccess”可以读取数据。

OdbcDataReader dr = Comm.ExecuteReader(CommandBehavior.SequentialAccess);

  if (dr.Read())

            {

                char[] buffer;

                int iStart = 0;

                long returnLen;

                buffer = new char[256];

                returnLen = dr.GetChars(0, iStart, buffer, 0, 256);

                richTextBox1.Text += new string(buffer);

                while (returnLen > 0)

                {

                    iStart += (int)returnLen;

                    returnLen = dr.GetChars(0, iStart, buffer, 0, 256);

                    richTextBox1.Text += new string(buffer);

                }

            }

            dr.Close();

            Conn.Close();

 

版本: DBMaster 5.x, 4.3

产品: 评估板/普通

平台:所有

作者: Sandy
更新时间:2016-03-04 03:28


创建IVF全文索引占据大量的内存,内存来自于操作系统而不是DCCA? (DBMR2242)

创建反向文件全文索引需要占据大量的内存资源。操作系统额外为反向文件全文索引分配内存,而不是占据了共享内存—DCCA,且这些内存使用后会被释放。用户可以在dmconfig.ini中通过添加关键字DB_IFMem手动设定近似的内存上限。若用户不打算使用IVF全文索引,也没有必要设置关键字DB_IFMem

版本:DBMaster4.x/5.x

产品:Bundle/Normal

平台:Windows/Linux

作者: Sandy
更新时间:2016-03-04 03:29


在DBMaster中如何为表或索引分配页? (DBMR2238)

当创建一个表时,页数的分配取决于列的数量、列类型以及在表中的表头信息。然而,如果用户只是创建了一个没有插入任何记录的空表,则只需要将表的相关信息存储到SYSTABLE 中而不需要为空表配置数据页。当创建一个索引时,页数的分配取决于创建该索引基于的列数以及该索引的复杂性。然而,若用户只是创建一个没有插入任何记录的空索引,则只需将索引相关信息存储到SYSINDEX中而不需要为空索引配置索引页。总之,用户不能自己为表或索引定义所分配的页数。

DDL的系统表模式分别储存在不同的系统表中,例如:

Create table t1 (c1 int, c2 int);

Create index idx1 on t1 (c1);

在P1的SYSTABLE中添加一笔记录来记录t1的相关信息。

在P2的SYSCOLUMN 中添加两笔记录来记录c1和c2的相关信息。

在P3的SYSINDEX 中添加一笔记录来记录idx1的相关信息。

现在,如果用户使用命令“create table t2 (c3 int, c4 char(10), …)”创建名为t2的表,若P1中有足够的空间则这笔记录将被用于记录t2的相关信息而被添加到P1的SYSTABLE 中,否则,将会为SYSTABLE 分配一个名为P4的新页,并且此笔记录会被添加到P4中。同时,若P2中有足够的空间,则分别记录C3和C4相关信息的两笔记录将被添加到P2的SYSCOLUMN中,否则,将会为SYSCOLUMN分配一个名为P5的新页,并且此笔记录将会被添加到P5中。

版本: DBMaster4.x/5.x

产品: Bundle/Normal

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 03:30


如何备份文件对象?在不备份文件对象的情况下,该数据库可否正常恢复? (DBMR2241)

用户可以通过设定关键字DB_BkFom为一个完整备份指定文件对象(FO)备份模式。

  • Ÿ   DB_BkFoM = 0:不备份文件对象
  • Ÿ   DB_BkFoM = 1: 只备份系统文件对象
  • Ÿ   DB_BkFoM = 2: 系统文件对象和用户文件对象都备份

当执行一个完整备份时,在备份目录下创建一个FO目录。如果DB_BkFom 值为1,系统文件对象将拷贝至备份目录下。如果DB_BkFom 值为2,系统文件对象和用户文件对象都会拷贝至FO目录下。当备份文件对象拷贝至FO目录下时,这些文件对象会按顺序重新命名。例如,原始外部文件名为“ZZ000001.bmp,... , ZZ00AB32.txt”,备份服务器将拷贝它们至FO子目录下并重新命名为“fo0000000000.bak,... , fo0000002345.bak”,意思为它们是第一个文件对象和2345个文件对象。源完整文件名和其新名的映射将被记录在文件对象映射列表文件dmFoMap.his中,dmFoMap.his 是一个用于存储文件对象的纯粹的ASCII文本文件。格式如下:

Database Name: DBSAMPLE5

Begin Backup FO Time: 2012/01/29 09:21:32

FO Backup Directory: C:\DBMaster\5.2\SAMPLES\DATABASE\backup\FO\

[Mapping List]

s, fo0000000000.bak, "C:\DBMaster\5.2\SAMPLES\DATABASE\backup\FO\ZZ000001.bmp"

u, fo0000000001.bak, "C:\DBMaster\5.2\SAMPLES\DATABASE\backup\FO\image.jpg"

....

s, fo0000002345.bak, "C:\DBMaster\5.2\SAMPLES\DATABASE\backup\FO\ZZ00AB32.txt"

如果DB_BkFom值为0,可以不用备份文件对象而恢复数据库。然而,用户需要注意当恢复数据库到一个新的数据库时,如果DB_BkFom 的值为0,用户需要手动拷贝系统文件对象和用户文件对象至FO目录下,如果DB_BkFom 值为1,用户仅需要手动拷贝用户文件对象至FO路径下即可。用户可以参考dmFoMap.his列出的文件来确保所有相关目录存在。

版本:DBMaster 4.x/5.x

产品:Bundle/Normal

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 03:33


2013

在安装DBMaster之后,如何使C编译器可用?(DBMR2252)

假设用户已经安装了DBMaster并没有安装C编译器,现在他想安装C编译器,对于DBMaster的部分版本用户需要重新安装DBMaster并且在安装过程中选择C编译器的类型,同时,2009年3月以后的4.3.x和5.x.x版本,用户不需要重新安装DBMaster仅需要在注册表中更改COMPILER的键值就可实现C编译器的使用。COMPILER的路径为“HKEY_LOCAL_MACHINE -> SOFTWARE -> DBMaster -> 4.3.x/5.x.x -> COMPILER”。

例如,如果一个用户的VC编译器是VC2003,他需要去更改COMPILER的键值为VC71.。请参考下表中的其他设置信息。

 

COMPILER的注册表键值

用户VC编译器版本

DBMaster 版本

32/64

VC60

VC6.0

所有版本

仅32位

VC71

VC2003

所有版本

仅32位

VC80

VC2005

DBMaster5.0以后

仅32位

DBMaster5.1以后

32/64位

VC90

VC2008

DBMaster5.1以后

32/64位

VC100

VC2010

DBMaster5.3以后

32/64位

 

注意:

“仅32 位”意思是在64位系统安装VC6.0和VC2003对DBMaster是无效的。 在64位系统下安装VC编译器时用户需要选择“x64”选项。

 

版本: DBMaster4.3.x/5.x.x

产品: Normal

平台: Windows

作者: Sandy
更新时间:2016-03-04 03:36


当DMERROR.LOG被更改时,如何立即发送邮件至DBA? (DBMR2257)

一旦DMERROR.LOG被更改,DBMaster将立即给DBA发送一封内容为“请参考C:\DBMaster5.2\DMERROR.LOG中的信息”(对于不同的用户C:\DBMaster5.2\DMERROR.LOG路径将被DMERROR.LOG实际所在路径替代)的邮件。用户需要在dmconfig.ini中设置DB_ERMRv和EB_ERMSv 。

例如:

DB_ERMSV = LAMBS.ad.syscom.com.tw                  ;SMTP server address

DB_ERMRV = Snow_Wang@email.lingan.com.cn        ;DBA’s email aeddresses

 

版本: DBMaster4.x/5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 03:38


如何为数据库开启或终止一个NT服务? (DBMR2260)

使用命令 “net start ServiceName” 开启一个NT服务,使用命令“net stop ServiceName” 关闭一个NT服务。

例如,假定一个NT服务被系统为DBSAMPLE5的数据库自动命名为DBMASTER-DBSAMPLE5,以下命令用于开启该服务。

net start DBMASTER-DBSAMPLE5

以下命令用于关闭服务。

net stop DBMASTER-DBSAMPLE5

 

版本: DBMaster 4.x/5.x

产品: Normal/Bundle

平台: Windows

作者: Sandy
更新时间:2016-03-04 03:40


DBMaster 中dmBackup.l_k 的功能是什么? (DBMR2268)

dmBackup.l_k 用于锁定dmBackup.his。执行备份时,DBMaster会自动创建dmBackup.l_k,以确保每个进程的写操作在dmBackup.his上是相互排斥的。

 

版本:DBMaster4.x/5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 03:41


如何使用简单的命令将表及其索引移动至另一个表空间? (DBMR2363)

从DBMaster5.3开始,DBMaster支持命令 “ALTER TABLE table_name MOVE TABLESPACE tablespace_name”,该命令用于将表及其索引移动至另一个表空间。移动对象的进程完成前,用户不能访问该表的数据。

  • Ÿ   如果表及其索引位于相同的表空间,用户能够使用命令同时将其移动至另一个表空间;此外,通过重建索引,将索引和表移动至不同的表空间。

例如:

在表空间ts1创建表t1及其索引idx1,首先通过使用命令“alter table t1 move tablespace ts2”,将表及其索引移动至表空间ts2 ,接着通过重建索引,将索引idx1移动至表空间ts3 。详情如下所示:

dmSQL> create table t1(c1 int,c2 int) in ts1;

dmSQL> create index idx1 on (c1) in ts1;

 

dmSQL> def table t1;

create table SYSADM.T1 (C1 INTEGER default null, C2 INTEGER default null) in TS1 lock mode row fillfactor 100;

create index IDX1 on SYSADM.T1 (C1 asc) in TS1;

 

dmSQL> alter table t1 move tablespace ts2;

 

dmSQL> def table t1;

create table SYSADM.T1 (C1 INTEGER default null , C2 INTEGER default null) in TS2 lock mode row  fillfactor 100 ;

create index IDX1 on SYSADM.T1 ( C1 asc ) in TS2;

 

dmSQL> rebuild index idx1 for t1 in ts3;

 

dmSQL> def table t1;

create table SYSADM.T1 (C1 INTEGER default null , C2 INTEGER default null) in TS2 lock mode row fillfactor 100 ;

create index IDX1 on SYSADM.T1 (C1 asc) in TS3;

  • Ÿ   如果表及其索引位于不同的表空间,用户首先能将表移动至不同的表空间,接着通过重建索引,将索引移动至表空间。

例如:

首先在表空间ts1创建表t3,在表空间ts2创建其索引idx3,接着使用命令“alter table t3 move tablespace ts3”,将表t3移动至表空间ts3 ,最后通过重建索引,将索引idx1移动至表空间ts3 。详情如下所示:

dmSQL> create table t3(c1 int,c2 int) in ts1;

dmSQL> create index idx3 on t3(c1) in ts2;

 

dmSQL> def table t3;

create table SYSADM.T3 (C1  INTEGER default null , C2 INTEGER default null) in TS1 lock mode row fillfactor 100 ;

create index IDX3 on SYSADM.T3 (C1 asc) in TS2;

 

dmSQL> alter table t3 move tablespace ts3;

 

dmSQL> def table t3;

create table SYSADM.T3 (C1 INTEGER default null , C2 INTEGER default null) in TS3  lock mode row fillfactor 100;

create index IDX3 on SYSADM.T3 (C1 asc) in TS2;

 

dmSQL> rebuild index idx3 for t3 in ts3;

 

dmSQL> def table t3;

create table SYSADM.T3 (C1 INTEGER default null , C2 INTEGER default null)in TS3 lock mode row fillfactor 100;

create index IDX3 on SYSADM.T3 (C1 asc) in TS3;

 

在DBMaster5.3之前,用户能根据以下步骤将表及其索引移动至另一个表空间。

  1. 将表导出至一个外部文本文件。.

UNLOAD TABLE FROM table_name TO file_name

2. 打开文本文件“file_name”, 手动修改表空间的名称。

alter table SYSADM.TEST primary key (C1) in old_TS1;

==> alter table SYSADM.TEST primary key (C1) in new_TS1;

create index intest_SYSADM.TEST on SYSADM.TEST (C2 asc, C3 asc) in old_TS1

==> create index intest_SYSADM.TEST on SYSADM.TEST (C2 asc, C3 asc) in new_TS1

3. 删除表 “table_name”,然后从文本文件“file_name”导入表的内容。

LOAD TABLE FROM file_name

 

版本: DBMaster 4.x/5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 04:02


如何从数据库中获取视图定义? (DBMR2327)

DBMaster中有两个用于获取视图定义的SQL语句。一个是 “def view view_name”,另一个是“select cast (view_definition as char(n)) from sysviewdata where view_name='view_name'”。

例如:

dmSQL> def view V2;

Create view SYSADM.V2 as select C1 from SYSADM.T1 ;

 

dmSQL> select cast(view_definition as char(100)) from sysviewdata where view_name='V2';

 

             CAST(VIEW_DEFINITION AS CHAR(100))

============================================================

create view SYSADM.V2 as select C1 from SYSADM.T1

 

1 rows selected

注意:

如果n值小于视图定义语句的长度,用户就无法获取整个视图定义语句。在这种情况下,用户就需要设置一个较大的n值。

版本: DBMaster4.x/5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 04:14


SYSADM如何为其他用户表创建或重建索引?(DBMR2372)

要创建或重建由其他用户创建的索引,SYSADM需要在表名称前添加表所有者的名称,而不是在索引名称前添加。例如:用户staff创建了表test_table,SYSADM可以使用如下命令为表test_table创建或重建索引test_index。

dmSQL> create index test_index on staff.test_table(c2);

dmSQL> rebuild index test_index for staff.test_table;

 

版本: DBMaster 4.x/5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2016-03-04 04:57


如何将DBMaster 4.3版本的数据库从Windows 平台移植至Linux平台 ?(DBMR2384)

因为DBMaster在同系列的操作系统版本之间是兼容的,所以用户只需将数据文件复制到Linux下,并修改其相关配置(dmconfig.ini设置、关键字路径等),然后安装DBMaster,使用数据文件直接启动数据库即可。

用户在移植之前,需要注意以下几点:

  1. 目标的Linux平台应支持DBMaster。
  2. Linux平台的硬件配置应与Windows平台的硬件配置相匹配或高于Windows平台。另外,Linux平台的CPU类型应与Windows平台的CPU类型相同(例如,两个平台均为x86 32 位或x86 64位),否则用户就不能直接复制数据文件,而需通过导出或导入来将其从Windows平台移植至Linux平台。
  3. 最好将数据库从旧版本移植至新版本。例如,将DBMaster4.3.0移植至DBMaster4.3.4,或者将DBMaster4.3.4移植至DBMaster4.3.4,而不能将DBMaster 4.3.4移植至 DBMaster 4.3.0。
  4. 修改dmconfig.ini配置。另外,如果用户调整了日志文件的大小,就需要在新日志模式下启动数据库。

 

版本: DBMaster 4.3.x

产品: Normal

平台: Windows

作者: Sandy
更新时间:2016-03-04 05:06


在Linux环境下如何解决“ERROR (1110):申请的DCCA内存超出系统限制”?

在Unix环境下,数据库申请的DCCA内存超过操作系统分配的共享内存最大值时,会发生该错误。

为了解决这个问题,用户需要给位于/etc/sysctl.conf下的变量Kernel.shmmax设置一个合适的值。

例如,

# controls the maximum shared segment size, in bytes

kernel.shmmax = 68719476736

 

版本: DBMaster 4.x/5.x

产品: Normal/Bundle

平台: Linux

作者: Sandy
更新时间:2016-07-19 09:36


2014

如何确保数据库正常关闭?(哪些行为可缩短下次启动数据库所需时间?)(DBMR2517)

如果数据库的关闭由系统异常事件引起,那么为确保数据一致性,DBMaster在下次启动时需执行实例自动恢复,而该动作将花费很长时间,从而导致重启dmserver用时过长。用户可在以下两种方法之中任选一种避免该情况的发生:一是在停止操作系统之前首先使用组策略(操作系统工具)停止应用程序和数据库;二是改变服务停止的超时设置。
如果使用脚本断开数据库用时过长,用户可在该脚本中“terminate db;”前增加一个检查点,然后再执行该脚本,以此缩短用时。

Version: DBMaster5.2.x
Product: Normal/Bundle
Platform: Windows/Linux

作者: tester
更新时间:2016-01-11 07:49


DBMaster支持哪些日期格式?(DBMR2485)

DBMaster支持以下日期格式:

Ÿ   输入格式:mm/dd/yy、mm-dd-yy、dd/mon/yy、dd-mon-yy、mm/dd/yyyy、mm-dd-yyyy、yyyy/mm/dd、yyyy-mm-dd、dd/mon/yyyy、dd-mon-yyyy、dd.mm.yyyy。

Ÿ   输出格式:mm/dd/yy、mm-dd-yy、dd/mon/yy、dd-mon-yy、mm/dd/yyyy、mm-dd-yyyy、yyyy/mm/dd、yyyy-mm-dd、dd/mon/yyyy、dd-mon-yyyy、dd.mm.yyyy。

用户可使用用户自定义函数TO_DATE将已选字符串转换成以上任何一种日期格式。此外,用户还可以使用以下语句以“mm/yy”格式显示日期。

SELECT CAST(MONTH(DT_INI) AS VARCHAR(10)) || '/' || CAST(YEAR(DT_INI) AS VARCHAR(10)) AS "DATE_FORMATED" FROM table_name

 

Version: DBMaster5.2.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: tester
更新时间:2016-01-11 08:26


在COBOL程序中,如何通过DBMaster的DCI将NULL插入CHAR类型字段?(DBMR2557)

用户可使用以下三个DCI配置变量将NULL插入CHAR类型字段:

Ÿ   DCI_NULL_ON_SPACE_CHAR

Ÿ   DCI_NULL_ON_ILLEGAL_DATE

Ÿ   DCI_NULL_ON_ILLEGAL_DATA

此外,用户还可以使用以下语句动态设置这三个变量。

CALL "DCI_SETENV" USING "DCI_NULL_ON_ILLEGAL_DATA" "1" CALL "DCI_SETENV" USING "DCI_NULL_ON_ILLEGAL_DATE" "1"
CALL "DCI_SETENV" USING "DCI_NULL_ON_SPACE_CHAR" "1"
CALL "DCI_SETENV" USING "DCI_NULL_ON_ILLEGAL_DATA" "0"
CALL "DCI_SETENV" USING "DCI_NULL_ON_ILLEGAL_DATE" "0"
CALL "DCI_SETENV" USING "DCI_NULL_ON_SPACE_CHAR" "0"

 

Version: DBMaster 5.2.x/5.3.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: ququ
更新时间:2016-01-11 09:10


在Linux平台,如何在MF COBOL 4.1中使用DCI_WHERE_CONSTRAINT?(DBMR2553)

DBMaster的DCI对DCI_WHERE_CONSTRAINT的支持始于2014年1月底之后编译的DBMaster版本。用户可通过对DCI_SET_WHERE的调用使用DCI_WHERE_CONSTRAINT。在Linux平台,若要在MF COBOL 4.1中使用DCI_WHERE_CONSTRAINT,有以下两种方法供用户选择:一是复制新的lib文件libdmmfcbl.a到目录~DBMaster/5.2/lib下,使用新的DCI;二是修改makefile,并执行make rtsbmf命令,例如,将“cob -vgxo rtsdbmf -e "" +F DBMAKERINTF +F DCI_SETENV +F DCI_GETENV +F DCI_DISCONNECT\”修改为“cob -vgxo rtsdbmf -e "" +F DBMAKERINTF +F DCI_SETENV +F DCI_GETENV +F DCI_DISCONNECT +F DCI_SET_WHERE \”。

Version: DBMaster 5.2.x/5.3.x

Product: Normal/Bundle

Platform: Linux

作者: ququ
更新时间:2016-01-11 09:11


文件DMDUMPxxxx_x.DMP的路径是什么?(DBMR2508)

文件DMDUMPxxxx_x.DMP通常存储于数据库目录下,而数据库目录通常记载在DMERROR.LOG中。然而,如果用户使用的数据库是2013年11月12日之前发布的Bundle版,那么在数据库崩溃时,DMDUMPxxxx_x.DMP可能会被存储在目录C:\下。

 

Version: DBMaster 5.2.x

Product: Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2016-03-04 09:45


在数据查询中,哪些情况会导致使用“nested join”的查询速度比使用“merge join”的查询速度快?(DBMR2559)

默认情况下,如果表数据量较小,DBMaster将采用”nested join”的方式查询数据,此时仅扫描部分数据,用时较短;相反,如果表数据量非常大,DBMaster将采用”merge join”的方式查询数据,此时通过索引扫描全部数据,用时较短。然而,如果表数据量非常大,且查询数据使用的SQL语句中包含”LIMIT”子句,那么DBMaster使用”merge join”查询数据的速度将会比使用”nested join”查询数据的速度慢很多,在这种情况下,如果用户使用的DBMaster 5.3版本是2014年2月25日之后发布的,可通过在dmconfig.ini中添加”DB_OPRTR=1”的方式选择”nested join”。该设置仅在部分含有LIMIT子句的查询中可用。

 

Version: DBMaster 5.3.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2016-03-04 09:46


“SET UNLOAD CHARTOHEX value” 在DBMaster不同版本中的具体含义分别是什么?(DBMR2567)

  • 在DBMaster 4.1中:

DBMaster 4.1不支持将字符转换成HEX格式,因此DBMaster 4.1将强制导出所有无法导出的字符(包括无法打印的字符),这些字符均不会被转化为HEX格式,且它们的一致性无法得到保证。也就是说,DBMaster 4.1无法成功导出无法打印的字符,相应地,也无法成功将这些字符还原到数据库中。

  • Ÿ在DBMaster 4.3中

“SET UNLOAD CHARTOHEX OFF”表示数据库将会以HEX格式导出无法打印的字符,将其余常规字符原样导出。

“SET UNLOAD CHARTOHEX ON”表示数据库将会以HEX格式导出所有数据。

  • Ÿ 在DBMaster 5.2.2/5.3中

“SET UNLOAD CHARTOHEX OFF”表示数据库中所有数据均不会被转化为HEX格式,类似于DBMaster 4.1。

“SET UNLOAD CHARTOHEX ON”表示数据库中所有数据均会被转化为HEX格式。

“SET UNLOAD CHARTOHEX AUTO”表示数据库将会以HEX格式导出无法打印的字符,将其余常规字符原样导出。该功能和DBMaster 4.3中“SET UNLOAD CHARTOHEX OFF”的功能类似。

 

Version: DBMaster 4.1/4.3/5.2.2/5.3.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2021-02-23 10:29


哪些原因可能导致“ERROR – 无法分配环境句柄”?(DBMR2537)

以下两个原因可能导致该问题产生。

  • Ÿ   内存不足(该错误可能导致IIS崩溃)。
  • Ÿ   数据库关闭后,连接池仍然有效并继续分配环境句柄。

 

Version: DBMaster 5.1.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2016-03-04 09:54


Jtools返回错误信息”sun.jdbc.odbc.JdbcOdbcDriver”的原因是什么?(DBMR2596)

此类错误大多是由于DBMaster版本和JRE版本不匹配引起的,用户可通过升级DBMaster或JRE处理此类错误。

 

Version: DBMaster 5.2.x/5.3.x

Product: Normal

Platform: Windows

作者: Sandy
更新时间:2016-03-04 09:56


使用DBMaster + Hibernate开发程序时,有哪些需要注意的问题?(DBMR2604)

用户需注意以下常见问题:

问题1:如何处理错误”java.lang.ClassNotFoundException: dbmaster.sql.JdbcOdbcDriver”?

答案1:复制dmjdbc30.jar到x:\xxxx\lib。

问题2:如何处理错误“java.lang.UnsatisfiedLinkError: no dmjdbc52 in java.library.path”?

答案2:将环境变量path的值设置为%path%;c:\dbmaster\5.2\bin。

问题3:如何处理错误“Hibernate无法找到数据库名”?

答案3:复制DBMasterDialect .java到相关目录,并在DataSource.groovy中做如下更改:

dataSource {

………..

dialect = org.hibernate.dialect. DBMasterDialect

}

问题4:如何处理错误“java.sql.SQLException: parameter number not in valid parameter number range : 1~ 2

at dbmaster.sql.JdbcOdbc.JDBCError(JdbcOdbc.java:220)

at dbmaster.sql.JdbcOdbcPreparedStatement.setInt(JdbcOdbcPreparedStatement.java:478)”?

回答4:在Controllers code (例: UserController.groovy)中将findWhere替换为findAllWhere,同时在Services code (例: LoginService.groovy)中将list(params)替换为getAll()。

 

Version: All

Product: Normal/Bundle

Platform: Linux

作者: Sandy
更新时间:2016-03-04 10:13


使用MF Visual Studio开发程序时,如果主程序和子程序都需要使用DCI,如何使用WHERE条件?(DBMR2608)

在程序的property页面,在字段“Additional directives”中填入“nofcd3 createxfd callfh "DBMAKERINTF.dll"”,同时,将DBMAKERINTF.dll放到程序编译后所生成文件的存储文件夹中。

 

Version: All

Product: Normal

Platform: Windows

作者: Sandy
更新时间:2016-03-04 10:14


如何处理错误“DB_UMODE设置为0时,无法连接或启动dmserver”?(DBMR2612)

旧版本数据库在某些情况(例如:操作系统在数据库服务器还未成功断开时重启)下会出现如下错误:DB_UMODE的值被更改为0,且在数据库重启后无法自动重置为1。

要解决该问题,用户需将dmconfig.ini中DB_UMODE的值更改为1。该问题在2010年5月20日之后的数据库版本中已被修复,用户无需再手动重置DB_UMODE的值。

 

Version: DBMaster 4.3.x/5.1.X/5.2.X

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2016-03-04 10:16


如何调查创建存储过程时出现ERROR (6590)的原因?(DBMR2613)

 

1. 检查<procedure_name>.msg,并根据该文件信息调查原因。

2. 如果<procedure_name>.msg是空文件,检查sp32.bat。

首先,检查已安装的Visual Studio版本是否和DBMaster指定版本匹配,如果不匹配,将注册键值更改为正确值。例如:

[HKEY_LOCAL_MACHINE\SOFTWARE\DBMaster\5.3]

"COMPILER"="VC80"

其次,如果Visual Studio是安装在64位操作系统上,用户需选择选项“x64 Compiler and Tools”,否则用户无法成功创建存储过程。

此外,从DBMaster 5.3.1(#23266, 20140807)开始,DBMaster支持Visual Studio 2012。

 

Version: All

Product: Normal

Platform: Windows

作者: Sandy
更新时间:2016-03-04 10:18


为什么在某些64位平台上无法安装64位DBMaster?(DBMR2629)

作者: Sandy
更新时间:2016-03-04 10:19


为什么从5.0.x升级到5.2.x后DBMaster的性能会降低?

如果从5.0.x到5.2.x的升级不是通过载入/载出的方法实现的,那么使用高版本DBMaster启动相同的数据库文件时,由于5.0.x和5.2.x的系统目录有差异,DBMaster性能降低,此时用户需执行“update statistics”以升级整个系统目录。

 

Version: DBMaster 5.0.x/5.2.x

Product: Normal

Platform: Windows/Linux

作者: Sandy
更新时间:2016-03-04 10:21


2015

如何在同一个数据库中创建表复制?(DBMR2758)

A1一般来说,表复制应用在不同的数据库之间,但也可以用于同一个数据库。

您可以通过以下两种方法在同一个数据库中创建表复制:

一、使用Create Replication语法。但采用这种方法时,Create Replication语法中不能包含“CLEAR DATA”和“CLEAR AND FLUSH DATA”这两个选项。

例如:

CREATE REPLICATION rp_name

WITH PRIMARY AS SYSADM.FILE1

REPLICATE TO DBSAMPLE5:UTENTE.FILE1;

 

CREATE REPLICATION rp_name

WITH PRIMARY AS SYSADM.FILE1

REPLICATE TO DBSAMPLE5:UTENTE.FILE1

FLUSH DATA;

注意:如果用户使用JDBA工具创建表复制,则不能勾选 “删除目标表中的数据”。

如果需要删除目标表中的原始数据,则用户需在创建表复制之前手动删除所有记录。

二、使用触发器。请注意该方法仅适用于同步表复制,且它作为一个全局事务将占用一个额外连接。

例如:

CREATE TRIGGER TR_INSERT AFTER INSERT ON SYSADM.FILE1

FOR EACH ROW

(INSERT INTO UTENTE.FILE1 VALUES(new.c1,new.c2));

CREATE TRIGGER TR_UPDATE AFTER UPDATE ONSYSADM.FILE1

FOR EACH ROW

(UPDATE UTENTE.FILE1 SET C1=NEW.C1,C2=NEW.C2);

CREATE TRIGGER TR_DELETE AFTER DELETE ON SYSADM.FILE1

FOR EACH ROW

(DELETE FROM UTENTE.FILE1 WHERE C1=OLD.C1 AND C2=OLD.C2);

 

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:47


错误信息“ERROR (25350), 连接终止,数据库被关闭或网络连接失败[netio.c , 462],-1,0.10054 [last func=32]”中“10054”和“[last func=32]”的含义是什么?(DBMR2748)

“(last func = 32)”是一个内部定义,供开发人员跟踪位置使用。

“10054”表示套接字错误,很多情况均可导致套接字错误,如关闭、崩溃或网络错误。

用户可通过检查odbc日志找出导致这个错误的操作。

 

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:48


如何避免WEB应用程序连接ODBC过程中偶尔出现的错误“ERROR [IM002] [Microsoft][ODBC Driver Manager] 未发现数据资源名及指定的既定驱动”?(DBMR2740)

在应用程序中,用户可通过将ODBC连接字符串中的“DSN=XXXX”更改为“Driver=DBMaster 5.x.x Driver”来避免出现此错误。例如:ODBC连接字符串="Driver=DBMaster 5.x.x Driver;DATABASE=XXXXX;SVADR=127.0.0.1;UID=SYSADM;Pwd="

 

版本: DBMaster 5.1.x

产品: Normal/Bundle

平台: Windows

作者: finlay
更新时间:2016-06-17 03:49


ERROR(2405)的错误原因是什么?(DBMR2683)

Error(2405)是一个许可选项错误。如果用户使用的DBMaster是未使用任何许可证号激活的评估版,则用户需考虑一下许可限制。

一、免费试用期:90天

二、最大连接数:5

三、页大小最大值:8K

四、日志文件大小最大值:2G

 

版本: DBMaster 5.x

产品: Normal/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:49


COBOL程序通过DCI连接DBMaster时如何使用外键?(DBMR2780)

COBOL程序通过DCI连接DBMaster时,为使用外键,用户需确认xml文件和表相匹配。

用户需将“open i-o”更改为“open output”以创建表“CET_ANALISE_PROPOSTA”,然后手动添加外键,最后在运行该COBOL程序前将“open output”更改回“open i-o”。

 

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:49


如何在Linux平台查看DBMaster后台进程的运行状态?(DBMR2777)

DBMaster在Linux平台有三个基本进程:BACKUP_SERVER、SERVICE_SERVER和IO_SERVER。用户可使用如下SQL语句确认进程ID(进程ID和表SYSUSER中字段connection_id的值相同)。

dmSQL> select connection_id,user_name from sysuser;

CONNECTION_ID          USER_NAME

================== ================

32433                    SYSADM

32322                    BACKUP_SERVER

32321                    SERVICE_SERVER

32320                    IO_SERVER

4 rows selected

下次,用户可使用如下命令确认数据库是否处于活动状态。

[dbmaker@RD-Redhat62 bin]$ ps -A|grep dmserver

32319 ? 00:00:00 dmserver.bin

32320 pts/0 00:00:00 dmserver.bin

32321 pts/0 00:00:00 dmserver.bin

32322 pts/0 00:00:00 dmserver.bin

32433 ? 00:00:00 dmserver.bin

若增加一个连接,进程数则增加1;若断开一个连接,进程数则减少1。例如,上面的32319进程便表示一个增加的连接。

此外,若多个用户连接数据库,则会增加更多的后台进程。

 

版本: All

产品: Normal/Bundle

平台: Linux

作者: finlay
更新时间:2016-06-17 03:52


在DBMaster中如何使用格式为“dd/mm/yyyy”或“dd-mm-yyyy”的日期?(DBMR 2773)

用户可通过在dmconfig.ini中设置DB_DaoFm来控制日期输出格式,目前DBMaster支持如下日期格式:

mm/dd/yy

mm-dd-yy

dd/mon/yy

dd-mon-yy

mm/dd/yyyy

mm-dd-yyyy

yyyy/mm/dd

yyy-mm-dd

dd/mon/yyyy

dd-mon-yyyy

dd.mm.yyyy

DBMaster不支持“dd/mm/yyyy”和“dd-mm-yyyy”,但用户可使用如下方法作为变通:

select CAST(DAYOFMONTH(column_name) AS VARCHAR(10))|| '/'|| CAST(MONTH(column_name) AS VARCHAR(10))|| '/'|| CAST(YEAR(column_name) AS VARCHAR(10)) AS "DATE_FORMATED" from table_name;

 

版本: DBMaster 5.3.x

产品: Normal/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:54


如何避免在Windows平台DBMaster旧版本中使用JServerManager工具创建数据库时报错ERROR (6534)?(DBMR 2490)

该错误是因JAVA7的libxml2.dll和DBMaster的libxml2.dll相冲突而引起的。为避免出现此错误,用户需更改与javaw.exe位于相同文件夹里的libxml2.dll的名称,或使用DBMaster新版本。此外,在2013年11月13日之后的版本中,该问题已修复。

 

版本: DBMaster 5.2.x/ DBMaker 5.3.x

产品: Bundle

平台: Windows

作者: finlay
更新时间:2016-06-17 03:55


如何避免在isCOBOL 2016R1版本中执行DCI程序时产生崩溃错误?(DBMR 2783)

用户在命令行中执行DCI程序时,产生如下错误。

>java.exe ISMIGRATE

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.iscobol.dci.Dci.dci__getenv(I[B[B)I

at com.iscobol.dci.Dci.dci__getenv(Native Method)

at com.iscobol.lib.DCI_GETENV.call(DCI_GETENV.java:43)

at com.iscobol.lib.DCI_GETENV.call(DCI_GETENV.java:24)

at com.iscobol.rts.Factory.call(Factory.java:3780)

at com.iscobol.rts.Factory.call(Factory.java:3689)

at ISMIGRATE.GET_DCI_CFG(ISMIGRATE.java:4382)

at ISMIGRATE.GUI(ISMIGRATE.java:2250)

at ISMIGRATE.MAIN(ISMIGRATE.java:2129)

at ISMIGRATE.perform(ISMIGRATE.java:1752)

at ISMIGRATE.call(ISMIGRATE.java:1736)

at ISMIGRATE.main(ISMIGRATE.java:43)

该问题是由isCOBOL2016R1和DCI不兼容引起的。为了修复MR 10307- “thin-client的iscobol多线程”问题,iscobol’s iscbol.jar和DBMaster的DCI库均已被修改,这导致DCI的JNI也发生了改变。

也就是说,isCOBOL2016R1必须使用2016版DCI库。在新的DCI压缩文件中,用户可找到dci_2016.dll和libdci_2016.so,并且需要将它们分别命名为dci.dll和libdci.so。

 

版本: DBMaster 5.4.x

产品: Norma/Bundle

平台: Windows/Linux

作者: finlay
更新时间:2016-06-17 03:55


DBMaster支持使用裸设备存储数据库日志或文件吗?(DBMR 2769)

DBMaster目前版本中,备份/恢复操作不能用于裸设备,因此,当用户需备份/恢复数据库时,请避免使用裸设备。此外,DBMaster目前在Linux平台上的一些行为已改变,因此以后DBMaster新版本将不再支持裸设备。

 

版本: DBMaster 5.3.x/DBMaster 5.4.x

产品: Norma/Bundle

平台: Linux

作者: finlay
更新时间:2016-06-17 03:56


为什么用户在Linux平台上启动数据库时会报错“dmserver.bin: /lib64/libc.so.6: version ´GLIBC_2.7' not found (required by /home/dbmaker/5.4/lib/so/libxml2.so.2)”?(DBMR 2769)

在32位Linux平台上,DBMaster使用的libxml2.so版本是libxml2.so.2.6.27,因此GLIBC的版本需求仍是2.3。

在64位Linux平台上,DBMaster 5.2使用的libxml2.so版本也是libxml2.so.2.6.27,相应地GLIBC版本需求也是2.3。然而,DBMaster 5.3和DBMaster 5.4使用的libxml2.so版本是libxml2.so.2.9.1。因此,从DBMaster 5.3开始,GLIBC的版本需求相应地从2.3更改为2.7。

用户可通过在Linux系统上设置“自动更新”或手动更新GLIBC版本来避免出现此类错误。

手动更新GLIBC版本请参考如下步骤:

一、从http://ftp.gnu.org/pub/gnu/glibc/glibc-2.7.tar.gz下载GLIBC源码。

二、mkdir /usr/local/glibc
> cd /usr/local/glibc
> tar zxvf glibc-2.7.tar.gz -C /usr/local/src/
> /usr/local/src/glibc-2.7/configure --prefix=/usr/
> make
> make install
三、使用“ldd –version”检查GLIBC版本。

 

版本: DBMaster 5.3.x/DBMaster 5.4.x

产品: Norma/Bundle

平台: Linux

作者: finlay
更新时间:2016-12-07 08:55


执行“perl Makefile.PL”为什么会报错“invalid top directory at /usr/lib/perl5/5.8.8/File/Find.pm line 592”?(DBMR2689)

原因是DBD源码太旧且DBD仅支持DBMaster 5.1以及之前版本。因此,用户想成功执行“perl Makefile.PL”可以先安装DBMaster 5.1或者手动修改DBD中的Makefile.PL文件(例如:如果用户当前使用的是DBMaster 5.4,则需要将Makefile.PL文件中的“my $DEFAULTVER = '5.1';”更改为“my $DEFAULTVER = '5.4';”)。

 

版本: DBMaster 5.3.x/DBMaster 5.4.x

产品: Norma/Bundle

平台: Linux

作者: finlay
更新时间:2016-06-17 03:57


2016

如何将16进制转换成字符或者整形数据 (DBMR2801)

你可以使用CAST函数将hex转换为char,用BINTOINT 函数将hex转换为integer 数据类型.此外,从2016/02/23之后提供的版本开始支持BINTOINT函数.

例子:

dmSQL> select cast('6162'x as char(2));

CAST('6162'X AS CHAR(2))

========================

ab                       

dmSQL> select cast('ab' as binary(2));

CAST('AB' AS BINARY(2))

=======================

6162                   

 

dmSQL>CREATE FUNCTION strtoint.BINTOINT(BINARY(8)) RETURNS BIGINT;

dmSQL>select bintoint('07DF'x);

 BINTOINT('07DF'X)  

====================

                2015

版本: 5.3.3, 5.4.1

Product: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:13


什么情况下需要使用 “set unload fileobj name”?

使用“set unload fileobj name”来支持load DB时不改变原来FILE OBJECT的顺序.

关于SYSTEM FILE OBJECT,系统默认为[set unload fileobj on],并且所有FILE OBJECT将会被unload到目前工作文件夹.

当将unload下来的DB,load到新DB时,所有SYSTEM FILE OBJECT将会被重新命名和排序,例如:

在没有unload之前的旧DB中,名字如下:

ZZ000000.txt

ZZ000002.txt

ZZ000006.txt

Load到新DB之后名字如下:

ZZ000000.txt

ZZ000001.txt

ZZ000002.txt

假如用户在程序中引用这些FO的名字(比如:一些web程序中的图片链接),并且在迁移到新DB时不想让这些SYSTEM FILE OBJECT重新排序,就可以使用[set unload fileobj name].

这时,包含FO文件的数据就会被unload下来,并且当load进新DB时,他们的命名和顺序将和在原来DB中的命名顺序一模一样.

ZZ000000.txt

ZZ000002.txt

ZZ000006.txt

注意: [set unload fileobj name] 功能只有在2015/4/20之后built的4.3.4, 5.x 中支持,所以请升级到支持这个功能的版本之后再使用这个功能.

版本: 4.3.4, 5.x (built after 2015/4/20)

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:18


为什么会出现日志满的问题,如何避免和处理?

(1) 日志文件太小

日志文件的默认大小是4M,如果这个问题是日志文件太小导致的,又可以通过下述步骤来增大日志文件。

A. 关闭数据库.
B. 增大DB_JNLSZ 或者增加日志文件 DB_JnFil, 然后在dmconfig.ini中设置   DB_SMODE=2以新日志模式启动。

C. 重启数据库。

(2) 存在长事务

  1. 将长事务分割成几个短事务。
  2. 如果设置autocommit off关闭自动提交,要及时执行提交操作 "commit"。

(3) 备份模式开启

当备份服务开启的时候,直到备份操作结束日志才能被释放,所以要及时的执行备份。

(4)处于表复制环境

  A. 我们测试发现在master端发生日志满是因为load数据库的时候创建触发器,解决方案是在load数据库的时候使用选项"column number" (默认1000) :

   dmSQL> load db from xxxxx 100;

  B. 如果日志满发生在slave端,导致的原应该是创建复制的时候使用了选项 "CLEAR and FLUSH", 可以通过在load数据库的时候关闭日志来避免日志满的发生,也就是在无日志模式下load数据库。

     dmSQL> set loaddb fast;

     dmSQL> load db from xxxxx 100;

     dmSQL> set loaddb safe;

版本: All versions

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:18


如何在SQL语句中使用sleep方法?

DBMaster 支持一个用户自定义函数sleep () 用来休眠等待。

For example:

dmSQL> create function to_date.sleep(int) returns int;

dmSQL> select sleep(5);//休眠5秒

版本: 5.3.x, 5.4.x

Product: Normal/Bundle

Platform: Windows/Linux

产品: Normal/Bundle

作者: Sandy
更新时间:2017-01-18 10:18


如何使用LoadExternalDB在线load DB、表和数据?

用户可以通过DSN直接使用LoadExternalDB 来将外部 DB load到本地 DB中.

假如设置了unload时的外部’连接字符串’, dmSQL将会在s0文件中打印出"set external db 'odbc connection string' "  

1. unload db1

Connect to db1 sysadm;

set unload external 'DSN=db1;UID=SYSADM;PWD=;';

unload db to db1;

2. db1.s0

set external db 'DSN=db1;UID=SYSADM;PWD=;';

create table SYSADM.T1 (

C1  INTEGER default null ,

C2  INTEGER default null )

in DEFTABLESPACE  lock mode row  fillfactor 100 ;

load external db from 'select * from SYSADM.T1' into SYSADM.T1;

3. 将数据load到目标DB:

Connect to db2 sysadm;

Load db from db1;  //commit_num is 1000 by default

OR

Load db from db1 100; //commit_num is 100

注意: 在向DB2 load数据时,请确定DB1处于启动状态,并且当DB中有FO时需要预先在DB2dmconfig.ini中设置DB_USRFO=1.

版本: 5.4.1

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:18


为什么有时Update Statistics后SYSTABLE中UPD_STS_TIME的值不变?

有几个原因会导致“update statistics”不会被执行或者执行之后UPD_STS_TIME的值不变,比如:在将DB从5.1移植到5.3之后,然后执行了update statistics 和 rebuild index,假如你再次执行update statistics,索引的统计信息将不会改变.

 

下面是我们列出会影响"update statistics"的行为:

-----------------

1. 新表并且从来没有执行过"update statistics".

2. 表的记录少于20个页.

3. 新增的记录多余两个页.

4. 上次执行"update statistics"超过了10天.

5. 假如对一个表执行"update statistics"是碰到以上1/2/3/4,这个表的索引的统计信息将会被改变.

我们支持了一个新的SQL语法来强行执行"update statistics",方法如下.

>update statistics all; //[sample=100 by default]

>update statistics all sample=60;

版本: 5.3.3, 5.4.1

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:17


为何需要重建主键,以及如何重建主键?

当遇到如下问题时,用户就应该同时考虑重建索引.

例如:

  1. 索引膨胀导致性能下降(IO and CUP 花销)
  2. 数据库崩溃倒是索引和PK损坏.

用户可以用如下的语法重建主键:

Rebuild index PRIMARYKEY for t1; //in default DEFTABLESPACE

Rebuild index PRIMARYKEY for t1 in ts1; //support change tablespace only from 5.4 versions

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:17


如何只针对部分表数据列进行加密?

可以通过加密用户自定义函数来对部分列进行加密。用法如下:

A. create function LIBCRYPT.AES_ENCRYPT(string,string) returns string;

  create function LIBCRYPT.AES_DECRYPT(string,string) returns string;

B. insert into tableXX(columnXX) values(AES_ENCRYPT(‘XXXXXX’, 'user_defined_key'));

 Or update tableXX set columnXX=AES_ENCRYPT(columnXX, 'user_defined_key');

C.  select AES_DECRYPT(column1, ‘user_defined_key’) from table1;

版本: 5.4.x

Product: Normal/Bundle

Platform: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:17


如何在LOG中只打印CONNECTION和DISCONNECTION的信息? (DBMR2835)

设置日志级别DB_LGSVR=4,5,6日志系统不仅可以记录连接和断开连接的信息还可以记录SQL命令,提交,回滚等错误信息与慢语句。

如果你只关系连接和断开连接的信息或者想让日志文件缓慢增长,可以在配置文件中设置DB_ LGSQL=0

DB_LGSRV=4

DB_LGSQL=0

注意: 在旧版中设置 DB_LGSRV=4DB_LGSQL=0 无法忽略SQL提交,回滚这些信息会导致日志很快的增长。

Version: 5.3.3, 5.4.1

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:17


为什么在查询系统表的时候偶尔会出现锁超时的错误? (DBMR2870)

当在并发环境中执行SQL语句的时候,例如:删除一张半的所有记录或者在DCI中通过"OUTPUT"删除后者创建表的时候,就会加系统X锁,这种情况下其他的连接就无法访问这张表了。这是正常的行为。

但是当你通过JDBA工具去查询某些系统表或者检查某些内容的时候,锁超时还是会发生,这是因为系统表不允许脏读。

如果你想在加了系统X锁的情况下通过JDBA工具去查询系统表或检查某些内容,你可以使用

“for browse” 选项像下面示例一样。

>select * from SYSTABLE for browse;

Or set DB_DBIND=1 in dmconfig.ini (需要重启数据库)

DB_DBIND=1 //系统表脏读的绑定

Or runtime set with

>call SETSYSTEMOPTION('DBIND', '1');

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:16


如何在load大DB时加快速度? (DBMR2919)

LOAD DB 支持两种模式, 安全模式和快速模式, 默认情况下是安全模式.

Set LOAD DB [safe | fast]

假如设置 LOAD DB to SAFE,DB在普通模式下运行,假如在load过程中发生错误,load的效用将会回滚到最后一次commit,并且将会在屏幕返回错误信息,并将其写入到log文件.

假如用户想提高load DB的速度, 用户可以设置快速模式.

但是当用户设置了LOAD DB fast, 用户需要注意下面这些问题:.

1. 在load的过程中确认备份模式已关闭.

DB_BMODE = 0;(default value: 0)

注意: DB_BMODE是服务器端参数,变更它的值之后需要重启数据库才能生效.

因为"set loaddb fast;" 只能在无日志模式下工作.

设置load fast意味着将打开无日志模式,此时如果备份模式如果是打开状态的话,DB将会返回 ERROR (1002),因为DBMaster不能在运行中转换备份模式.

dmSQL>set loaddb fast;

2 在无日志模式下,当load DB发生错误是,DB将会被关闭.

版本: All

产品: Normal/Bundle

平台: Windows/Linux

作者: Sandy
更新时间:2017-01-18 10:13


2020

为什么在执行 call getsystemoption('xxxxx',?)时不返回OPTION_VALUE值,而是要求输入值?

当用新版客户端去连旧版服务器执行 call getsystemoption(‘xxxxx’,?) 得到怪异的结果。应传回 OPTION_VALUE,但却得到要求输入值。这是因为客户端和服务器端新旧版本不一致而导致问题。请试着把客户端和服务器端版本更新到一致。

怪异的结果如下:

dmSQL> call getsystemoption('bksvr',?);
dmsql/Val>  

正确结果应像下例:

dmSQL> call getsystemoption('bksvr',?);
OPTION_VALUE                    : 0

Version: DBMaker 5.4.1 服务器端 + DBMaker 5.4.3 客户端
Product: Normal/Bundle
Platform: Windows

作者: Sandy
更新时间:2020-09-28 11:40


2017

为什么在从属数据库(slave DB)中以“ check db”容易发现错误? (DBMR2922)

如果您在从属端执行了“ check db”命令,则从属数据库将读取脏数据。 它导致主数据库和从属数据库之间的数据不一致。 我们建议您不要在从属端执行命令。 最好在主服务器端检查db。

Version: 5.2.2
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-09-29 11:39


如何制作重建所有索引的批次脚本档案? (DBMR2924)

输入以下SQL命令以检查并重建所有索引。 例如,有一个包含五个索引的数据库。

1.    检查原始索引的建立时间“ CREATE_TIME”。  

dmSQL> SELECT CREATE_TIME, TRIM(TABLE_OWNER) || '.' || TRIM(TABLE_NAME) as INDEX_NAME from SYSINDEX;

 

dmSQL> SELECT CREATE_TIME, TRIM(TABLE_OWNER) || '.' || TRIM(TABLE_NAME) as INDEX_NAME from SYSINDEX; CREATE_TIME                    INDEX_NAME

=================== ===================                                     

2020/01/31 14:55:02      SYSADM.T1

2020/01/31 14:55:13      SYSADM.T2

2020/01/31 14:56:23      SYSADM.T3

2020/01/31 14:57:34      SYSADM.T4

2020/01/31 14:58:45      SYSADM.T5

 

2.获取所有重建索引命令。  

dmSQL> SELECT 'REBUILD INDEX ' ||RTRIM(INDEX_NAME) || ' FOR ' || RTRIM(TABLE_OWNER) || '.' || RTRIM(TABLE_NAME) || ';' FROM SYSINDEX ORDER BY TABLE_OWNER,TABLE_NAME;

 

REBUILD INDEX IDX1 FOR SYSADM.T1;

REBUILD INDEX IDX2 FOR SYSADM.T2;

REBUILD INDEX IDX3 FOR SYSADM.T3;

REBUILD INDEX IDX4 FOR SYSADM.T4;

REBUILD INDEX IDX5 FOR SYSADM.T5;

 

3. 将这些重建命令复制到脚本档案中,然后运行它。

dmSQL> run c:\rebuild.scp;

 

4.再次执行步骤1。所有索引的“CREATE_TIME”已更新。  

dmSQL> SELECT CREATE_TIME, TRIM(TABLE_OWNER) || '.' || TRIM(TABLE_NAME) as INDEX_NAME from SYSINDEX;

 

CREATE_TIME                     INDEX_NAME

=================== ===================            

2020/01/31 16:14:40    SYSADM.T1                                              

2020/01/31 16:14:40   SYSADM.T2

2020/01/31 16:14:40   SYSADM.T3                                              

2020/01/31 16:14:40   SYSADM.T4                                              

2020/01/31 16:14:40   SYSADM.T5                                              

<p>Version: 5.2.2 <br />Product: Normal/Bundle<br />Platform: Windows/Linux</p>

作者: Sandy
更新时间:2020-09-29 13:56


为什么在powerpc上加载外部DB返回内存区段错误?

用于powerpc的unixODBC安装套件不包含libodbc.so。 您需要手动建立符号链接。 输入以下命令:

$ cd /usr/lib/powerpc64le-linux-gnu
$ ln -s libodbc.so.1.0.0 libodbc.so  

 

Version: 5.4.1
Product: Normal/Bundle
Platform: Linux ppc64 3.19.0-28.31

作者: Sandy
更新时间:2020-09-29 14:20


DCI与Acucobol v10兼容吗? (DBMR2939)

DBMaker 5.4.2或更高版本支持ACUCOBOL-GT10。使用者可以在Linux中连接dmacu90链接库。 请参考DCI_README.TXT中的设置步骤。 注意:请不要使用Acucobol v10之前的版本的链接库和c档案来建立runtime执行程序。

Version: 5.4.2
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-09-29 14:52


如何在单用户模式启动数据库进行维护? (DBMR2947)

您可以使用dmSQL或JDBA工具以单用户模式维护数据库。 请按照以下步骤启动数据库进行维护。 以数据库DBSAMPLE5为例。  

1.使用dmSQL工具

a. 终止数据库。
b. 运行dmSQL工具。
c. 启动数据库DBSAMPLE5。

dmSQL> start db DBSAMPLE5 sysadm;

d. 维护数据库。
e. 终止数据库。

dmSQL> terminate db;    

2.在Windows中使用JDBA工具
a. 终止数据库。
b. 打开dmconfig.ini,注释DB_SVADR和DB_PTNUM,然后将其保存。
c. 打开JDBA工具,并连数据库DBSAMPLE5。
d. 维护数据库。
e. 终止数据库。
f. 打开dmconfig.ini,取消注释DB_SVADR和DB_PTNUM,然后保存它。

Version: 5.4.1
Product: Normal/Bundle
Platform: Windows/Linux
 

作者: Sandy
更新时间:2020-09-29 15:14


如何避免AbstractMethodError:dbmaker.sql.JdbcOdbcConnection.isValid(I)Z? (DBMR2960)

此错误表明DBMaker JDBC驱动程序的版本已过时。 请更新驱动程序以支持JDBC中的isValid()方法。 在DBMaker 5.4.1之前,您必须在context.xml中设置validationQuery =“ select 1”。 我们从DBMaker 5.4.1修复了此错误。

Version: 5.4.1
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-09-29 15:46


如何在Windows10 x64为搭售(bundle)版注册OLE DB驱动程序? (DBMR2996)

要在Windows x64中安装搭售(bundle)版OLE DB驱动程序,您需要手动注册驱动程序。如果要注册32位驱动程序,请打开cmd并输入以下命令:

C:\> cd C:\dbmaker_bundle
C:\dbmaker_bundle> C:\Windows\SysWOW64\regsvr32.exe dmole52.dll

如果您要注册64位驱动程序,请输入以下命令:

C:\> cd C:\dbmaker_bundle
C:\dbmaker_bundle> C:\Windows\System32\regsvr32.exe dmole52.dll  

此外,在普通版和搭售(bundle)版之间注册OLE DB的方法不同。注册搭售(bundle)版版本的方法是 "Provider=DMOLE52B;Data Source=db_name;User Id=SYSADM;Password=;"。  

注意。 搭售(bundle)版5.2.3之前的DBMaker版本不包含dmole52.dll,您需要从5.2.3升级DBMaker版本。

Version: 5.2.3
Product: Normal/Bundle
Platform: Windows 10

作者: Sandy
更新时间:2020-09-29 15:55


DBMaker支持什么连接字符串来连接ODBC? (DBMR3000)

DBMaker支持以下连接字符串:

DRIVER:ODBC驱动程序版本。

DATABASE:数据库名称。

DSN:数据库来源名称。

UID:用户ID。

PWD:密码。

ERRLCODE:设置客户端的错误讯息字符集。

ERRLCODE:设置客户端的错误讯息字符集。

CLILCODE:在客户端设置语言代码。

SVADR:服务器地址。

PTNUM:通讯端口。

ATCMT:启用或禁用自动提交。

CTIMO:设置连接超时。

STRSZ:此关键词指示返回的字符串类型数据的长度,仅由用户自定义函数(UDF)使用。

STROP:此关键词指定在应用字符串串联运算符(||)之前是否删除空格。 DSCMT:此关键词指定在应用程序与数据库断开连接时是否提交交易。

Version: 5.4.2
Product: Normal/Bundle
Platform: Windows/Linux
 

作者: Sandy
更新时间:2020-09-29 16:17


如何使从数据库中的未提交记录回滚?

如果主数据库在未提交某些交易之前就终止了数据库,则这些未提交的记录已经存在于从数据库中,并且不会自动回滚。 您必须设置DB_SMODE = 1来启动,数据库就会自动回滚。

作者: Sandy
更新时间:2020-10-13 11:33


2018

如何将DBMaker与安卓客户端的应用程序连接? (DBMR2987)

您需要在外部classpath中设置dmjdbct3c.jar,然后在程序上更改驱动程序类别和URL。 加入以下代码让Android应用程序连接DBMaker。 

Class.forName("dbmaker.jdbc.ws.client.Driver");
Connection con = DriverManager.getConnection( "jdbc:dbmaker:type3://IP:port/db_name", "UID", "PWD");  

 

Version: DBMaker 5.4.2, Android Studio 3.5 with API-25
Product: Normal/Bundle
Platform: Windows

作者: Sandy
更新时间:2020-10-13 17:49


比较两个表的最快方法是什么? (DBMR3010)

“EXCEPT”运算符用于合并两个“SELECT”语句,并从第一个SELECT语句返回第二个SELECT语句未返回的列。 DBMaker不支持EXCEPT运算符。 因此,我们提供了一种替代解决方法。 但是,该命令仅比较两栏,而不能比较BLOB数据。  

 

该命令代替“表格t1,表格t2除外”(“table t1 except table t2”)。

 select * from t1 where not exists(select 0 from t2 where t1.c1 = t2.c1 and (t1.c2 = t2.c2 or (t1.c2 is null and t2.c2 is null)));  

 

该命令代替“表格t2,表格t1除外”(“table t2 except table t1”)

select * from t2 where not exists(select 0 from t1 where t1.c1 = t2.c1 and(t1.c2 = t2.c2 or (t1.c2 is null and t2.c2 is null)));  

 

例如,有两个表格,t1和t2。

Table t1  


C1              C2
======= =======
              1              1  
              2              2   
              3              3  

Table t2  


C1              C2
======= =======   
              1              1  
              2              2     
              4              4

 

执行第一个命令替换“ t1除了t2”(“t1 except t2”)。 您可以在t1中获得3,但不在t2中。

dmSQL> select * from t1 where not exists(select 0 from t2 where t1.c1 = t2.c1 and (t1.c2 = t2.c2 or (t1.c2 is null and t2.c2 is null)));  
 
C1              C2
======= =======
              3              3  

 

执行第二个命令替换“除了t1之外的t2”(“t2 except t1”)。您可以在t2中获得4,但不在t1中”  

dmSQL> select * from t2 where not exists(select 0 from t1 where t1.c1 = t2.c1 and(t1.c2 = t2.c2 or (t1.c2 is null and t2.c2 is null)));
 
C1              C2 
======= =======
              4              4  
 

Version: DBMaker 5.4.2
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-10-13 17:46


是否可以在DBMaker中建立物化视图?(DBMR3096)  

物化视图是原始基表的实体复本。 与视图不同,物化视图是预先计算的,并存储在磁盘上,并且每次使用时都不会更新。 DBMaker不支持物化视图,因此我们为每种解决方法给出一些假设。  

1.执行物化视图:“完全刷新(refresh complete)” +“在提交时(on commit)”

(a)尝试建立一个临时/永久表(mv1),如果表存在,则执行(b)。

(b)如视图定义,使用“ select into”将数据新增于mv1。

(c)创建一个删除所有mv1记录的sp(mvsp1),然后执行(b)。

(d)在表A或表B上的 新增/更新/删除 触发之后,呼叫mvsp1。  

2. 执行物化视图:“完全刷新(refresh complete)” +“从下一次开始(start with・next)”

(a)尝试建立一个临时/永久表(mv1)。

(b)如同视图定义,使用“ select into”将数据新增于mv1。

(c)创建一个删除所有mv1记录的sp(mvsp1),然后执行(b)。

(d)在排程服务上建立任务以执行呼叫mvsp1。  

3. 执行物化视图:“完全刷新(refresh complete)” +“根据需要(on demand)”

(a)尝试创建一个临时/永久表(mv1)。

(b)如同视图定义,使用“ select into”将数据新增于mv1。

(c)创建一个删除所有mv1记录的sp(mvsp1),然后执行(b)。

(d)根据需要呼叫mvsp1。    

4. 执行物化视图:“不进行刷新(never refresh)” +“根据需要(on demand)” 与3相同,也许使用者想要这个。  

5. 执行物化视图:“快速刷新(refresh fast)/ 强制刷新(refresh force)” +“在提交时(on commit)”(无法更新PK)

(a)尝试创建一个临时/永久表(mv1)。

(b)如同视图定义,使用“ select into” 将数据新增于mv1。

(c)创建一个sp(mvsp1)以检查 新增/更新/删除 操作以及 新增/更新/删除mv1。 (不容易)

(d)在表A或表B上 新增/更新/删除的触发之后,呼叫mvsp1。  

6. 执行物化视图:“快速刷新(refresh fast)/强制刷新(refresh force)” +“从下一次开始(start with・next)”(PK无法更新)

(a)尝试创建一个临时/永久表(mv1)。

(b)如同视图定义,使用“ select into” 将数据新增于mv1。

(c)创建一个sp(mvsp1)以检查 新增/更新/删除 操作以及新增/更新/删除mv1。 (不容易)

(d)在排程服务上建立任务以执行呼叫mvsp1。  

7. 执行物化视图:“快速刷新(refresh fast)/ 强制刷新(refresh force)” +“根据需要”(on demand)”(无法更新PK)

(a)尝试创建一个临时/永久表(mv1)。

(b)如同视图定义,使用“ select into” 将数据新增于mv1。

(c)创建一个sp(mvsp1)以检查 新增/更新/删除操作以及 新增/更新/删除mv1。 (不容易)

(d)根据需要呼叫mvsp1。

作者: Sandy
更新时间:2020-10-13 15:09


什么时候需要设置DB_UPGDB = 0? (DBMR3111)

如果您在DBMaker 5.4.3之前创建数据库复制,并且主数据库和从数据库的版本不同,则可能会导致某些不兼容的问题。 我们建议您在主数据库和从数据库之间更新相同的版本,或者从端更新到DBMaker 5.4.3。  

在DBMaker 5.4.3中,我们在dmconfig.ini中加入了一个新关键词“ DB_UPGDB”。 设置DB_UPGDB 1或0当您更新数据库版本时是否更新数据库版本。 默认值为1。如果主数据库的版本比从数据库的版本旧,则可以将从数据库的DB_UPGDB设置为0。 让主数据库和从数据库的版本相同。 将DB_UPGDB设置为0后,您必须将主数据库档案重新复制到从数据库。  

Version: DBMaker 5.4.2
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-10-13 15:29


如何同时连接到具有不同LCODE的多个数据库? (DBMR3134)

从DBMaker 5.4.3,我们解决了该问题。 您可以同时使用不同的LCODE连接到多个数据库。  

这是DBMaker 5.4.3之前的限制。 DBMaker无法同时连接到具有不同LCODE设置的多个数据库。 在关闭第一个连接后,您可以连接另一个数据库。 如果您无法关闭第一个连接,则我们发现一种解决方法如下步骤:  

1.在不同目录中安装另一个DBMaker ODBC驱动程序。
2.为第二个数据库创建DSN。
3.在JAVA代码中使用Sun JDBC驱动程序(1.7或更低版本的JDK)来连接第二个DB。
4.从JDK 1.8开始,将不支持Sun JDBC。 因此,从DBMaker 5.4.2开始,我们添加了新的JDBC类型(dbmaker-odbc)来替代Sun JDBC以连接其他数据库以进行异质异步表格复制。 

对于此问题,我们也可以使用这种新的JDBC类型。

Class.forName("dbmaker.sql.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:dbmaker:DB_NAME","UID","PWD");

 

Version: DBMaker 5.4.2
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-10-13 15:39


如何透过Microsoft SQL连结服务器连接DBMaker? (DBMR3153)  

有两个提供程序可以使用让MS连接服务器来连接DBMaker。 它们是用于ODBC驱动程序的Microsoft OLE DB提供程序和用于DBMaker 5.4.3的OLE DB提供程序。 请按照以下步骤连接DBMaker。  

    1. Microsoft OLE DB Provider提供程序给ODBC驱动程序。
      a. 打开ODBC数据源管理员。将数据库加入到系统数据源名称。
      b. 打开Microsoft SQL Server Management Studio,打开对象总管,点击服务器对象,右键单击连接的服务器,然后点击新建连接的服务器。
      c. 输入连接的服务器名称,选择提供程序Microsoft OLE DB Provider 给ODBC Drivers,输入数据库名称作为数据源。
      d. 从DBMaker启动数据库服务器。
      e. 点击Ctrl + N打开新查询,然后输入SQL查询。
    2. OLE DB Provider提供程序给DBMaker 5.4.3
      a. 打开Microsoft SQL Server Management Studio,打开对象总管,点击连接的服务器,点击提供程序,双击“DMOLE54”,然后勾选“允许进程内AllowInProcess”。
      b. 打开对象总管,点击服务器对象,右键点击连接的服务器,然后点击新建连接的服务器。
      c. 输入连接的服务器名称,为DBMaker 5.4.3选择提供程序OLE DB Provider,输入数据库名称,数据源和数据源连接字符串。
      d. 从DBMaker启动数据库服务器。
      e. 点击Ctrl + N打开新查询,然后输入SQL查询。

 

Version: DBMaker 5.4.3, SQL Server 2016, SQL Server Management Studio 18
Product: Normal/Bundle
Platform: Windows

作者: Sandy
更新时间:2020-10-13 16:43


如何将JDBC type3安装为Windows服务? (DBMR3162)

1.将附加的JettyService.zip(3个档案)解压缩到dbmaker \ 5.4 \ jetty中   
   a. install-service.bat    
   b. JettyService.exe    
   c. bin \ JettyService.exe  

2.以管理员身份运行cmd    
   > cd dbmaker \ 5.4 \ jetty    
   > install-service.bat   
 注意:如有必要,您可以编辑install-service.bat。  

3.> JettyService.exe    
  使用GUI设置服务=>“ DMJDBC Type3服务”

作者: Sandy
更新时间:2020-10-13 17:38


NT服务为什么不写在网络驱动器上? (DBMR3177)  

如果收到错误(11213):档案或目录不存在或错误(11206):无法创建/打开档案,此问题是由Windows NT服务的限制引起的。 在DBMaker中很难修复它。 使用dmservice不能使用“联机网络驱动器机”。 请使用双反斜杠(\\)设置DB_BKDIR目录。

例如,设置DB_BKDIR = \\ 192.168.1.1 \ backup。

作者: Sandy
更新时间:2020-10-13 17:35


2019

如何在SQL预存程序中批注代码? (DBMR3183)  

您可以使用这些符号“/ * * /”,“//”,“#”和“--”来批注代码。

使用符号“/ * * /”来批注在符号内的代码。

使用符号“//”,“#”和“--”来批注符号后的行。

作者: Sandy
更新时间:2020-10-13 17:51


如何从完全备份还原具有另一个表名的表? (DBMR3188)

要从完全备份中支持还原表格使用其他名称并不容易。 也许我们需要支持更多的载出(unload)语法来支持它。 这里有使用SQL命令而不用完全备份的替代解决方法。  

1.预先将表载出到档案中。

dmSQL> unload table from table_name to file_name;

2.从档案载入表。

dmSQL> load table from file_name;  

3.如果要重新命名表格,请键入以下命令。

dmSQL> alter table rename table_name to new_table_name;  

 

我们提供了另一个解决方法。 Dmrestoretb是可以以完全备份还原表格的工具。 从5.4.3版开始,我们添加了一项新功能来还原有目标名称的表格。 如果您要了解dmrestoretb的详细用法,请打开cmd或终端机(terminal),然后到dbmaker/5.4/bin目录,然后键入dmrestoretb。

输入以下命令将table_name还原为target_name。

> dmrestoretb db_name table_name -t target_table  

Version: 5.4.3
Product: Normal/Bundle
Platform: Windows/Linux  

作者: Sandy
更新时间:2020-10-13 18:03


如何通过查询获取所有索引字段? (DBMR3196)

在DBMaker 5.4.3中,我们添加了一个预存程序命令“showindex”。 输入以下命令,即可获取索引字段。  

dmSQL> call showindex(owner_name, table_name);  

这是一个例子。 数据库中有一个表t1。 输入预存程序命令“call showindex”,即可获取所有的索引字段。

dmSQL> call showindex(‘sysadm’, ‘t1’);

TABLE_OWNER TABLE_NAME NON_UNIQUE INDEX_NAME TYPE ORDINAL_POSITOIN
=========== ========== ========== ========== ==== ================
SYSADM            T1                                          0  PRIMARY*              3                                       1
SYSADM            T1                                          1   IDX1                       3                                       1
SYSADM            T1                                          1  IDX2                        3                                       1
SYSADM            T1                                          1  IDX3                        3                                       1
SYSADM            T1                                          1  IDX3                        3                                       2

COLUMN_NAME ASC_OR_DESC CARDINALITY PAGES FILTER_CONDITION FOREIGN_KEY
=========== =========== =========== ===== ================ ===========
ID                        A                            NULL               -1           NULL                                    0
ID                        A                            NULL               -1           id > 2                                   0
NAME                A                            NULL               -1            name like '%*                        0
ID                        A                            NULL               -1           id < 3 and n*                         0
NAME                 A                            NULL               -1           id < 3 and n*                         0

Version: DBMaker 5.4.3
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2020-12-02 10:23


如何通过查询获取表格纲要? (DBMR3207)

该内容正被修订,不能显示.

作者: Sandy
更新时间:2021-01-29 17:14


如何避免在日志已满的情况下缩小数据库? (DBMR3233)

收缩数据库可以回滚,这意味着“收缩”操作需要日志档案,并且所需大小应为压缩数据和BLOB的两倍。 如果日志容量不足,可以通过关闭日志来缩小数据库。 以单用户模式打开dmsqls。 在执行以下命令之前,请备份数据库。

dmSQL> start db db_name sysadm; dmSQL> set journal off;
dmSQL> shrink tablespace ts_name compressonly;
dmSQL> set journal on;

Version: 5.4.3
Product: Normal/Bundle
Platform: Windows/Linux

作者: Sandy
更新时间:2021-03-10 15:47