sql server 与 informix的区别

Informix环境

数据库对象

 

Informix

列数

2,767

行数

32,767字节

最大行数

不限(只要表容量保持在64 GB以内)

二进制大对象(Blob)型存储

无法存储在表或二进制大对象空间内

群集化表索引

每表1个(按索引组织的表)

非群集化表索引

77个(假设表内存在一个范围,每个键只有一个组成部分)

单个索引中的最大列数

16

索引中的最大列值长度

255字节

表命名规则

[[database.]owner.]table_name[@Server]

视图命名规则

[[database.]owner.]table_name[@Server]

索引命名规则

[[database.]owner.]table_name[@Server]

 

数据库对象标识符

Informix

标识符名称最长可达128字节。

标识符名称可以字母字符或下划线开始,并包含文字数字式字符、下划线(_)或美元符号($)。

数据库名称必须在Informix实例中具备唯一性(除在ANSI模式下为owner.database之外)

标识符名称必须在用户账户(数据库)范围内具备唯一性。

列名必须在表和视图范围内具备唯一性。

索引名称必须在数据库范围内具备唯一性。

 

限定表名称

当您对存在于Informix用户账户中的表进行访问时,只需利用不受限制的名称即可将表选中。对其它Informix数据库中的表进行访问需要为表名冠以数据库名,并在两者之间用圆点(.)分隔。Informix的相似限定方法提供了更大的位置透明度。Informix还允许利用表所有者对表加以识别。

 

访问存在于之中的表

Informix

用户账户

SELECT * FROM STUDENT

其它架构

SELECT * FROM STUDENT_ADMIN.STUDENT

 

数据类型

1.与sql server的比较

Informix

Microsoft SQL Server

CHAR

建议使用char型变量。由于char型数据列使用固定存储长度,因此,它们接受访问的速度在某种意义上高于varchar型数据列。

VARCHAR 与TEXT, NTEXT与 IMAGE

varchar或text。(如果Informix列中的数据值长度小于等于8000字节,就应使用varchar型变量;否则,必须使用text型变量。) NTEXT、TEXT和IMAGE可在单个赋值内最多保存2 GB数据。 而NTEXT则是TEXT类型的Unicode版本

NCHAR NVARCHAR

CHAR和VARCHAR的Unicode字符数据版本

BLOB

varbinary或image型变量。(如果Informix列中的数据值长度小于等于8000字节,就应使用varbinary型变量;否则,必须使用image型变量。)

INTEGER SMALLINT TINYINT BIGINT FLOAT SMALLFLOAT MONEY SMALLMONEY DECIMAL NUMERIC

如果整数值域在1到255之间,应使用tinyint型变量。 如果整数值域在-32768到32767之间,应使用smallint型变量。 如果整数值域在-2,147,483,647到2,147,483,647之间,应使用int型变量。 如果您需要使用浮点型数字,请使用numeric型变量(具有精度和刻度)。 说明:不要使用floatreal型变量,因为可能出现四舍五入的情况(Informix的INTEGER型变量和SQL Server的numeric型变量均不执行四舍五入运算)。 money型变量值域在-922,337,203,685,477.5808到+922,337,203,685,477.5807之间。 而smallmoney型变量值域则在-214,748.3648到+214,748.3647之间。

BINARY, VARBINARY

二进制数据既可具有固定长度(binary),又能具有可变长度(varbinary) binary型变量值域为1到8000,存储容量为n+4字节 varBinary为可变长度二进制变量,存储容量为数据长度+4字节。

DATE DATETIME SMALLDATETIME

datetime. smalldatetime型变量可显示的日期范围在1900年1月1日到2079年6月6日之间

BIT

取值为1、0或NULL的整数型变量

ROWID SERIAL

使用标识列数据类型。

USER

USER

 

 

 

常用语气

1生成表

CREATE TABLE table_name ( {col_name column_properties [default_expression] [constraint [constraint [...constraint]]]| [[,] constraint]} [[,] {next_col_name | next_constraint}...] ) [Informix Specific Data Storage Parameters]

Informix数据库对象名既可区分大小写,又可不区分大小写(设定DELIMIDENT环境变量,并用双引号将对象名括起来)。

2生成临时表

SELECT * INTO TEMP STUDENTBACKUP FROM STUDENT [WITH NO LOG]

3创建视图

CREATE VIEW view_name [(column_name [, column_name]...)] AS select_statement [WITH CHECK OPTION]

4索引

CREATE [UNIQUE | DISTINCT] [CLUSTER] INDEX index_name ON table_name (column_name [, column_name]...) [ASC | DESC] [FILLFACTOR n] [IN tablespace_name] DROP INDEX ABC;

5对象级权限

GRANT {ALL [PRIVILEGES][column_list] | permission_list [column_list]} ON {table_name [(column_list)] | view_name [(column_list)] | synonym name [(column_list)] | stored_procedure_name} TO {PUBLIC | name_list | role_name } [WITH GRANT OPTION] [AS grantor] REVOKE {ALL [PRIVLEGES]} ON {table | view | synonym } FROM { user | user list | role } [CASCADE | RESTRICT]

 

6主键与唯一列

CREATE TABLE DEPT (DEPT VARCHAR(4) NOT NULL, DNAME VARCHAR(30) NOT NULL, PRIMARY KEY (DEPT) CONSTRAINT DEPT_DEPT_PK, UNIQUE (DNAME) CONSTRAINT DEPT_DNAME_UNIQUE) ) EXTENT SIZE 32 NEXT SIZE 32

 

7存储过程

CREATE PROCEDURE procedure [(argument datatype [, argument datatype)] block END PROCEDURE OR CREATE FUNCTION function [(argument datatype [, argument datatype)] RETURNING datatype; block END FUNCTION

 

 

8触发器

描述

Informix

每个表的触发器数量

不限

是否在INSERT、UPDATE和DELETE语句前执行触发器

是否在INSERT、UPDATE和DELETE语句后执行触发器

是否不执行INSERT、UPDATE和DELETE语句而执行触发器

是否允许嵌套触发器

是否存在语句级触发器

是否存在行级触发器

是否在执行前检查约束

在日志功能被激活的情况下,约束条件将延迟到触发器执行完毕 在日志功能未被激活的情况下,约束将不会延迟

引用UPDATE或DELETE触发器中的原有或先前值

用户定义

引用INSERT触发器中的新数值

用户定义

禁用触发器

SET TRIGGER trigger DISABLED

CREATE TRIGGER TRACK_GRADES [UPDATE OF SSN ON GRADE | UPDATE OF CCODE ON GRADE | UPDATE OF GRADE ON GRADE | INSERT ON GRADE | DELETE ON GRADE] REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW (INSERT INTO GRADE_HISTORY( TABLE_USER, ACTION_DATE, OLD_SSN, OLD_CCODE, OLD_GRADE, NEW_SSN, NEW_CCODE, NEW_GRADE) VALUES (USER, CURRENT, OLD.SSN, OLD.CCODE, OLD.GRADE, NEW.SSN, NEW.CCODE, NEW.GRADE), );

 

1. 以显性方式请求表级锁定

功能

Informix

锁定整个表——允许其他人对表进行读取,但防止他们对其进行更新。锁定状态将缺省持续到语句执行完毕。

LOCK TABLE…IN SHARE MODE

将表锁定至事务处理完成

?

排它锁——防止其他人对表执行读取或更新操作,并将这种状态保持到指令或事务处理完成

LOCK TABLE…IN EXCLUSIVE MODE

设定语句等待解锁的毫秒数。

SET LOCK MODE TO [WAIT seconds | NOT WAIT]

 

 

 

 

 

SQL语言支持

1 SELECT语句

Informix

SELECT [ALL | DISTINCT] [optimizer directives] select_list [FROM {table_name | view_name | select_statement}] [WHERE clause] [GROUP BY group_by_expression] [HAVING search_condition] [{UNION | UNION ALL } SELECT …] [ORDER BY clause] [FOR UPDATE { OF column } | FOR READ ONLY] [INTO {TEMP | SCRATCH} table_name]

 

2 INSERT语句

Informix

INSERT INTO {table_name | view_name } [(column_list)] VALUES {values_list | select_statement}

 

 

3 UPDAYTE语气

 

UPDATE [optimizer directives] {table_name | view_name | synonym_name } SET [column_name(s) = {constant_value | expression | select_statement | column_list | variable_list] [ {where_statement} | {WHERE CURRENT OF cursor_id}]

UPDATE语句中使用子查询

UPDATE STUDENT_ADMIN.STUDENT S SET TUITION_TOTAL = 1500 WHERE SSN IN (SELECT SSN FROM GRADE G WHERE G.SSN = S.SSN AND G.CCODE = '1234')

4 DELETE语句

Informix

DELETE [optimizer directives] [FROM] {table_name | view_name | synonym_name} [ {WHERE clause} | { WHERE CURRENT OF cursor_id} ]

 

5 联接子句

Informix

SELECT S.SSN AS SSN, FNAME, LNAME FROM STUDENT S, OUTER CLASS C, OUTER GRADE G WHERE S.SSN = G.SSN AND G.CCODE = C.CCODE

 

6 将SELECT语句用作表名

Informix

SELECT SSN, LNAME, FNAME, TUITION_PAID, SUM_PAID FROM STUDENT, (SELECT SUM(TUITION_PAID) SUM_PAID FROM STUDENT)

 

 

 

 

函数

1数字/数学函数

函数

Informix

绝对值

ABS

反余弦

ACOS

反正弦

ASIN

n的反正切

ATAN

n和m的反正切

ATAN2

余弦

COS

指数值

EXP

十六进制值

HEX

自然对数

LOGN

10的对数

LOG10

取模(余数)

MOD

求幂

POW

求根

ROOT

四舍五入

ROUND

数字符号

正弦

SIN

平方根

SQRT

正切

TAN

舍位

TRUNC

 

 

 

2字符函数

Informix

将字符转换成小写形式(LOWER)

LOWER

将字符转换成大写形式(LOWER)

UPPER

填充字符串左侧

LPAD

删除前导空格

TRIM

删除尾部空格

TRIM

多次重复字符串

RPAD

重复空格的字符串

RPAD

取子串

SUBSTR SUBSTRING

字符替换

REPLACE

将字串中每个单词的首写字母转换成大写形式

INITCAP

字符串长度

LENGTH CHAR_LENGTH CHARACTER_LENGTH

包括空格在内的字符列字节数

OCTET_LENGTH

 

3日期函数

函数

Informix

日期添加

date column +/- INTERVAL(value) 或 date column +/- DATETIME(value) 或 date column +/- value UNITS datetime unit

日期差距

date column +/- DATETIME(value) 或 date column +/- DATE(value)

当前日期和时间

CURRENT TODAY

日期的字符串表示形式

DATETIME(value)

日期的整数表示形式

日期的四舍五入

DATETIME(value) datetime unit TO datetime unit

日期截断

DATETIME(value) datetime unit TO datetime unit

将字符串转变为日期

DATETIME(value) 或 DATE(value)

将空值转换成日期

 

4转换函数

函数

Informix

其他

从数字型到字符型

隐含

CONVERT

从字符型到数字型

隐含(在未执行计算的情况下报错)

CONVERT

从日期型到字符型

隐含

CONVERT

从字符型到日期型

隐含(在未执行计算的情况下报错)

CONVERT

从十六进制到二进制

CONVERT

从二进制到十六进制

CONVERT

 

 

5其它行级函数

函数

Informix

返回第一个非空表达式

DECODE

如果exp1 = exp2,则返回空值

DECODE

用户登录ID编号

用户登录名

USER

用户数据库ID编号

用户数据库名

USER

当前用户

USER

 

6聚合函数

函数

Informix

平均值

AVG

计数

COUNT

最大值

MAX

最小值

MIN

标准差

STDDEV

求和

SUM

方差

VARIANCE

全距

RANGE

 

 

 

 

 

7条件检验

Informix

DECODE (test_value, expression1, value1 [[,expression2, value2] […]] [,default_value] ) CASE test_value WHEN expression1 THEN value1 [[WHEN expression2 THEN value2] [...]] [ELSE default_value] END CREATE VIEW STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(DECODE(grade ,'A', 4 ,'A+', 4.3 ,'A-', 3.7 ,'B', 3 ,'B+', 3.3 ,'B-', 2.7 ,'C', 2 ,'C+', 2.3 ,'C-', 1.7 ,'D', 1 ,'D+', 1.3 ,'D-', 0.7 ,0)),2) FROM GRADE GROUP BY SSN 或 CREATE VIEW STUDENT_GPA (SSN, GPA) AS SELECT SSN, ROUND(AVG(CASE grade WHEN 'A' THEN 4 WHEN 'A+' THEN 4.3 WHEN 'A-' THEN 3.7 WHEN 'B' THEN 3 WHEN 'B+' THEN 3.3 WHEN 'B-' THEN 2.7 WHEN 'C' THEN 2 WHEN 'C+' THEN 2.3 WHEN 'C-' THEN 1.7 WHEN 'D' THEN 1 WHEN 'D+' THEN 1.3 WHEN 'D-' THEN 0.7 ELSE 0 END),2) FROM GRADE GROUP BY SSN

 

 

8将数值转换为不同数据类型

转换方式

Informix

从字符型到数字型

CAST('10' AS number) '10'::number

从数字型到字符型

CAST(10 as char) 10::char

从字符型到日期型

CAST('97-JUL-04' AS datetime) '97-JUL-04'::datetime CASE('07-04-97' AS date) '07-04-97'::date

从日期型到字符型

CAST(CURRENT AS char) CURRENT::char

从十六进制到二进制

从二进制到十六进制

 

 

9用户定义函数

Informix

SELECT ssn, fname, lname, tuition_paid, tuition_paid/get_sum_major(major) as percent_major FROM student

CREATE FUNCTION get_sum_major (inmajor varchar) RETURN NUMBER AS sum_paid number; BEGIN SELECT sum(tuition_paid) into sum_paid FROM student WHERE major = inmajor; RETURN(sum_paid); END get_sum_major;

 

 

10比较运算符

Operator

Informix

等于

(=)

大于

(>)

小于

(<)

大于等于

(>=)

小于等于

(<=)

不等于

(!=,<>,^=)

不大于,不小于

属于集合成员

IN

不属于集合成员

NOT IN

集合中的任意值

ANY,SOME

引用集合中的所有值

!= ALL,<> ALL,< ALL,> ALL,<= ALL,>= ALL

样式相似

LIKE

样式不相似

NOT LIKE

x和y之间的值

BETWEEN x AND y

x和y之间的值

NOT BETWEEN

数值存在

EXISTS

数值不存在

NOT EXISTS

数值为空或非空

IS NULL, IS NOT NULL

 

 

 

11模式匹配

Informix

其它

SELECT * FROM STUDENT WHERE LNAME MATCHES '[ABC]?'

SELECT * FROM STUDENT_ADMIN.STUDENT WHERE LNAME LIKE '[ABC]%'

 

12字符串连接

Informix

其它

SELECT FNAME||' '||LNAME AS NAME FROM STUDENT

SELECT FNAME +' '+ LNAME AS NAME FROM STUDENT_ADMIN.STUDENT

 

13关键字

语句

Informix SPL

声明变量

DEFINE DEFINE GLOBAL <variable> DEFINE GLOBAL <variable> DEFAULT <value>

语句块

BEGIN...END;

有条件的处理

IF…THEN, ELIF…THEN, ELSE END IF;

无条件退出

RETURN

无条件退出到紧随当前程序块的语句

EXIT FOR EXIT FOREACH EXIT WHILE

重新开始WHILE循环

CONTINUE

等候指定间隔

无(dbms_lock.sleep)

循环控制

WHILE <condition> END WHILE

FOR <condition> … END FOR;

程序注释

, --

打印输出

报告程序错误

RAISE EXCEPTION

执行程序

EXECUTE

语句终止符

分号(;)

 

 

 

14声明变量

Informix

DEFINE VSSN CHAR(9); VFNAME VARCHAR(12); VLNAME VARCHAR(20); VBIRTH_DATE DATE; VLOAN_AMOUNT NUMBER(12,2);

 

 

15为变量赋值

Informix

其它

LET variable = value

SET @variable = value

从单一行中选取列数值的SELECT...INTO语法

指派文字值、涉及其它本地变量之表达式或单一行中列数值的SELECT @var=<expression> [FROM…]语法

FETCH…INTO语法

下面提供一些语法示例。

DECLARE VSSN CHAR(9); DEFINE VFNAME VARCHAR(12); DEFINE VLNAME VARCHAR(20); BEGIN LET VSSN = '123448887'; SELECT FNAME, LNAME INTO VFNAME, VLNAME FROM STUDENTS WHERE SSN=VSSN; END;

 

 

 

16数据类型映射

Informix数据类型

ODBC SQL数据类型

BYTE

SQL_LONGVARBINARY

CHAR

SQL_CHAR

DATE

SQL_TIMESTAMP

DATETIME YEAR TO FRACTION(F)

SQL_TYPE_TIMESTAMP

DATETIME YEAR TO DAY

SQL_TYPE_DATE

DATETIME HOUR TO SECOND

SQL_TYPE_TIME

DECIMAL

SQL_DECIMAL

FLOAT

SQL_DOUBLE

INTERVAL YEAR(P) TO YEAR

SQL_INTERVAL_YEAR

INTERVAL YEAR(P) TO MONTH

SQL_INTERVAL_YEAR_TO_MONTH

INTERVAL MONTH(P) TO MONTH

SQL_INTERVAL_MONTH

INTERVAL DAY(P) TO DAY

SQL_INTERVAL_DAY

INTERVAL DAY(P) TO HOUR

SQL_INTERVAL_DAY_TO_HOUR

INTERVAL DAY(P) TO MINUTE

SQL_INTERVAL_DAY_TO_MINUTE

INTERVAL DAY(P) TO SECOND

SQL_INTERVAL_DAY_TO_SECOND

INTERVAL DAY(P) TO FRACTION(F)

SQL_INTERVAL_DAY_TO_SECOND

INTERVAL HOUR(P) TO HOUR

SQL_INTERVAL_HOUR

INTERVAL HOUR(P) TO MINUTE

SQL_INTERVAL_HOUR_TO_MINUTE

INTERVAL HOUR(P) TO SECOND

SQL_INTERVAL_HOUR_TO_SECOND

INTERVAL HOUR(P) TO FRACTION(F)

SQL_INTERVAL_HOUR_TO_SECOND

INTERVAL MINUTE(P) TO MINUTE

SQL_INTERVAL_MINUTE

INTERVAL MINUTE(P) TO SECOND

SQL_INTERVAL_MINUTE_TO_SECOND

INTERVAL MINUTE(P) TO FRACTION(F)

SQL_INTERVAL_MINUTE_TO_SECOND

INTERVAL SECOND(P) TO SECOND

SQL_INTERVAL_SECOND

INTERVAL SECOND(P) TO FRACTION(F)

SQL_INTERVAL_SECOND

INTERVAL FRACTION TO FRACTION(F)

SQL_VARCHAR

MONEY

SQL_DECIMAL

SERIAL

SQL_INTEGER

SMALLFLOAT

SQL_REAL

SMALLINT

SQL_SMALLINT

TEXT

SQL_LONGVARCHAR

VARCHAR

SQL_VARCHAR

 

 

17外部联接

ODBC Extended SQL and SQL-92

Informix

Microsoft SQL Server

SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM {oj STUDENT LEFT OUTER JOIN GRADE ON STUDENT.SSN = GRADE.SSN}

SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM STUDENT, OUTER GRADE WHERE STUDENT.SSN = GRADE.SSN

SELECT STUDENT.SSN, FNAME, LNAME, CCODE, GRADE FROM STUDENT LEFT OUTER JOIN GRADE ON STUDENT

 

 

18日期、时间与时间戳数值

SQL

Informix

Microsoft SQL Server

SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < {D '1970-07-04'}

SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < '1970-07-04'

SELECT SSN, FNAME, LNAME, BIRTH_DATE FROM STUDENT WHERE BIRTH_DATE < '1970

 

 

19调用存储过程

Generic ODBC Extended SQL

Informix

Microsoft SQL Server

{?=} call procedure_name[(parameter(s))]} SQLExecDirect(hstmt1,(SQLCHAR *)"{? = call owner.procedure(?)}", SQL_NTS);

SQLExecDirect(hstmt1, (SQLCHAR*)"{? = call STUDENT_ADMIN.P1. SHOW_RELUCTANT _STUDENTS(?)}", SQL_NTS);

SQLExecDirect(hstmt1, (SQLCHAR*)"{? = call STUDENT_ADMIN. SHOW_RELUCTANT _STUDENTS}", SQL_NTS);

 

 

 

数据库维护

1数据库查询用户的建立

 银行Informix_on_line数据库由于存储了储户的大量重要信息,为了数据库的安全性必需要对数据的操作有严格的规定,如进入on_line数据库要履行严格的手续,这在某些时候又给查找问题带来不便,因此有必要专门建立一个动态查询用户,该用户仅有对数据库的可读权限。

  具体做法是:

  1.建立查询用户,该查询用户应具有数据库使用的环境

 

  2.将查询用户与数据库作连接(work用户为例)

  ln-s/homel/work/homel/read(将查询用户read与数据库用户作连接);

 

  3.由work用户使用数据库,将connect权限赋予read用户

  grant connect to read;

 

  4.对数据库中每一张表放select权给read用户

  grant select on abc to read.(将select权限赋给read用户)

 

  这样,以read用户注册,对数据库拥有了可读操作,给查找问题等带来方便。

 

2数据库一致性检查

 a.以informix登录

  b.将数据库状态置为off_line

    onmode-ky

   用onstat-检查数据库状态为off_line

  c.将数据库状态置为单用户模式

  onmode -s

  用onstat-检查数据库状态为quiesent

  d.检查数据库保留页状态

  oncheck-cr 1>/tmp/oncheck.cr 2>&1

  e.检查数据库目录页一致性

  oncheck-cc 1 >/tmp/oncheck.cc 2>&1

  f.检查数据库数据的一致性

  oncheck-cD workdb 1>/tmp/oncheck.cd 2>&1

  g.检查数据库索引的一致性

  oncheck-cI workdb 1>/tmp/oncheck.ci 2>&1

  h.检查/tmp下oncheck.cr,oncheck.cc,oncheck.cd,oncheck.ci文件,查看有无错误信息,如没有,则数据库状态正常,反之亦然。

  i.将数据库状态置为online

 

  onmode-m

 

  用onstat-检查数据库状态为online

 

3数据库的备份与恢复

  1.dbexport备份与dbexport恢复

  dbexport备份是一文体文件备份,该备份将数据库中信息以文本文件方式保存,要注意的是,在备份时必须保证没有对数据库有访问者,否则做dbexport不会成功,dbexport备份的一般格式为(以数据库workdb为例)

  dbexport workdb-d -s workdbs /path

 

  2.dbimport恢复是将用dbexport备份的文件恢复到数据库中

 

  a.停止一切数据库操作→删除数据库;

  b.$dbimport workdb-d workdbs -i/path;

  c.用工具onmonitor将参数TAPEDEV改为/dev/null;

  d.ontap -s -u workdb.

  e.检查workdb是否改为U状态.

  f.将TAPEDEV值改回原先的值.

需要指出的是在dbimport恢复过程中,有大量的信息要写在逻辑日志文件中,采用上述方式,可避免写逻辑日志文件,加快dbimport的速度。

 

  3.数据库的零级备份

 

  数据库零级备份是重要的备份手段,日常一般用磁带备份,经常用于做重大操作之前的备份,数据往往需要恢复,而磁带上的零级备份数据由于数据量大,恢复起来花费时间较长,因此,可采用在硬盘上做零级备份的办法。

 

  a.在硬盘上划一个足够大的空间,用于备份文件的存放。

 

  b.用onmonitor将参数TAPEDEV改定指向零级备份文件。

 

  如把/cs2000在作为零级备份文件oback的存放空间,可将参数改为TAPEDEV=/cs2000/oback,这样可做硬盘零级备份,备份恢复时间只是磁带机的1/6。在恢复过程中应该用tail -f online.log监控。恢复过程,一直到数据库状态变为online..

 

  c.将参数TAPEDEV=/cs2000/oback改为TAREDEV=/dev/rmt/0m;

 

4数据库常见故障处理

  1.检查:用onstat_-1检查逻辑日志的使用情况,是否中止进程,根据finder col.数据库故障的一般检查,首先要检查数据库状态,经常用onstat_de查找可能出现的错误,同时检查online.log是否报错。

 

  2.数据库表的跟踪:遇到在对数据库表作大规模操作时,有时我们不知道对该表的操作是否得以在继续进行,因为isql进入,操作该表,数据库报“该表已被锁”信息,这时可用查询语句:

 

  首先:set retrieved to drity read

 

  然后:select count(*)from abc,

 

  通过不断对abc表进入统计,如统计数在不断增加,则对该表的操作仍在进行,否则,以停止了对该表的操作。还有,当批量执行SQL命令,如update,……insert等时如不能成功执行,可采用增加判断条件,缩小范围的方法去执行,往往可以获得成功,遇有些语句涉及的记录在处理过程中被锁定,直到处理过程结束可能超过系统关于同时锁定界限,遇这种错误,可以在开始处理时锁定该表。

 

3.故障排除举例:

 

  故障现象:在银行批量结息向结息数据表插入记录时出现informix sqlcode错误号为-239。

 

  故障检查:经查,从现象看,似乎有重复记录插入表中,但经核查数据,可以肯定数据绝无重复记录,考虑到表文件长期使用,表文件的相关信息受到某种破坏,为此,做以下操作:

 

  a.unload to “/tmp/abc.txt”select*from abc.卸出abc中全部数据;

 

  b.drop table abc.(删除表文件abc);

 

  c.create tabk abc

 

  (abc_swo mteger;

  abc_ano smallint)

   …

 

  );建立数据库表文件abc.

 

  d.load form“tmp/abc.txt”insert into abc.

 

  (将原数据装入表文件abc中)。

  e.重新执行结息操作,新产生的结息数据顺利装入表文件abc中,故障得以排除。

posted @ 2012-12-14 17:31  Lost_Heart  阅读(5211)  评论(0编辑  收藏  举报