數據庫基本命令


1.     查看數據庫
     [ODS-DB/home/dw]$db2 list db directory  --查看所有數據庫名等信息,
2.     啓動數據庫實例
db2start    --啓動實例
3.     連接到數據庫
     [ODS-DB/home/dw]$db2 connect to edp user dw using dw
4.     查看數據庫端口號(數據庫管理配置)
[localhost/db-ods/dw]$db2 get dbm cfg|grep -i svcename
5.     查看數據庫配置
[localhost/db-ods/dw]$db2 get db cfg for edp
6.     停止數據庫
db2stop force(停止進程關閉實例)
7.     修改數據庫參數
Db2 update dbm cfg/db2 update db cfg
8.     獲取快照信息(snapshot)
[localhost/db-ods/dw]$db2 get snapshot for application agentid 2805
[localhost/db-ods/dw]$db2 get snapshot for locks on edp
9.     DB2LOOK命令
[localhost/db-ods/dw]$db2look -d edp -z dw -t zj_test –e
該命令可以獲取表的定義信息,還可以導出表(可以多個表)結構到一個文件中:
[localhost/db-ods/dw]$db2look -d edp -z dw -t zj_test dim_time -e  -o ./zj_crt_tb.sql
10.     DB2EXPORT命令
[localhost/db-ods/dw]$   
導出表數據,格式可以定製,del:帶分隔符,數據可見
10.    db2load
     db2 "load client from ./zj.del of del MODIFIED BY COLDEL0X1D NOCHARDEL NOROWWARNINGS insert into dw.zj_test nonrecoverable CPU_PARALLELISM 8"
11.     查看sqlcode
[localhost/db-ods/dw]$db2 ? sql30081n
12.     壓縮表空間
db2 alter tablespace <tabsp ace_name> reduce  --收縮表空間,壓縮表空間
13.     列出指定用戶下的表
[localhost/db-ods/dw]$db2 "list tables for schema dw"
14.     命令行下編譯存儲過程:
db2 –td@ -vf xxx.sql ------ -td指定結束符 –v顯示 –f指定文件
15. 創建數據庫:db2 "CREATE DATABASE EDP AUTOMATIC STORAGE YES  ON '/home/dw' DBPATH ON '/home/dw' USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 32768 DFT_EXTENT_SZ 6"
16. 創建表空間:
db2 "CREATE LARGE TABLESPACE "TBS_SDM_DATA" IN DATABASE PARTITION GROUP IBMDEFAULTGROUP
         PAGESIZE 32768 MANAGED BY AUTOMATIC STORAGE
         AUTORESIZE YES
         INITIALSIZE 30 M
         MAXSIZE NONE
         EXTENTSIZE 64
         PREFETCHSIZE AUTOMATIC
         BUFFERPOOL TBSSDMBUF32K
         OVERHEAD 7.500000
         TRANSFERRATE 0.060000
         NO FILE SYSTEM CACHING
         DROPPED TABLE RECOVERY ON";
17. db2 查看錶空間容器:
List tablespace containers for TBANUM show detail

18. (1)查看存儲過程

     db2 "SELECT COUNT(1) FROM SYSCAT.PROCEDURES WHERE PROCSCHEMA='DW' OR PROCSCHEMA='HYDG'"

      (2)查看函數

     db2 "SELECT * FROM SYSCAT.FUNCTIONS WHERE FUNCSCHEMA='DW'"

19. 導出存儲過程的方法除了db2look之外還可以使用如下方法:

db2 "EXPORT TO procudure.del OF del MODIFIED BY LOBSINFILE SELECT 'SET CURRENT SCHEMA '||rtrim(procschema)||'@'||chr(10)||'SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,'||rtrim(procschema)||' @'||chr(10)||text||chr(10)||'@'||chr(10) FROM syscat.procedures where PROCNAME='SP_S_GL_BAL_D'";

20.  編目

     db2 catalog tcpip node EDP remote 66.235.97.200 server 50002

     db2 catalog db EDP as EDP at node EDP

      

21. identity字段id int generated always as identity (start with 100 increment by 1)
和sequence都可以

    


1.     db2查看死鎖
(1)     db2 get snapshot for locks on EDP>zj_lock.txt
(2)     select * from SYSIBMADM.LOCKS_HELD
(3)     db2 list applications show detail | grep -i lock
2.     解除鎖定
db2 "force application (10131,10132)"
3.     手動給表上鎖
[localhost/db-ods/dw]$db2 +c lock table zj_test in exclusive mode
清空表 (慎用)

1.     DELETE FROM <TABLENAME>--適合數據量小的表
2.     TRUNCATE TABLE  EBD.AFA_BATINFO   IMMEDIATE;
Db2 v9支持該語句,同時會壓縮空間,但是是異步操作。
3.     db2 alter table S_CRD_DBT_TRS_BRN_D ACTIVATE NOT LOGGED INITIALLY with empty table
4.     [localhost/db-ods/dw]$IMPORT FROM /dev/null OF DEL REPLACE INTO zj_test
IMPORT可以創建表、索引、支持觸發器記錄日誌,入庫方式支持insert、insert_update、replace、replace_create(不需要表存在、ixf格式)、create(導入新表、ixf格式)
5.     [localhost/db-ods/dw]$db2 load from /dev/null of del replace into zj_test nonrecoverable
LOAD不記錄日誌,速度較快,支持(insert、replace)但是建議用import
6.     DROP/CREATE TABLE
7.     SELECT CARD,TABNAME FROM SYSCAT.TABLES
WHERE TABSCHEMA='EBD'
清空某個SCHEMA下的表之後可以用該語句查看是否成功,注意壓縮的延遲動作。
修改表

1.     修改表名
RENAME TABLE <TBNAME> TO <NEW-TBNAME>
2.     修改字段類型
ALTER TABLE ZJ_TEST ALTER NAME SET DATA TYPE VARCHAR(2)
注意:修改後的數據類型和長度要對照表中已有數據,否則報錯
3.     修改字段名
ALTER TABLE ZJ_TEST RENAME COLUMN ID TO NAME
4.     增加字段
alter table zj_test add column id varchar(10);
5.     更新字段值
update zj_test set (name,id)=('jk','123') where name='a'
6.     增加約束
ALTER TABLE "CUSTOMER" ADD CONSTRAINT CUST_ID_PK PRIMARY KEY (CUST_ID)--創建約束

有用的SQL

1.     刪除重複的行(數據量較小)
delete from (select * from(select a,b,c,row_number() over(partition by a,b,c order by a,b,c) as row_num from tab) as e where row_num >1)
如果數據量太大:如果數據量太大可以採用如下方法:
Create table emp_profile_temp like emp_profile;

大數據量採用
LOAD FROM CURSUR
DECLARE mycursor CURSOR FOR SELECT distinct * FROM emp_profile; 
LOAD FROM mycursor OF CURSOR INSERT INTO emp_profile_temp;     
drop table emp_profile; 
          rename table emp_profile_temp to emp_profile

如果記錄數很少直接用rid()來區分,並刪除
2. DB2 MERGE的用法
     db2 "merge into zj_test as a 
     using (select name,id from zj_test1) as b
     on a.id=b.id
     when matched then update set name=b.name
     when not matched then insert (name,id) values (b.name,b.id)"
3.db2後臺導出存儲過程的辦法
     db2 "EXPORT TO PROCUDURE.DEL OF DEL MODIFIED BY LOBSINFILE SELECT 'SET CURRENT SCHEMA '||RTRIM(PROCSCHEMA)||'@'||CHR(10)||'SET CURRENT PATH = SYSIBM,SYSFUN,SYSPROC,'||RTRIM(PROCSCHEMA)||' @'||CHR(10)||TEXT||CHR(10)||'@'||CHR(10) FROM SYSCAT.PROCEDURES WHERE PROCNAME='SP_S_GL_BAL_D';"
     注意:SYSCAT.PROCEDURES的TEXT爲lob字段類型
4.自定義異常
     CREATE OR REPLACE PROCEDURE ZJ_TEST()

     LANGUAGE SQL

     BEGIN

         IF 1< 2 THEN

         SIGNAL SQLSTATE '80000' SET MESSAGE_TEXT = '總分覈對不通過!';

         END IF;

     END


分區

1.     刪除分區
ALTER TABLE ZJ_TEST DETACH PARTITION UPPER('P20130731') INTO ZJ_TEST_TMP_20130926;--異步操作,需等待
2.     Commit;--commit很重要
3.     刪除臨時表
DROP TABLE ZJ_TEST_TMP_20130926;
4.     重建分區
ALTER TABLE ZJ_TEST ADD PARTITION 'P20130731'  STARTING '20130731' INCLUSIVE ENDING  '20130801' EXCLUSIVE;--包括‘20130731’,不包括‘20130801’
5.     遷出分區之後必須要有個等待操作(可以參考db2官方文檔“waitingfordetach”)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章