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中,故障得以排除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM