2011年8月21日 星期日

DB2 tips

下列指令依序列出資料庫中index的使用率

db2pd -db MY_DATABASE -tcbstats index

建立表格的MDC(Multiple Dimensinal Clustering) index。MDC比一般的Clustering index好的一點在於它會自動維護data的clustering,不像一般的Clustering index,隨著資料的異動,Clustering ratio會越來越低。且一般來說,MDC的效能會比較好。不過要注意的是MDC的dimention必需選擇cardinality較低的column,如此一來,一個Cell才可以包含愈多的範圍,可節省所需建立的Block數(即extent)

名解解釋:Cell是MDC中,每個dimension的值的交集,每個Cell至少會被指定一個Block

CREATE TABLE T1 
    (c1 DATE, 
     c2 INT, 
     c3 INT, 
     c4 DOUBLE, 
     c5 INT generated always as (INT(C1)/100) ) 
    ORGANIZE BY DIMENSIONS (c5, c3)

2011年7月19日 星期二

Trusted Context in DB2

在過去的3-tier應用程式中,App Server使用一個固定的user name與後端的DB Server建立起連結。這種作法容易造成必需grant給該user name所有的權限,才能讓App Server操作所有的功能,因而無法達到較細緻化的權限控管。然而,App Server若要為每一個應用程式的End User都建立一個connection的化,又太過耗費系統資源。

DB2的Trusted Context即是設計來解決這樣的問題。如下圖(擷自此),只要在DB2 定義一個Context物件,並且在上面設定可以套用該Context的條件(如連線的IP)。當符合這些條件的App Server在建立Connection時,就可以連結到這個Context物件。一但與這個Context物件連結,App Server可以動態更換End User的ID,而不需重新建立Connection。如此一來,就可以讓同一個Connection給不同的End User使用。

Three-tier application model with trusted context

以下為建立Trusted Context之語法(詳細語法介紹可參照參考資料2)

CREATE TRUSTED CONTEXT contextName BASED UPON CONNECTION USING
SYSTEM AUTHID root_authorization_name
ATTRIBUTES (ADDRESS 'ip_addr', ENCRYPTION 'NONE')
WITH USER FOR other_user_authorization_name with authentication

其中,root_authorization_name為此Trusted Context所連結的使用者ID,只有這個使用者才能從App Server建立Trusted Connection;另other_user_authorization_name則是App Server在換end user  ID時,可以更換的user id。

建立好之後,可以用下列sample code來進行測試

public class TestDB2TrustedContext {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DB2ConnectionPoolDataSource dataSource = new DB2ConnectionPoolDataSource();
        dataSource.setDatabaseName("PULI");
        dataSource.setServerName("localhost");
        dataSource.setPortNumber(50000);
        dataSource.setDriverType(4);
        Properties properties = new Properties();
        String user = "rootUser";
        String password = "rootPassword";
        try {
            /*傳回的 objects[0]為DB2PooledConnection
             *      objects[1]為之後要更改user name時,所要給的cookie
             */
           Object[] objects = dataSource.getDB2TrustedPooledConnection(
                    user,password, properties);
            DB2PooledConnection pooledConn = (DB2PooledConnection) objects[0];
            Connection conn = pooledConn.getConnection();
            PreparedStatement stmt = conn.prepareStatement("Select name from db2admin.basicinfo fetch first 10 rows only");;
            ResultSet result = stmt.executeQuery();
            while (result.next()){
                System.out.println(result.getString(1));
                Thread.sleep(500);
            }
            byte[] cookie = (byte[])objects[1];
            String newUser="otherUser";
            String newPwd = "otherPasswd";
            /*Mainframe才要用的*/
            String userRegistry = "registry";
            /*先不要給Security Token*/
            byte[] userSecTkn = null;
            /*先前的使用者ID,可不給*/
            String originalUser = null;
            /*重用舊的connection,並重新設定使用者名稱*/
           conn =
                  ((com.ibm.db2.jcc.DB2PooledConnection)pooledConn).getDB2Connection(
                     cookie,newUser,newPwd,userRegistry,userSecTkn,originalUser,properties);
            PreparedStatement stmt2 = conn.prepareStatement("Select name from db2admin.basicinfo fetch first 10 rows only");;
            ResultSet result2 = stmt2.executeQuery();
            while (result2.next()){
                System.out.println(result2.getString(1));
                Thread.sleep(500);
            }      
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

參考資料

  1. http://www.ibm.com/developerworks/data/library/techarticle/dm-0609mohan/
  2. Create Trusted Context語法

2011年3月3日 星期四

匯出 DB2 Catalog 的指令

有的時候需要把Server所Catalog的Database或Node轉移到別台Server,此時可以使用db2cfgexp(負責匯出 catalog)及db2cfgimp(負責匯入catalog) 來做Catalog資訊的轉移。使用方式如下

匯出:
db2cfexp fname [ template | backup | maintain ]:

其中 fname為輸出檔名, [template | backup | maintain ]為匯出的選項

匯入:
db2cfgimp fname

其中,fname為要匯入的檔名

2011年1月17日 星期一

使用LOAD解決無法匯入含有Generated Always的表格之方法

資料來源:http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/r0008304.htm

在設計資料庫的schema時,若針對Primary Key有設定Generated Identity屬性,在load資料時,會出現無法匯入的訊息,此時可以在LOAD    command中加上 modified by identityoverride 選項,如此一來,就會把 source table的identity column的值直接覆蓋到target table的identity column。範例指令如下

db2 load from load.del of del modified by identityoverride 
replace into table1


進階資訊(其它Import/Export/Load會用到的modifier,以及Import/Export/Load對這些modifier的支援)

http://www.ibm.com/developerworks/data/library/techarticle/dm-0405melnyk/index.html

2011年1月16日 星期日

更改DB2 Server Name---透過db2nodes.cfg

執行db2指令時,系統回報這個錯誤 Error in the db2nodes.cfg file at line number "1".  Reason code "10",經過google搜尋後,發現是因為該系統是由其它系統image複製過來,因此sqllib/db2nodes.cfg的hostname設定與目前機器的hostname不符。以下紀錄解決方法

db2nodes.cfg記錄了每個DB2 partition的資訊,其內容格式如下

nodenum    hostname    logical port   netname    resourcesetname

其中nodenum, hostname及logical port為必要的三個欄位。依據(http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/start/r0006351.htm)的說明,nodenum為介於 0999 之間的專用號碼,可識別分割資料庫系統中的資料庫分割區伺服器;hostname為資料庫伺服器所在的Hostname;logical port為資料分割伺服器的邏輯埠號。以下為不同的配置範例

一台電腦,四個資料庫分割區伺服器

如果您不是使用叢集環境,且想讓名為 ServerA 的實體工作站有四個資料庫分割區伺服器,則可更新 db2nodes.cfg 檔,如下所示:
   0          ServerA        0
1 ServerA 1
2 ServerA 2
3 ServerA 3

兩台電腦,每台電腦有一個資料庫分割區伺服器
如果您想讓分割的資料庫系統包含兩個名為 ServerAServerB 的實體工作站,則可更新 db2nodes.cfg 檔案,如下所示:

   0          ServerA        0
1 ServerB 0

兩台電腦,每台電腦有三個資料庫分割區伺服器
如果您想讓分割的資料庫系統包含兩個名為 ServerAServerB 的實體工作站, 且讓 ServerA 執行 3 個資料庫分割區伺服器,則可更新 db2nodes.cfg 檔案,如下所示:

   4          ServerA        0
6 ServerA 1
8 ServerA 2
9 ServerB 0

兩台電腦,具有高速切換的三個資料庫分割區伺服器
如果您想讓分割的資料庫系統包含兩台名為 ServerAServerB (ServerB 執行兩個資料庫分割區伺服器) 的電腦,並且使用名為 switch1switch2 的高速交互連接,則可更新 db2nodes.cfg 檔案,如下所示:

   0          ServerA        0              switch1
1 ServerB 0 switch2
2 ServerB 1 switch2


設定完成後,執行db2stop/db2start即可。詳細說明可看(http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/start/r0006351.htm)



#For Windows



DB2 windows版本的db2nodes.cfg在 DB2 v8及v9.1,是放在Program Files\IBM\SQLLIB\DB2\db2nodes.cfg中;而在9.5及以上,是放在Documents and Settings\All Users\Application Data\IBM\DB2\<DB2COPY>\DB2\db2nodes.cfg中。手冊建議不要直接修改檔案內容,可透過下列指令達到修改hostname目的




    db2nchg /n:nodeNumber /h:hostName


上述指令可以修改 node的 hostName,其中,在沒有partition的環境下,nodeNumber為0。



詳細db2nchg指令用法在此。另外,可以用db2nlist最出目前資料庫有那些nodes




2011年1月14日 星期五

客制化Rational Data Architect

本文介紹如何透過操作Data Architect的Model,來延伸其Model的屬性以及功能

出處:http://www.ibm.com/developerworks/data/library/techarticle/dm-0807liu/index.html

Extend IBM InfoSphere Data Architect to meet your specific data modeling and integration requirements, Part 1: Modifying IDA models and customizing properties

Wei Liu (liuw@us.ibm.com), Software Engineer, IBM

Summary:  IBM® InfoSphere® Data Architect (IDA) (formerly Rational® Data Architect) is gaining momentum as a comprehensive tool that helps organizations promote a thorough understanding of their enterprise information architecture. As more people use IDA, there's an increasing need for some customers to extend IDA to meet their unique data modeling and integration requirements. This two-part series shows you how to extend IDA's models, properties view, model reports and validation rules. In Part 1, learn how to programmatically traverse and modify IDA models and how to add and display custom properties. [IDA Version 7.5 has adapted Data Tools Project (DTP) to replace Web Tools Project (WTP). Because IDA uses the SQL model defined in DTP as the basis of its metamodels, the section Programmatically traverse and modify RDA logical data model and physical data model, as well as the sample code provided with the article, were updated.--Ed.]

View more content in this series

Tags for this article: data_access, infosphere_data_architect, integrating_products,integration

使用Rational Data Architect來進行資料整合

本篇介紹如何使用Rational Data Architect來檢視、註解現有之data source,並且建立Mapping model來比較這些data source的差異,並且使用工具,自動產生可套用到WebSphere Information Integerator的程式

引用來源: http://www.ibm.com/developerworks/library/ar-rdaint/#resources

Use Rational Data Architect to integrate data sources

A five-step process for success

Davor Gornik (dgornik@us.ibm.com), Product Manager, IBM

Summary:  No doubt about it -- information integration is challenging. Many business decisions must be documented and many transformations must be performed. IBM Rational® Data Architect can document your decisions and automate part of this process. Read this article to explore a tool-supported process for federation design in just five steps.