如何重新啟動(dòng)數(shù)據(jù)庫(kù)?
Restart db db_name
如何激活數(shù)據(jù)庫(kù)?
Activate db db_name
如何停止數(shù)據(jù)庫(kù)?
Deactivate db db_name
如何重命名表?
Rename old_tablename to new_tablename
如何設(shè)置DB2環(huán)境變量
Db2set命令,語(yǔ)法如下:
Db2set variant=value
如何除去quiesce狀態(tài)
1. 連接到數(shù)據(jù)庫(kù)
2. 用 list tablespaces 判斷哪個(gè)tablespace處于quiesce狀態(tài)和和取得對(duì)象(object)ID
3. 判斷對(duì)象ID對(duì)應(yīng)的表
a)用 db2 "select tabname from syscat.tables where tablid=對(duì)象ID" 得到表名
b)用 db2 list history 判斷是那個(gè)表
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce狀態(tài)
如何實(shí)施已刪除表的恢復(fù)(Dropped Table Recovery)
1. 首先數(shù)據(jù)庫(kù)要可以前滾恢復(fù)(數(shù)據(jù)庫(kù)配置參數(shù)logretain或userexit打開(kāi))。
2. 對(duì)要實(shí)施Drop Table Recovery的表空間(限r(nóng)egular tablespace),執(zhí)行:
alter tablespace 表空間名 dropped table recovery on
3. 用 list history dropped table all for 數(shù)據(jù)庫(kù)名 得到刪除表的tableid(例如 0000000000006d0000020003)和表結(jié)構(gòu)的生成語(yǔ)句(DDL),記錄tableid和該語(yǔ)句以便恢復(fù)。之后,用drop命令刪除的表中的數(shù)據(jù)可以在前滾恢復(fù)時(shí)導(dǎo)出。
4. 恢復(fù)數(shù)據(jù)庫(kù)后,如果想恢復(fù)已刪除的表,在前滾時(shí)加recover dropped table tableid to 目標(biāo)目錄 。 在該目錄下被刪除的表中的數(shù)據(jù)導(dǎo)出,例如導(dǎo)出至 ../NODE0000/data文件。利用上面提到表結(jié)構(gòu)生成語(yǔ)句生成被刪除了的表,然后用import命令將數(shù)據(jù)導(dǎo)入表中。
如何生成所有對(duì)象的DDL
db2look -d DB_NAME -a -e -m -l -f -o filename.sql
如何恢復(fù)數(shù)據(jù)庫(kù)
restore db db1 to /tstdb2/catalog into db newlogpath /tstdb2/db2log buffer 2048
replace existing redirect parallelism 16;
set tablespace containers for 1 using (path '/tstdb2/db2tmp');
set tablespace containers for 2 using
(device '/dev/rtstcontlv00' 2621440, device '/dev/rtstcontlv01' 2621440,
device '/dev/rtstcontlv02' 2621440, device '/dev/rtstcontlv03' 2621440 ) ;
restore db db1 continue;
恢復(fù)完成后,執(zhí)行db2s命令,如果出錯(cuò),再執(zhí)行如下命令:
db2 rollforward db db to end of logs and complete
如何查看數(shù)據(jù)庫(kù)目錄
1)首先用 db2 list database directory 命令查看系統(tǒng)資料庫(kù)目錄(System Database Directory)中有沒(méi)有該資料庫(kù)。如果有,應(yīng)該再確定該資料庫(kù)是沒(méi)有用的資料庫(kù)之後用 db2 drop database 資料庫(kù)名將其刪除。
2)如果沒(méi)有,再用 db2 list database directory on location 看在本端資料庫(kù)目錄(Local Database Directory)中有沒(méi)有該資料庫(kù),location指定資料庫(kù)的位置(如Windows下的C: ,Unix下的/home/db2inst1)。
如何更改本地系統(tǒng)名稱
1.db2set db2system=新系統(tǒng)名
2. db2 terminate
3. db2 uncatalog node 原節(jié)點(diǎn)名
4. db2 terminate
如何使用DB2MOVE
Db2move DB_NAME action <options> -u USERID –p PASSWORD
Action:export,import,load
Options如下:
Option Default Notes
-tc table-creators all_creators EXPORT.Wildcard
-tn table-names all_user_tables EXPORT.Wildcard
-sn schema-names all_schemas EXPORT.Wildcard
-ts tblspace-names all_tablespace EXPORT.Wildcard
-tf tables from file
-io import-option REPLACE_CREATE IMPORT_only.
-lo load-option INSERT LOAD_only.
-l lobpaths current_dir separated_by_commas.NO
-u userid logged_on_userid
-p password logged_on_password
-aw allow-warnings false include
warnings during export.
例如:
Db2move ehrdb export –u ehr –p ehr
Db2move ehrdb import –u her –p ehr
IMPORT如何避免日志滿出錯(cuò)
在使用IMPORT命令向數(shù)據(jù)庫(kù)出入數(shù)據(jù)時(shí),如何避免日志空間滿錯(cuò)誤?
在執(zhí)行IMPORT命令時(shí), 如果使用循環(huán)日志, 有時(shí)會(huì)出現(xiàn)日志滿錯(cuò)誤, 這時(shí)可用COMMITCOUNT參數(shù)來(lái)解決. 因?yàn)槿罩究臻g滿往往是因?yàn)樗械娜罩揪幱诨顒?dòng)狀態(tài)導(dǎo)致的. 而COMMIT執(zhí)行后, 會(huì)釋放所占據(jù)的資源, 其中包括日志 . 這樣, 被當(dāng)前事務(wù)使用的日志在COMMIT命令執(zhí)行后, 即變成非活動(dòng)狀態(tài)了.
如何處理日值
-日志處理
DB2日志是以文件的形式存放在文件系統(tǒng)中,分為兩種模式:循環(huán)日志和歸檔日志。當(dāng)創(chuàng)建新數(shù)據(jù)庫(kù)時(shí),日志的缺省模式是循環(huán)日志。在這種模式下,只能實(shí)現(xiàn)數(shù)據(jù)庫(kù)的脫機(jī)備份和恢復(fù)。如果要實(shí)現(xiàn)聯(lián)機(jī)備份和恢復(fù),必須設(shè)為歸檔日志模式。
目前在綜合業(yè)務(wù)系統(tǒng)中,設(shè)置的均是歸檔日志模式;其它系統(tǒng)(如事后監(jiān)督、經(jīng)營(yíng)決策、中間業(yè)務(wù)等)一般都設(shè)置為循環(huán)日志模式。至于采用何種模式,可以通過(guò)修改數(shù)據(jù)庫(kù)配置參數(shù)(LOGRETAIN)來(lái)實(shí)現(xiàn): 歸檔日志模式:db2 update db cfg for using logretain on 注:改為on后,查看數(shù)據(jù)庫(kù)配置參數(shù)logretain的值時(shí),實(shí)際顯示的是recovery。改變此參數(shù)后,再次連接數(shù)據(jù)庫(kù)會(huì)顯示數(shù)據(jù)庫(kù)處于備份暫掛(BACKUP PENDING)狀態(tài)。這時(shí),需要做一次對(duì)數(shù)據(jù)庫(kù)的脫機(jī)備份(db2 backup db ),才能使數(shù)據(jù)庫(kù)狀態(tài)變?yōu)檎!?br>循環(huán)日志模式:db2 update db cfg for using logretain off
-處理步驟
必須按照以下正確的步驟進(jìn)行操作:
要求必須使用DB2命令PRUNE進(jìn)行清理,不建議使用rm命令刪除。
刪除前應(yīng)保證應(yīng)用已停止(即聯(lián)機(jī)已下來(lái))。
查看當(dāng)前使用的日志文件目錄及第一活動(dòng)日志文件
用 “db2 get db cfg for ”命令查看日志文件目錄(Path to log files)參數(shù),確定數(shù)據(jù)庫(kù)當(dāng)前使用的日志文件目錄。 例如:Path to log files = /db2log/,說(shuō)明DB2日志存放目錄是/db2log
用 “db2 get db cfg for ”命令查看第一活動(dòng)日志文件(First active log file)參數(shù),該參數(shù)對(duì)應(yīng)的日志文件之前的日志文件均為歸檔日志文件,如果確認(rèn)沒(méi)有用,可以刪除。例如:First active log file = S0015913.LOG,說(shuō)明當(dāng)前第一活動(dòng)日志文件是S0015913.LOG。
備份好要?jiǎng)h除的歸檔日志
刪除歸檔日志 以應(yīng)用用戶(如BTP)登錄,執(zhí)行:
$ db2 connect to
$ db2 prune logfile prior to S???????.LOG
注:S???????.LOG為查看到的第一活動(dòng)日志文件。此命令可以將當(dāng)前第一活動(dòng)日志文件之前的歸檔日志文件全部刪除。
如何清理db2diag.log文件
db2diag.log,是用來(lái)記錄DB2數(shù)據(jù)庫(kù)運(yùn)行中的信息的文件。可以通過(guò)此文件,查看記錄的有關(guān)DB2數(shù)據(jù)庫(kù)詳細(xì)的錯(cuò)誤信息。此文件也是不斷增大的,需要定期進(jìn)行清理。
可以通過(guò)查看實(shí)例的配置參數(shù)DIAGPATH,來(lái)確定db2diag.log文件是放在哪個(gè)目錄下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,則此文件是放在/home/db2inst1/sqllib/db2dump目錄下。當(dāng)文件系統(tǒng)/home的使用率達(dá)到80%-90%左右時(shí),應(yīng)及時(shí)刪除db2diag.log文件。
請(qǐng)按以下正確步驟操作:確認(rèn)應(yīng)用(如BTP)、DB2已經(jīng)停止。
將原db2diag.log文件備份到其它文件系統(tǒng)下。
刪除db2diag.log文件。刪除后,DB2會(huì)自動(dòng)創(chuàng)建一個(gè)新的文件。
標(biāo)準(zhǔn)函數(shù)
length: 返回自變量中的字節(jié)數(shù)
CAST: 變量類型轉(zhuǎn)換或截?cái)嘧址?br>如:CAST(RESUME AS VARCHAR(370))
Select CAST(colname as integer) from tablename;
decimal: 變量轉(zhuǎn)換為指定精度的數(shù)值
如: select decimal(amount,16,2) from tablename;
WHERE 子句條件
謂詞 功能
x = y x 等于 y
x <> y x 不等于 y
x < y x 小于 y
x > y x 大于 y
x <= y x 小于或等于 y
x >= y x 大于或等于 y
IS NULL/IS NOT NULL 測(cè)試空值
獲取系統(tǒng)日期或系統(tǒng)時(shí)間
select current time into curtime from (values 1) as tmp;
select current date into curdate from (values 2) as tmp;
select year(current date) into curdate from (values 2) as tmp; --獲取系統(tǒng)年份
select month(current date) into curdate from (values 2) as tmp; --獲取系統(tǒng)月份
select day(current date) into curdate from (values 2) as tmp; --獲取系統(tǒng)日份
(CURRENT TIMESTAMP 精度達(dá)到微秒)
如何預(yù)防空值
DB2的COALESCE函數(shù)返回()中表達(dá)式列表中第一個(gè)不為空的表達(dá)式,可以帶多個(gè)表達(dá)式, 和oracle的isnull類似。語(yǔ)法格式如下:
CLEASCE(colname,default_value)
多表的關(guān)聯(lián)更新方法
db2的update語(yǔ)法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的寫(xiě)法,但是可以通過(guò)如下方法解決:
update table1 t1 set t1.col1=(select t2.col1 from table2 t2 where …)
例:
update test t1 set (t1.username,t1.instcode) = (select t2.instcode,t2.instname from sysinsttb t2 where t2.instcode=t1.instcode);
獲取操作(insert、update)的記錄數(shù)
GET DIAGNOSTICS rcount=ROW_COUNT;
注:
get diagnostics rcount =ROW_COUNT; 只對(duì)update,insert,delete起作用. 不對(duì)select into 有效
如何執(zhí)行RUNSTATS等優(yōu)化命令
db2 runstats on table <table_name> with distribution and detailed indexes all
db2 reorgchk update statistics on table all
查看什么時(shí)候進(jìn)行了runstats
db2 "select name, stats_time from sysibm.systables"
完整執(zhí)行如下:
db2 connect to ocrm1 user db2iocrm using db2iocrm
db2 runstats on table db2iocrm.eosoperator with distribution and indexes all
db2 reorg table db2iocrm.eosoperator allow read access
db2 reorg indexes all for table db2iocrm.eosoperator allow read access
db2 connect reset
如何獲取結(jié)果集的前N行數(shù)據(jù)
Select * from tablename fetch first N rows only