如何重新啟動數據庫?
Restart db db_name
如何激活數據庫?
Activate db db_name
如何停止數據庫?
Deactivate db db_name
如何重命名表?
Rename old_tablename to new_tablename
如何設置DB2環境變量
Db2set命令,語法如下:
Db2set variant=value
如何除去quiesce狀態
1. 連接到數據庫
2. 用 list tablespaces 判斷哪個tablespace處于quiesce狀態和和取得對象(object)ID
3. 判斷對象ID對應的表
a)用 db2 "select tabname from syscat.tables where tablid=對象ID" 得到表名
b)用 db2 list history 判斷是那個表
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce狀態
如何實施已刪除表的恢復(Dropped Table Recovery)
1. 首先數據庫要可以前滾恢復(數據庫配置參數logretain或userexit打開)。
2. 對要實施Drop Table Recovery的表空間(限regular tablespace),執行:
alter tablespace 表空間名 dropped table recovery on
3. 用 list history dropped table all for 數據庫名 得到刪除表的tableid(例如 0000000000006d0000020003)和表結構的生成語句(DDL),記錄tableid和該語句以便恢復。之后,用drop命令刪除的表中的數據可以在前滾恢復時導出。
4. 恢復數據庫后,如果想恢復已刪除的表,在前滾時加recover dropped table tableid to 目標目錄 。 在該目錄下被刪除的表中的數據導出,例如導出至 ../NODE0000/data文件。利用上面提到表結構生成語句生成被刪除了的表,然后用import命令將數據導入表中。
如何生成所有對象的DDL
db2look -d DB_NAME -a -e -m -l -f -o filename.sql
如何恢復數據庫
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;
恢復完成后,執行db2s命令,如果出錯,再執行如下命令:
db2 rollforward db db to end of logs and complete
如何查看數據庫目錄
1)首先用 db2 list database directory 命令查看系統資料庫目錄(System Database Directory)中有沒有該資料庫。如果有,應該再確定該資料庫是沒有用的資料庫之後用 db2 drop database 資料庫名將其刪除。
2)如果沒有,再用 db2 list database directory on location 看在本端資料庫目錄(Local Database Directory)中有沒有該資料庫,location指定資料庫的位置(如Windows下的C: ,Unix下的/home/db2inst1)。
如何更改本地系統名稱
1.db2set db2system=新系統名
2. db2 terminate
3. db2 uncatalog node 原節點名
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如何避免日志滿出錯
在使用IMPORT命令向數據庫出入數據時,如何避免日志空間滿錯誤?
在執行IMPORT命令時, 如果使用循環日志, 有時會出現日志滿錯誤, 這時可用COMMITCOUNT參數來解決. 因為日志空間滿往往是因為所有的日志均處于活動狀態導致的. 而COMMIT執行后, 會釋放所占據的資源, 其中包括日志 . 這樣, 被當前事務使用的日志在COMMIT命令執行后, 即變成非活動狀態了.
如何處理日值
-日志處理
DB2日志是以文件的形式存放在文件系統中,分為兩種模式:循環日志和歸檔日志。當創建新數據庫時,日志的缺省模式是循環日志。在這種模式下,只能實現數據庫的脫機備份和恢復。如果要實現聯機備份和恢復,必須設為歸檔日志模式。
目前在綜合業務系統中,設置的均是歸檔日志模式;其它系統(如事后監督、經營決策、中間業務等)一般都設置為循環日志模式。至于采用何種模式,可以通過修改數據庫配置參數(LOGRETAIN)來實現: 歸檔日志模式:db2 update db cfg for using logretain on 注:改為on后,查看數據庫配置參數logretain的值時,實際顯示的是recovery。改變此參數后,再次連接數據庫會顯示數據庫處于備份暫掛(BACKUP PENDING)狀態。這時,需要做一次對數據庫的脫機備份(db2 backup db ),才能使數據庫狀態變為正常。
循環日志模式:db2 update db cfg for using logretain off
-處理步驟
必須按照以下正確的步驟進行操作:
要求必須使用DB2命令PRUNE進行清理,不建議使用rm命令刪除。
刪除前應保證應用已停止(即聯機已下來)。
查看當前使用的日志文件目錄及第一活動日志文件
用 “db2 get db cfg for ”命令查看日志文件目錄(Path to log files)參數,確定數據庫當前使用的日志文件目錄。 例如:Path to log files = /db2log/,說明DB2日志存放目錄是/db2log
用 “db2 get db cfg for ”命令查看第一活動日志文件(First active log file)參數,該參數對應的日志文件之前的日志文件均為歸檔日志文件,如果確認沒有用,可以刪除。例如:First active log file = S0015913.LOG,說明當前第一活動日志文件是S0015913.LOG。
備份好要刪除的歸檔日志
刪除歸檔日志 以應用用戶(如BTP)登錄,執行:
$ db2 connect to
$ db2 prune logfile prior to S???????.LOG
注:S???????.LOG為查看到的第一活動日志文件。此命令可以將當前第一活動日志文件之前的歸檔日志文件全部刪除。
如何清理db2diag.log文件
db2diag.log,是用來記錄DB2數據庫運行中的信息的文件??梢酝ㄟ^此文件,查看記錄的有關DB2數據庫詳細的錯誤信息。此文件也是不斷增大的,需要定期進行清理。
可以通過查看實例的配置參數DIAGPATH,來確定db2diag.log文件是放在哪個目錄下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,則此文件是放在/home/db2inst1/sqllib/db2dump目錄下。當文件系統/home的使用率達到80%-90%左右時,應及時刪除db2diag.log文件。
請按以下正確步驟操作:確認應用(如BTP)、DB2已經停止。
將原db2diag.log文件備份到其它文件系統下。
刪除db2diag.log文件。刪除后,DB2會自動創建一個新的文件。
標準函數
length: 返回自變量中的字節數
CAST: 變量類型轉換或截斷字符串
如:CAST(RESUME AS VARCHAR(370))
Select CAST(colname as integer) from tablename;
decimal: 變量轉換為指定精度的數值
如: 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 測試空值
獲取系統日期或系統時間
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; --獲取系統年份
select month(current date) into curdate from (values 2) as tmp; --獲取系統月份
select day(current date) into curdate from (values 2) as tmp; --獲取系統日份
(CURRENT TIMESTAMP 精度達到微秒)
如何預防空值
DB2的COALESCE函數返回()中表達式列表中第一個不為空的表達式,可以帶多個表達式, 和oracle的isnull類似。語法格式如下:
CLEASCE(colname,default_value)
多表的關聯更新方法
db2的update語法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的寫法,但是可以通過如下方法解決:
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)的記錄數
GET DIAGNOSTICS rcount=ROW_COUNT;
注:
get diagnostics rcount =ROW_COUNT; 只對update,insert,delete起作用. 不對select into 有效
如何執行RUNSTATS等優化命令
db2 runstats on table <table_name> with distribution and detailed indexes all
db2 reorgchk update statistics on table all
查看什么時候進行了runstats
db2 "select name, stats_time from sysibm.systables"
完整執行如下:
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
如何獲取結果集的前N行數據
Select * from tablename fetch first N rows only