2009年8月17日 星期一

Char_Old function (Leading zeroes and a trailing decimal characters) - DB2 Express-C 9.7


/*
  Char function 是我在 DB2 8.2 算是很喜歡的 function
  一直到今天,我用 DB2 Express-C 9.7 來做資料分析時,
  才發現它已經沒有原來我想用來補零的功能...
  要改用 char_old function
*/



C:\>db2 select decimal(200,5,0) from sysibm.sysdummy1

1
-------
  200.

  已選取 1 個記錄。

 

/* 掐頭去尾的 char function */

C:\>db2 select char(decimal(200,5,0)) from sysibm.sysdummy1

1
-------
200

  已選取 1 個記錄。


/* 使用 char_old */

C:\>db2 select char_old(decimal(200,5,0)) from sysibm.sysdummy1

1
-------
00200.

  已選取 1 個記錄。

2009年8月5日 星期三

DB2 Express-C 9.7 GUI Chinese characters does not show properly


/*
  DB2 Express-C 9.7安裝後 GUI 的 menu 字體成了亂碼
  本來以為會是\IBM\SQLLIB\java\jdk\jre\lib下的fontconfig.properties.src有關
  結果,內容被我改得面目全非卻還是不見效...
  沒想到原來解法是這麼簡單
*/


/* 
 控制中心等GUI字體設定


 Reference: IBM DB2 控制中心等圖形工具在 Windows 下的字體設置
 http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0703caojx/


 點選「工具設定」後,選擇「字型」,接著
 將「功能表(M)」的字型下拉式選單設為對話,
 關閉控制中心,接著再開起即可
*/





/* 
 配置輔助程式GUI中文字體無法正常顯示


 Reference:IZ01055: DB2 MESSAGE WINDOW DOES NOT SHOW SOME OF THE
      CHINESE CHARACTERS PROPERLY
      WHEN CONFIGURATION ASSISTANT IS OPENED AS 'DB2CA'.
 http://www-01.ibm.com/support/docview.wss?uid=swg1IZ01055

 把\IBM\SQLLIB\bin\下的db2ca.bat先做個備份,接著再用以下內容取代即可

*/



set RUNTIME_FLAGS=-Xmx128m -Xms8m -Xquickstart -Xgcpolicy:optavgpause

IF "%1" == "wait" GOTO WAIT
IF "%1" == "-ic" GOTO WSWB
 db2javit -j:CC -s: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"-ca %2 %3 %4 %5 %6 %7 %8"
 GOTO END

:WAIT
 db2javit -j:CC -s: -w: -i: -l: -o:"%RUNTIME_FLAGS%" -a:"-ca %3 %4 %5 %6 %7 %8 %9"
 GOTO END

:WSWB
 db2icdocs.exe
 GOTO END

:end

2009年8月4日 星期二

Grant Load authority using DB2 Express-C 9.7


/*
  好不容易終於拿到 DB2 Express-C 9.7
  灌好之後才發現原來它是這麼令人陌生...(是我假放太久了嗎?)
  一是控制中心的選單字體全成了亂碼,二是權限異動頗大
  到現在還是搞不清楚。不過先把弄出來的做一下紀錄...

  在什麼都沒設定之下執行 load,就會有以下錯誤:
  SQL0552N "ADMINISTRATOR" 沒有執行作業 "LOAD" 的專用權。 SQLSTATE=42502

  原來 LOAD 權限已經不再是預設就有的,因此權限設定上還真麻煩,
  特別是我只是單純用本機的 Administrator 去做測試
*/


/* 檢查本機使用者和群組設定 */

「開始」→「程式集」→「系統管理工具」→「電腦管理」
展開「系統工具」接著再展開「本機使用者和群組」
點選「群組」。檢查是否存在名稱為 DB2ADMNS 的群組。
再點選「使用者」。將 Administrator 「成員隸屬」的選單新增DB2ADMNS群組。


/* 建自己的 DB */

不使用「DB2安裝」所建立的DB:SAMPLE,原因是,
我還沒Try出來到底怎麼使Administrator有執行grant的專用權。
另外我也還沒辦法用localsystem account去logon。

如果我要Administrator有SECADM (Manages security within a database)的權限,
目前所能做的就是使 Administrator 成為 db 的 creator。


C:\>db2start
SQL1063N DB2START 處理成功。

C:\>db2 create database orion
DB20000I CREATE DATABASE 指令已順利完成。


C:\>db2 connect to orion

  資料庫連線資訊

 資料庫伺服器      = DB2/NT 9.7.0
 SQL 授權 ID       = ADMINIST...
 本端資料庫別名     = ORION


/* 檢查有哪些權限 */
C:\>db2 get authorizations



  現行使用者的管理權限

 直接 SYSADM 權限       = NO
 直接 SYSCTRL 權限       = NO
 直接 SYSMAINT 權限      = NO
 直接 DBADM 權限        = YES
 直接 CREATETAB 權限      = NO
 直接 BINDADD 權限       = NO
 直接 CONNECT 權限       = NO
 直接 CREATE_NOT_FENC 權限  = NO
 直接 IMPLICIT_SCHEMA 權限   = NO
 直接 LOAD 權限         = NO
 直接 QUIESCE_CONNECT 權限    = NO
 直接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 直接 SYSMON 權限          = NO

 間接 SYSADM 權限        = NO
 間接 SYSCTRL 權限        = YES
 間接 SYSMAINT 權限       = YES
 間接 DBADM 權限        = NO
 間接 CREATETAB 權限      = YES
 間接 BINDADD 權限       = YES
 間接 CONNECT 權限       = YES
 間接 CREATE_NOT_FENC 權限   = NO
 間接 IMPLICIT_SCHEMA 權限   = YES
 間接 LOAD 權限         = NO
 間接 QUIESCE_CONNECT 權限   = NO
 間接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 間接 SYSMON 權限          = YES


/* 自己不能grant自己 */
C:\>db2 grant load on database to administrator
DB21034E 指令被當作 SQL 陳述式處理,因為它不是有效的「指令行處理器」指令。
在SQL 處理程序期間,它已傳回:
SQL0554N 授權 ID 無法授與自身專用權或權限。 SQLSTATE=42502

/* grant權限給群組 */

C:\>db2 grant load on database to db2admns
DB20000I SQL 指令已順利完成。

C:\>db2 create table t1 (c1 integer)
DB20000I SQL 指令已順利完成。

/* 再檢查一下權限 */

C:\>db2 get authorizations

  現行使用者的管理權限

 直接 SYSADM 權限       = NO
 直接 SYSCTRL 權限       = NO
 直接 SYSMAINT 權限      = NO
 直接 DBADM 權限        = YES
 直接 CREATETAB 權限      = NO
 直接 BINDADD 權限       = NO
 直接 CONNECT 權限       = NO
 直接 CREATE_NOT_FENC 權限  = NO
 直接 IMPLICIT_SCHEMA 權限   = NO
 直接 LOAD 權限         = NO
 直接 QUIESCE_CONNECT 權限    = NO
 直接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 直接 SYSMON 權限          = NO

 間接 SYSADM 權限        = NO
 間接 SYSCTRL 權限       = YES
 間接 SYSMAINT 權限      = YES
 間接 DBADM 權限        = NO
 間接 CREATETAB 權限     = YES
 間接 BINDADD 權限      = YES
 間接 CONNECT 權限       = YES
 間接 CREATE_NOT_FENC 權限   = NO
 間接 IMPLICIT_SCHEMA 權限   = YES

 間接 LOAD 權限          = YES

 間接 QUIESCE_CONNECT 權限     = NO
 間接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 間接 SYSMON 權限          = YES


/* 測試load */

C:\>db2 load from t1.del of del insert into t1
SQL3501W 由於禁止資料庫向前回復, 所以表格常駐的表格空間將不放入備份懸置狀態。

SQL3109N 公用程式開始自檔案 "C:\t1.del" 載入資料。

SQL3500W 公用程式在 "2009-08-04 20:27:16.489660" 時開始 "LOAD" 階段。

SQL3519W 開始載入「一致點」。輸入記錄數 = "0"。

SQL3520W 成功載入「一致點」。

SQL3110N 公用程式已完成處理。自輸入檔讀取第 "1" 列。

SQL3519W 開始載入「一致點」。輸入記錄數 = "1"。

SQL3520W 成功載入「一致點」。

SQL3515W 公用程式已在 "2009-08-04 20:27:16.700221" 時完成 "LOAD" 階段。

已讀取的列數        = 1
已略過的列數        = 0
已載入的列數        = 1
已拒絕的列數        = 0
已拒絕的列數        = 0
已確定的列數        = 1