DB2實例與數據庫關係及目錄結構

1.DB2實例和數據庫的目錄結構:

.1> [root@demo instance]# ./db2icrt -u fenced test
      DBI1070I  Program db2icrt completed successfully.
      [root@demo instance]# ./db2ilist
      db2inst1
      test

實例test創建成功後,在實例home目錄下生成了一個sqllib文件夾/home/test/sqllib,裏面是一些配置文件以及軟鏈接

到軟件安裝目錄的文件:

[test@demo sqllib]$ ll
total 92
drwxr-xr-x 2 test test  4096 Dec 28 16:11 adm
lrwxrwxrwx 1 root test    22 Dec 28 16:11 adsm -> /opt/ibm/db2/V9.7/adsm
drwxr-x--- 2 test test  4096 Dec 28 16:11 backup
lrwxrwxrwx 1 root test    21 Dec 28 16:11 bin -> /opt/ibm/db2/V9.7/bin
drwxrwsr-t 2 test test  4096 Dec 28 16:13 cfg
lrwxrwxrwx 1 root test    22 Dec 28 16:11 conv -> /opt/ibm/db2/V9.7/conv
-rwxr-xr-x 1 test test 10575 Dec 28 16:11 db2cshrc
drwxrwsrwt 4 test test  4096 Dec 28 16:18 db2dump ------->db2diag.log存放目錄
-rwxr-xr-x 1 test test  6650 Dec 28 16:11 db2profile
-rw-rw-r-- 1 test test 16384 Dec 28 16:13 db2systm   ---->實例配置文件get dbmcfg讀取
lrwxrwxrwx 1 root test    21 Dec 28 16:11 doc -> /opt/ibm/db2/V9.7/doc
drwxrwsr-t 4 test test  4096 Dec 28 16:11 function
lrwxrwxrwx 1 root test    23 Dec 28 16:11 gskit -> /opt/ibm/db2/V9.7/gskit
drwx------ 3 test test  4096 Dec 28 16:13 hmonCache
lrwxrwxrwx 1 root test    22 Dec 28 16:11 java -> /opt/ibm/db2/V9.7/java
lrwxrwxrwx 1 root test     5 Dec 28 16:11 lib -> lib32
lrwxrwxrwx 1 root test    23 Dec 28 16:11 lib32 -> /opt/ibm/db2/V9.7/lib32
drwxrwsr-t 2 test test  4096 Dec 28 16:11 log
lrwxrwxrwx 1 root test    22 Dec 28 16:11 misc -> /opt/ibm/db2/V9.7/misc
lrwxrwxrwx 1 root test    25 Dec 28 16:11 samples -> /opt/ibm/db2/V9.7/samples
drwxr-xr-x 3 test test  4096 Dec 28 16:11 security
drwxr-xr-x 3 test test  4096 Dec 28 16:11 security32
drwxrwxr-x 2 test test  4096 Dec 28 16:12 sqldbdir  -------->系統庫目錄
drwxrwsrwx 2 test test  4096 Dec 28 16:11 tmp
lrwxrwxrwx 1 root test    23 Dec 28 16:11 tools -> /opt/ibm/db2/V9.7/tools
drwxrwxrwx 2 test test  4096 Dec 28 16:13 uif
-rwxr-xr-x 1 test test     0 Dec 28 16:11 usercshrc
-rwxr-xr-x 1 test test     0 Dec 28 16:11 userprofile ------>實例環境變量文件

2>[test@demo ~]$ db2start
SQL1063N  DB2START processing was successful.
[test@demo ~]$ db2 create db testdb on /db2data dbpath on /db2cfg
DB20000I  The CREATE DATABASE command completed successfully.

成功創建數據庫testdb後,查看數據庫的2個目錄文件:

[test@demo db2data]$ cd /db2cfg -------------->數據庫目錄
[test@demo db2cfg]$ tree
.
`-- test ------------------------------------->實例名字
    `-- NODE0000 ----------------------------->節點名字
        |-- SQL00001 ------------------------->數據庫編號
        |   |-- SQLBP.1 ---------------------->緩衝池控制文件
        |   |-- SQLDBCON
        |   |-- SQLDBCONF--------------------->數據庫參數配置文件get db cfg讀取
        |   |-- SQLINSLK
        |   |-- SQLOGCTL.LFH.2 --------------->數據庫日誌控制文件,記錄LSN可用於崩潰恢復
        |   |-- SQLOGDIR --------------------->數據庫日誌目錄
        |   |   |-- S0000000.LOG
        |   |   |-- S0000001.LOG
        |   |   `-- S0000012.LOG
        |   |-- SQLOGMIR.LFH 
        |   |-- SQLSGF.1
        |   |-- SQLSPCS.1 -------------------->表空間控制文件使用list tablespace
        |   |-- SQLTMPLK
        |   |-- db2event
        |   |   `-- db2detaildeadlock
        |   |       |-- 00000000.evt
        |   |       `-- db2event.ctl
        |   |-- db2rhist.asc ------------------>數據庫歷史文件,使用list history瀏覽
        |   `-- db2rhist.bak
        `-- sqldbdir -------------------------->本地數據庫目錄
            |-- sqldbbak
            |-- sqldbdir
            `-- sqldbins
[test@demo TESTDB]$ cd /db2data  ----------->數據庫表等對象數據存放目錄
[test@demo db2data]$ tree
.
`-- test  ---------------------------------->實例名
    `-- NODE0000 --------------------------->節點名
        `-- TESTDB ------------------------->數據庫名字
            |-- T0000000 ------------------->系統表空間,存放數據字典
            |   `-- C0000000.CAT
            |-- T0000001 ------------------->臨時表空間,存放join排序等臨時數據
            |   `-- C0000000.TMP
            |       `-- SQLTAG.NAM
            |-- T0000002 ------------------->用戶表空間,存放表索引大對象等數據
            |   `-- C0000000.LRG
            `-- T0000003
                `-- C0000000.LRG


[test@demo ~]$ db2 list tablespace containers for 1 show detail

            Tablespace Containers for Tablespace 1

 Container ID                         = 0
 Name                                 = /db2data/test/NODE0000/TESTDB/T0000001/C0000000.TMP
 Type                                 = Path
 Total pages                          = 1
 Useable pages                        = 1
 Accessible                           = Yes

2.系統庫目錄與本地庫目錄

[root@demo instance]# locate sqldbdir|grep test|grep -v 'dir/'
/db2cfg/test/NODE0000/sqldbdir ------>本地庫目錄,db2 list db directory on /db2cfg可見
/home/test/sqllib/sqldbdir             ------->系統庫目錄,db2 list db directory可見


[test@demo NODE0000]$ db2 list db directory on /db2cfg 

 Local Database Directory on /db2cfg   ------>本地庫目錄
 Number of entries in the directory = 1
Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Database directory                   = SQL00001
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Home
 Catalog database partition number    = 0
 Database partition number            = 0

如果/db2cfg/test/NODE0000/sqldbdir目錄損壞,上面則不能輸出數據庫信息



[test@demo ~]$ db2 list db directory
 
System Database Directory     ------->系統庫目錄
 Number of entries in the directory = 1
Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Local database directory             = /db2cfg
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

如果/home/test/sqllib/sqldbdir目錄損壞或者沒有對數據庫編目,上面則不能輸出數據庫信息,
也就不能db2 connect to db了,如下:

[test@demo NODE0000]$ db2 uncatalog database testdb
DB20000I  The UNCATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is 
refreshed.

[test@demo NODE0000]$ db2 list db directory
SQL1057W  The system database directory is empty.  SQLSTATE=01606

重新編目數據信息,db2 list db directory則顯系統庫目錄裏有剛編目的數據庫:
[test@demo ~]$ db2 catalog database testdb on /db2cfg
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is 
refreshed.

[test@demo ~]$ db2 list db directory

 System Database Directory
 Number of entries in the directory = 1
 Database alias                       = TESTDB
 Database name                        = TESTDB
 Local database directory             = /db2cfg

3.DB2的實例與數據庫關係

實例也叫數據庫管理器(Database Manager),可以理解爲運行時環境包括一組進程/線程
和內存。如果數據庫是一個島嶼,實例就是通向島嶼的橋樑,刪除db2實例並不會刪除數據庫,
就是橋塌了島嶼依然在,重建實例就可以再次訪問數據庫,這與oracle數據庫非常不同,而
且db2是一個實例下可以有多個數據庫,但一個數據庫只能屬於一個實例,oracle剛好相反
一個實例只能有一個數據庫,但一個數據庫可以屬於多個實例比如RAC環境.

1>drop掉實例
[root@demo instance]# pwd
/opt/ibm/db2/V9.7/instance
[root@demo instance]# ./db2idrop test
DBI1070I  Program db2idrop completed successfully.

[root@demo instance]# ./db2ilist
 db2inst1

2>查看test的home目錄下的sqllib文件夾已經被刪除,但是並不影響
  數據庫的/db2data 和 /db2cfg目錄
[test@demo ~]$ pwd
/home/test
[test@demo ~]$ ll
total 0

3>重建實例
[root@demo instance]# ./db2icrt -u fenced test
   DBI1070I  Program db2icrt completed successfully.

4>系統庫目錄下沒有任何數據庫
[test@demo ~]$ db2 list db directory
SQL1057W  The system database directory is empty.  SQLSTATE=01606

---->查看本地庫目錄卻還在
[test@demo ~]$ db2 list db directory on /db2cfg  
 Local Database Directory on /db2cfg
 Number of entries in the directory = 1
Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Database directory                   = SQL00001
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Home

5>編目本地數據庫
[test@demo ~]$ db2 catalog database testdb on /db2cfg
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is 
refreshed.
[test@demo ~]$ db2 list db directory

 System Database Directory      ------>再次查看系統庫目錄也存在了testdb
 Number of entries in the directory = 1
Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Local database directory             = /db2cfg
 Database release level               = d.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

6>連接到數據庫,可查之前插入的數據
[test@demo ~]$ db2start
SQL1063N  DB2START processing was successful.
[test@demo ~]$ db2 connect to testdb

   Database Connection Information

 Database server        = DB2/LINUX 9.7.2
 SQL authorization ID   = TEST
 Local database alias   = TESTDB

[test@demo ~]$ db2 "select * from tb1"

ID          NAME      
----------- ----------
          1 yo1       
          2 yo2  

 

 

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