在DB2中,一個資料庫只能屬於一個實例,一個實例可以對應多個資料庫,所以實例和資料庫的關系是一對多。
每個資料庫是由一組對象組成的,如:表、視圖、索引等。表是二維結構,由行和列組成,表數據存放在表空間里,表空間是資料庫的邏輯存儲層,每個資料庫可以包含多個表空間,每個表空間只能歸屬於一個資料庫,所以資料庫和表空間的關系是一對多。
所以DB2資料庫的邏輯結構分別為:實例-->資料庫-->表空間-->表。
物理結構:
每個表空間由一個或多個容器組成,容器是映射到物理存儲,容器可以是目錄、文件、裸設備。每個容器只能屬於一個表空間。根據數據管理方式,表空間可以分為系統管理(SMS)、資料庫管理(DMS)
DB2將表和索引存儲在PAGE頁里,page是db2中最小的物理分配單元,表中的每行數據只能包含在一頁中,不能跨頁。DB2支持的頁大小分為:4K、8K、16K、32K四種,當DB2在讀取數據的時候,不是按頁讀取,而是按照extent(塊)讀取,一個extent是由一組連續的頁組成。如果一個表空間有多個容器,為了數據均衡的分布,所以在寫數據的時候,按照循環的方式在各個容器里寫數據,當一個容器中寫滿一個extent的時候,將開始在第二個容器繼續寫extent,周而復始,可以提高讀寫的效率。
每個表空間由一個或多個容器組成,表空間為邏輯層次中,而真正的數據是存放在容器中的,容器是由多個extent組成。
DB2的存儲模型為:表空間---->容器---->extent------>page.。
在V8中,當每個PAGE的大小為32K的時候,表空間最大隻能容納256G。
在V9開始,當每個PAGE的大小為32K的時候,表空間最大可以容納16T。這就是大表空間(large)。從V9開始,默認創建的數據表空間均為大表空間。
② db2的數據類型都有哪些 用法
http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc/doc/r0008483.htm
③ db2資料庫把char類型直接改成varchar類型嗎
在資料庫設計的時候,VARCHAR和CHAR類型之間的使用,我和小唐發生了分歧。
我堅持要對表中的某些列,比如個性簽名,使用CHAR型的來存儲字元串信息。因為我認為使用CHAR一方面在資料庫檢索起來速度更快,同時在使用COBOL程序在邏輯上處理CHAR字元串生成的變數的時候,也相對簡單,只要直接給變數賦值就可以了,這樣子也便於程序的處理。而如果使用使用那個VARCHAR的話,數據檢索效率相對低,而在COBOL中需要首先給字元串的長度賦值,然後在給它的內容賦值。這樣子加大了程序的邏輯處理過程。還帶來了一定的風險,比如賦值的時候,如果賦值的長度超過了最大的值,就會使得程序執行的時候出現意想不到的後果。
而他認為,他使用CHAR類型,很容易浪費存儲空間,因為如果使用CHAR,無論存儲的字元串內容的長度是多長,都會使用它固定長度去存儲它。而使用VARCHAR則可以根據它實際的字元串長度去存儲數據。這個是VARCHAR類型最大的特點,也是它到現在在資料庫技術中還能存在的根本原因。
我開始對自己的想法變得有點懷疑。後來,我去網上找了找相關的資料,得知:
1,如果希望列中的數據值大小接近一致,請使用char;如果希望列中的數據值大小顯著不同,請使用varchar。
2,事實上,因為char類型通常要比varchar類型佔用更多的空間,所以從減少空間佔用量和減少磁碟i/o的角度,使用varchar類型反而更有利
3,當數據的長度相差較大時,使用char會浪費很多的空間,而使用varchar可以節約大量的空間,對於數據量比較大的情況,更能體現出兩者的差異。當數據長度比較固定(相差較小或固定不變)時,兩者的差別就不太大。
4,在查詢時,由於存儲方式上的不同,導致char欄位的查詢速度要好於varchar欄位,特別是對於在極大量的數據中查詢。
綜合上述因素,我採取了他的做法。後來才知道,其實,那些東西都已經是約定俗成了的。對於較長的字元串就是應該使用VARCHAR類型。看來自己還是有很多的東西值得去學習,而不是片面地從程序處理邏輯上來理解,判斷。
④ DB2資料庫中的time數據類型的形式是什麼樣的
可以在db2中創建時間欄位列時指定欄位類型為time型create table zzz(coltime time )這樣插入的值即為時間類型三段12:22:55.time類型本身會檢查欄位的輸入是否在24小時之內合法的格式,不然是插入不進去的,所以你不需要再通過語句alter table zzz add constraint timevalid check (coltime between '00:00:00' and '23:59:59')來重復指定約束時間段,這句完全多餘. db2的時間格式你可以通過語句<1> select current time from sysibm.al <2> select current timestamp from sysibm.al <3> select current date from sysibm.al來查看資料庫默認的日期格式.
⑤ db2資料庫blob類型怎麼查詢
1.第一步:進入DB2命令行模式,連接到需要導入信息的表所有在的資料庫。 db2 connect to db_name user username using password
2.第二步:輸入導出命令。 db2 export to D:\blob_data\blob_table.txt of del lobs to D:\blob_data lobfile lob_doc ...
⑥ Oracle 的NUMBER類型的數據在DB2 中最好用那種類型接收
不太明白 你為什麼 確認是 number,而不是 number(p,s)
如果是 資料庫表 的欄位 的數據類型, 一般都要指定 p,s 的吧 (當然s=0)算特例。
說回你的問題: Number 聲明一個浮點數 其精度為38
也就是說,你在db2中找到一個浮點數的數據類型,精度 38 的即可。參考下面2個類型:
*單精度浮點數(Single-precision floating-point),REAL:單精度浮點數是實數的 32 位近似值。數字可以為零,或者在從
-3.402E+38 到 -1.175E-37 或從 1.175E-37 到 3.402E+38
的范圍內。
*雙精度浮點數(Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或
FLOAT:雙精度浮點數是實數的 64 位近似值。數字可以為零,或者在從 -1.79769E+308 到 -2.225E-307 或從 2.225E-307 到
1.79769E+308 的范圍內。
⑦ DB2資料庫中數據類型問題
當然都不好了,儲存時間要不用數字型decimal,longint要不就是時間型datetime之類的,你那裡難道沒有參考手冊。
LONG VARGRAPHIC 這種是特殊類型,我也沒有見過,可能是可以儲存圖像類型吧?這個做不了准。
我覺得n8指的是decimal(8,0)
⑧ 如何使用db2ckbkp命令查看DB2資料庫備份的類型
db2ckbkp命令不僅可以用來檢查DB2資料庫備份文件的完整性,而且還可以用來查詢DB2資料庫備份文件的元數據,如果我們有一些備份文件,但是不知道備份的類型,我們可以使用db2ckbkp -H <備份文件>來檢查DB2資料庫備份的類型: #db2ckbkp -H WWQ.0.gmcw.NODE0000.CATN0000.20130107000019.001 我們可以通過上述輸出中的Backup Mode, Backup Type 和Backup Gran.來確定備份的類型,三個關鍵字的說明如下: Backup Mode 0 - offline(離線備份), 1 - online(聯機備份) Backup Type 0 - full(全備份), 3 - tablespace(表空間級備份) Backup Gran. 0 - normal(正常備份), 16 - incremental(增量備份), 48 - delta(增量delta備份) 其中incremental(增量備份)和delta(增量delta備份)的說明如下: Incremental(增量備份): 增量備份映像是自從上次最新的、成功的完全備份操作以來,更改過的所有資料庫數據的副本。也稱為累積備份映像,因為進行的一系列增量備份中的每一個都會有上次增量備份映像的內容。增量備份映像的前身通常是同一對象最新的、成功的完全備份。 Delta(增量delta備份): delta 備份映像或增量 delta 備份映像是自從上次相關表空間的成功備份(包括完整、增量或 delta 備份)以來,已更改過的所有資料庫數據的副本。也稱為差異備份映像或非累積備份映像。delta 備份映像的前身是最新的成功備份,包括 delta 備份映像中每個表空間的備份。 明確了上述數字的含義後,我們就可以很容易地辨別上述備份文件是屬於「聯機全備份」: Backup Mode -- 1 (聯機備份) Backup Type -- 0 (全備份) Backup Gran. -- 0 (正常備份)
⑨ java數據類型與db2數據類型的對照
時間可以直接使用字元串類型也行,因為所有的插入都是進行的字元串的操作
例如:insert into XX values("88-1-1")
只要你在插入之前把時間的格式轉化成功了就行了,其他的無所謂,根據下面類可以進行任意轉換了
public static Date getYear(String year) { //字元串轉換成時間
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = null;
try {
myDate = df.parse(year);
} catch (ParseException e) {
System.out.println("getYear error: " + e.getMessage());
}
return myDate;
}
//時間轉換成字元串
public static String getNowDateShort(Date currentTime) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
⑩ db2資料庫 怎麼修改一個欄位的數據類型
運行db2cc,在控制中心中右擊要修改的表,生成DDL,將該DDL中CREATE
TABLE命令包括表名進行相應修改後,運行該命令創建符合需要的新表。
然後insert
into
newtable
select
*
from
oldtable,如果可以兼容的話,否則你需要考慮怎麼修改一下。
最後刪除舊表,新表改名為舊表。
希望能幫到您。