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型變量(具有精度和刻度)。 說明:不要使用float或real型變量,因為可能出現四舍五入的情況(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中,故障得以排除。