Chuẩn bị kỳ thi số 731 lấy chứng chỉ DBA (Quản trị cơ sở dữ liệu) DB2 9, Phần 2: Bố trí dữ liệu

Tìm hiểu cách tạo cơ sở dữ liệu DB2 và các cơ chế sẵn có để lưu trữ các bảng, chỉ mục và dữ liệu của bạn trong cơ sở dữ liệu. Hướng dẫn này tập trung vào việc phân đoạn, nén, và XML, tất cả đều là các khái niệm quan trọng về phát triển ứng dụng và hiệu năng hoạt động mà bạn cần biết để lưu trữ và truy cập dữ liệu một cách nhanh chóng và hiệu quả. Đây là bài thứ hai trong loạt bảy bài hướng dẫn chuẩn bị thi lấy chứng chỉ DB2 DBA mà bạn có thể sử dụng để giúp chuẩn bị kỳ thi Quản trị Cơ sở Dữ liệu DB2 V9 dành cho Linux, UNIX và Windows (kỳ thi 731).

Dwaine Snow, Giám đốc sản phẩm DB2, IBM

Ông đã trợ giúp tại chỗ về cơ sở dữ liệu DB2 và lập kế hoạch cho ứng dụng, lập kế hoạch và thực hiện dự án, thiết kế hệ thống OLDP lớn, phức tạp và hệ thống hỗ trợ ra quyết định, thiết kế cơ sở dữ liệu và ứng dụng, và tinh chỉnh hiệu năng, cũng như tích hợp hệ thống khách/chủ và hệ thống kế thừa. Dwaine đã viết một số sách và bài báo về DB2, bao gồm "DB2 Universal Database Advanced DBA Certification Guide and Reference (Tài liệu tham khảo và Hướng dẫn về chứng chỉ DBA Nâng cao Cơ sở dữ liệu phổ dụng DB2) và Understanding DB2: Learning Visually with Examples (Am hiểu DB2: Tìm hiểu trực quan qua các ví dụ), và ông đã trình bày báo cáo tại nhiều hội nghị trên toàn thế giới



06 11 2009

Trước khi bạn bắt đầu

Về loạt bài này

Nếu bạn đang chuẩn bị dự kỳ thi 731 lấy chứng chỉ quản trị cơ sở dữ liệu (DBA) DB2, bạn đã đến đúng chỗ -- đây là một kiểu tài liệu tự học. Loạt bảy bài hướng dẫn chuẩn bị lấy chứng chỉ DB2 này gồm các khái niệm chính mà bạn cần biết để làm bài kiểm tra. Hãy làm bài tập ở nhà của bạn ở đây và giảm bớt căng thẳng trong ngày kiểm tra.

Về tài liệu hướng dẫn này

Hướng dẫn này thảo luận về việc tạo cơ sở dữ liệu DB2, cũng như các phương thức khác nhau được sử dụng để đưa vào và lưu trữ các đối tượng trong một cơ sở dữ liệu. Hướng dẫn này tập trung vào việc phân đoạn, nén, và XML, tất cả đều là các khái niệm quan trọng về phát triển ứng dụng và hiệu năng hoạt động mà bạn cần biết để lưu trữ và truy cập dữ liệu một cách nhanh chóng và hiệu quả. Hướng dẫn này là bài thứ hai trong loạt bảy bài hướng dẫn mà bạn có thể sử dụng để giúp bạn chuẩn bị kỳ thi lấy Chứng chỉ Quản trị Cơ sở dữ liệu DB2 (kỳ thi 731). Tư liệu trong hướng dẫn này chủ yếu đề cập đến các mục tiêu trong Phần 2 của kỳ thi, có tiêu đề là Bố trí dữ liệu. Bạn có thể xem các mục tiêu này tạit: http://www-03.ibm.com/certify/tests/obj731.shtml.

Bạn cũng nên xem phần Tài nguyên ở phần cuối của hướng dẫn này để có nhiều thông tin hơn về quản trị máy chủ DB2.

Mục tiêu

Sau khi hoàn thành này hướng dẫn này, bạn sẽ có thể:

  • Tạo cơ sở dữ liệu.
  • Sử dụng các lược đồ.
  • Xác định nhiều trạng thái vùng bảng khác nhau.
  • Tạo và thao tác các đối tượng DB2
  • Tạo một vùng bảng SMS và hiểu được các đặc trưng của nó.
  • Hiểu biết về các đặc trưng và cách sử dụng việc lưu trữ tự động của DB2.
  • Thực hiện phân đoạn bảng và phân cụm đa chiều (MDC - Multi-dimensional clustering) trên các bảng của bạn.
  • Sử dụng phép nén bảng.
  • Sử dụng XML.

Các điều kiện tiên quyết

Để hiểu một số tư liệu trình bày trong hướng dẫn này, bạn cần phải quen thuộc với các thuật ngữ sau đây:

  • Đối tượng: Bất cứ cái gì trong một cơ sở dữ liệu mà có thể được tạo ra hoặc thao tác bằng SQL (ví dụ các bảng, các khung nhìn, các chỉ mục, các gói).
  • Bảng: Một cấu trúc logic được sử dụng để trình bày dữ liệu như là một tập hợp các hàng không sắp thứ tự với một số cột cố định. Mỗi cột chứa một bộ các giá trị, mỗi giá trị có cùng một kiểu dữ liệu (hoặc một kiểu phụ của kiểu dữ liệu của cột); các định nghĩa của các cột tạo thành cấu trúc bảng, và các hàng chứa dữ liệu thực tế của bảng.
  • Bản ghi (Record): Là lưu trữ của một hàng trong một bảng.
  • Trường (Field): Là lưu trữ của một cột trong một bảng.
  • Giá trị (Value): Một mục dữ liệu cụ thể, tại mỗi điểm giao nhau giữa một hàng và một cột trong một bảng cơ sở dữ liệu.
  • Structured Query Language (SQL-Ngôn ngữ truy vấn có cấu trúc ): Một ngôn ngữ được tiêu chuẩn hoá dùng để định nghĩa các đối tượng và thao tác dữ liệu trong một cơ sở dữ liệu quan hệ. (Để biết thêm chi tiết về SQL, xem hướng dẫn thứ tư trong loạt này).
  • Bộ tối ưu hoá DB2 (DB2 optimizer): Một thành phần của bộ tiền biên dịch SQL, nó chọn một sơ đồ truy cập cho một câu lệnh Ngôn ngữ Thao tác Dữ liệu SQL (DML) bằng cách mô hình hoá chi phí thi hành một vài sơ đồ truy cập có thể thay thế lẫn nhau và chọn ra sơ đồ nào có chi phí dự tính ít nhất.

Để dự kỳ thi DB2 9 DBA, bạn phải qua được kỳ thi số 730, Cơ bản DB2 9 (DB2 9 Fundamentals exam 730). Nếu có sẵn, chúng tôi khuyên bạn nên đọc loạt bài hướng dẫn Cơ bản DB2 (DB2 Fundamentals tutorial series) trước khi bắt đầu loạt bài này.

Mặc dù không phải tất cả các tư liệu thảo luận trong loạt bài hướng dẫn Cơ bản là cần thiết để hiểu được các khái niệm mô tả trong hướng dẫn này, bạn ít nhất phải có kiến thức cơ bản về:

  • Sản phẩm DB2.
  • Các công cụ DB2.
  • Các cá thể DB2.
  • Cơ sở dữ liệu.
  • Đối tượng cơ sở dữ liệu.

Yêu cầu về hệ thống

Bạn không cần một bản sao của DB2 để hoàn thành hướng dẫn này. Tuy nhiên, bạn sẽ thu nhận được nhiều hơn từ hướng dẫn này nếu bạn tải về phiên bản dùng thử miễn phí IBM DB2 9 để làm việc cùng với hướng dẫn này.


Tạo một cơ sở dữ liệu

Các thư mục cơ sở dữ liệu

Với mỗi cá thể trình quản trị cơ sở dữ liệu tồn tại một tệp chỉ dẫn (directory) cơ sở dữ liệu hệ thống, tệp tin này chứa một mục dành cho mỗi cơ sở dữ liệu đã được lên danh mục cho cá thể này. Cơ sở dữ liệu được ngầm lên danh mục khi lệnh create database được phát ra, và cũng có thể được lên danh mục một cách tường minh với lệnh catalog database (lên danh mục cơ sở dữ liệu).

Một tệp chỉ dẫn (directory) cơ sở dữ liệu cục bộ tồn tại trong mỗi ổ đĩa hoặc đường dẫn trong đó cơ sở dữ liệu đã được định nghĩa. Tệp chỉ dẫn này chứa một mục dành cho mỗi cơ sở dữ liệu có thể truy cập từ vị trí đó.

Tạo một cơ sở dữ liệu

Khi bạn tạo ra một cơ sở dữ liệu, từng tác vụ sau đây được thực hiện:

  • Thiết đặt tất cả các bảng danh mục hệ thống mà cơ sở dữ liệu cần đến.
  • Cấp phát nhật ký khôi phục cơ sở dữ liệu.
  • Tạo tệp tin cấu hình cơ sở dữ liệu và bộ các giá trị mặc định.
  • Kết buộc các tiện ích cơ sở dữ liệu với cơ sở dữ liệu.

Lệnh create database

Để tạo một cơ sở dữ liệu, sử dụng lệnh:

create database

Bạn có thể chỉ rõ thêm các tuỳ chọn sau đây:

  • Đường dẫn lưu trữ.
  • Số của phân đoạn cơ sở dữ liệu cho phân đoạn danh mục đó.
  • Ổ đĩa hoặc đường dẫn trên đó tạo ra cơ sở dữ liệu.
  • Bộ mã ký tự (codeset) và vùng lãnh thổ.
  • Tuần tự sắp xếp chuỗi ký tự (Collating sequence).
  • Kích thước dải trang (extent) mặc định (N.D: cùng với trang (page), dải trang (extent) là đơn vị cơ sở để tổ chức không gian nhớ. Một dải trang là 8 trang nhớ liền nhau, hay 64 KB).
  • Cơ sở dữ liệu có được tự động lập cấu hình hay không.
  • Các định nghĩa vùng bảng của các vùng bảng CATALOG, TEMPORARY, và USERSPACE1.

Cơ sở dữ liệu mặc định

Lệnh create database tạo ra ba vùng bảng mặc định:

SYSCATSPACE
Dùng cho các bảng danh mục hệ thống. SYSCATSPACE không thể bị hủy đi.
TEMPSPACE1
Dùng cho các bảng tạm thời được hệ thống tạo ra. Vùng bảng TEMPSPACE1 có thể được hủy bỏ khi đã tạo ra một vùng bảng do người sử dụng tạo ra khác.
USERSPACE1
Vùng bảng mặc định cho đối tượng được người sử dụng tạo ra. Vùng bảng USERSPACE1 có thể được hủy bỏ khi đã tạo ra một vùng bảng do người sử dụng tạo ra khác.

Danh mục hệ thống

Một tập hợp các bảng danh mục hệ thống được tạo ra và duy trì cho từng cơ sở dữ liệu. Các bảng này chứa thông tin về các định nghĩa của đối tượng cơ sở dữ liệu (ví dụ như bảng, khung nhìn, chỉ mục, các gói) và thông tin bảo đảm an ninh cho các kiểu truy cập mà người sử dụng có đối với các đối tượng này. Các bảng này được lưu trong vùng bảng SYSCATSPACE.

Cấu trúc thư mục

Lệnh create database cho phép bạn quy định ổ đĩa hoặc thư mục trên đó tạo ra cơ sở dữ liệu, tuỳ thuộc vào hệ điều hành.

Nếu không quy định ổ đĩa hoặc thư mục, cơ sở dữ liệu được tạo ra trên đường dẫn được xác định bởi tham số cấu hình DFTDBPATH của cá thể (trình quản trị cơ sở dữ liệu).

Nếu không quy định ổ đĩa hoặc thư mục, và tham số cấu hình mức cá thể DFTDBPATH, cơ sở dữ liệu được tạo ra trên ổ đĩa hoặc đường dẫn nơi lệnh create database đã được thi hành.

Lệnh create database tạo ra một loạt các thư mục con. Thư mục con đầu tiên được đặt tên theo tên chủ sở hữu cá thể của cá thể mà trong đó cơ sở dữ liệu đã được tạo ra. Dưới thư mục con này, DB2 tạo ra một thư mục cho biết cơ sở dữ liệu đã được tạo ra trong phân đoạn cơ sở dữ liệu nào.

Đối với một cơ sở dữ liệu không phân đoạn, thư mục này sẽ là NODE0000. Đối với một cơ sở dữ liệu được phân đoạn, thư mục sẽ được đặt tên là NODExxxx, trong đó xxxx sẽ là bốn chữ số, là số hiệu phân đoạn của cá thể cơ sở dữ liệu như đã quy định trong tệp tin db2node.cfg. Ví dụ, đối với phân đoạn số 43, thư mục sẽ là NODE0043.

Trong Windows, các cá thể không thực sự có một chủ sở hữu cá thể, do đó tên của cá thể này (ví dụ, DB2) sẽ được sử dụng thay cho mã nhận dạng của chủ sở hữu cá thể.

Do có hơn một cơ sở dữ liệu có thể được tạo ra trên cùng một ổ đĩa hoặc thư mục, mỗi cơ sở dữ liệu phải có thư mục con của chính nó. Dưới thư mục NODExxxx, sẽ có một thư mục SQLxxxxx cho mỗi cơ sở dữ liệu đã được tạo ra trên ổ đĩa hoặc thư mục ấy. Ví dụ, hãy tưởng tượng chúng ta có hai cơ sở dữ liệu, DBASM và SAMPLE, mà cả hai đã được tạo ra trên ổ C: trên Windows. Sẽ có hai thư mục: SQL00001 và SQL00002.

Để xác định thư mục trong đó cơ sở dữ liệu đã được tạo ra, gõ nhập lệnh list database directory on C:. Việc này sẽ tạo ra kết quả tương tự như sau:

Thư mục cơ sở dữ liệu

Trong ví dụ trên, cơ sở dữ liệu SAMPLE đã được tạo ra trong thư mục SQL00001 và cơ sở dữ liệu DBASM đã được tạo ra trong thư mục SQL00002 dưới thư mục NODExxxx.

Theo mặc định:

  • Vùng bảng danh mục hệ thống (SYSCATSPACE) sẽ sử dụng thư mục SQLT0000.0
  • Vùng bảng tạm thời hệ thống (TEMPSPACE1) sẽ sử dụng thư mục SQLT0001.0
  • Vùng bảng người sử dụng mặc định (USERSPACE1) sẽ sử dụng thư mục SQLT0002.0

Các ví dụ lệnh create database trên Linux/Unix

Để tạo một cơ sở dữ liệu trên thư mục /database, sử dụng lệnh sau đây:

create database sample on /database

Nếu lệnh này đã được thi hành trong cá thể có tên là dbinst, trên máy chủ nơi phân đoạn cơ sở dữ liệu số 0 được định nghĩa, cấu trúc thư mục sau đây sẽ được tạo ra:

  • /database/dbinst/NODE0000/sqldbdir
  • /database/dbinst/NODE0000/SQL00001

Các ví dụ lệnh create database trên Windows

Để tạo một cơ sở dữ liệu trên ổ D:, sử dụng lệnh sau đây:

create database sample on D:

Nếu lệnh này đã được thi hành trong cá thể có tên là dbinst, trên máy chủ nơi phân đoạn cơ sở dữ liệu số 0 được định nghĩa, cấu trúc thư mục sau đây sẽ được tạo ra:

  • D:\dbinst\NODE0000\sqldbdir
  • D:\dbinst\NODE0000\SQL00001

Tạo vùng bảng USERSPACE1 là vùng do cơ sở dữ liệu quản lý (DMS)

Để tạo một cơ sở dữ liệu và định nghĩa vùng bảng USERSPACE1 là vùng được cơ sở dữ liệu quản lý (DMS - database managed space), bằng cách sử dụng hai thùng chứa tệp tin, hãy dùng lệnh sau đây:

Trên Linux hoặc UNIX:

create database sample2 user table space managed by database 
            using(file '/dbfiles/cont0' 5000, file '/dbfiles/cont1' 5000)

Trên Windows:

create database sample2 user table space managed by database 
            using(file 'c:\dbfiles\cont0' 5000, file 'c:\dbfiles\cont1' 5000)

Tạo vùng bảng TEMPSPACE1 với các thùng chứa do người sử dụng định nghĩa

Để tạo một cơ sở dữ liệu và định nghĩa vùng bảng TEMPSPACE1 để sử dụng hai thùng chứa SMS (xem vùng bảng SMS), sử dụng lệnh sau đây:

Trên Linux hoặc UNIX:

create database sample3 temporary tablespace managed by system 
            using('/dbfiles/cont0', '/dbfiles/cont1')

Trên Windows:

create database sample3 temporary tablespace managed by system 
            using('c:\dbfiles\cont0', 'c:\dbfiles\cont1')

Thay đổi tuần tự sắp xếp chuỗi ký tự cho cơ sở dữ liệu

Lệnh (trong Linux và UNIX):

create database SAMPLE on /mydbs collate using identity

hoặc trên Windows:

create database SAMPLE on D: collate using identity

tạo ra một cơ sở dữ liệu và so sánh các chuỗi ký tự theo từng byte một, do tuần tự sắp xếp (collating sequence) đã được thiết đặt là identity.


Lưu trữ tự động

Lưu trữ tự động là gì?

Lưu trữ tự động, điểm mới trong DB2 V9, cho phép bạn chỉ rõ một hoặc nhiều đường dẫn lưu trữ cho một cơ sở dữ liệu. Sau đó khi bạn tạo ra vùng bảng, chúng sẽ được DB2 tự động đặt vào đường dẫn lưu trữ. Bạn có thể bật cho phép hoặc lập cấu hình lưu trữ tự động cho một cơ sở dữ liệu khi nó được tạo ra, như sau:

db2 create database db_name automatic storage yes
db2 create database db_name on db_path1, db_path2

Bạn có thể thêm các đường dẫn lưu trữ vào một cơ sở dữ liệu đã thiết đặt lưu trữ tự động bằng cách sử dụng tham số add storage, như sau:

db2 alter database db_name add storage on  db_path3

Sử dụng lưu trữ tự động

Một khi cơ sở dữ liệu của bạn đã được thiết đặt để lưu trữ tự động, bạn có thể tạo vùng bảng bằng cách sử dụng cơ chế này. Bạn có một số cách để tận dụng việc lưu trữ tự động một khi cơ sở dữ liệu đã được thiết lập như vậy. Bạn có thể chỉ cần tạo ra một vùng bảng trong cơ sở dữ liệu (một khi bạn được kết nối với cơ sở dữ liệu), như sau:

db2 create tablespace ts_name

Hoặc, bạn có thể tạo ra một vùng bảng và qui định kích thước ban đầu của nó và các đặc trưng tăng trưởng, như sau:

db2 create tablespace ts_name
	initialsize 10M
	increasesize 10M
	maxsize 100M

Trong thí dụ này vùng bảng sẽ bắt đầu ở 10MB, và khi nó gần đầy, DB2 sẽ tự động mở rộng mỗi lần 10MB, cho đến kích thước tối đa 100MB.

Nếu cơ sở dữ liệu không được thiết lập để lưu trữ tự động, bạn vẫn có thể sử dụng việc lưu trữ tự động đối với một vùng bảng nếu bạn tạo ra nó và chỉ rõ việc lưu trữ của nó là tự động:

  db2 create tablespace ts_name
	managed by automatic storage

Sử dụng lược đồ (schema)

Lược đồ là gì?

Một lược đồ là một tên phân biệt ở mức cao cho các đối tượng cơ sở dữ liệu được tạo ra bên trong một cơ sở dữ liệu. Nó là một bộ sưu tập của các đối tượng cơ sở dữ liệu chẳng hạn như các bảng, khung nhìn, chỉ mục, hoặc các kích hoạt (triggers). Nó đem lại sự phân loại logic các đối tượng cơ sở dữ liệu.

Khi bạn tổ chức dữ liệu của bạn thành các bảng, có thể sẽ có lợi khi nhóm lại với nhau các bảng và các đối tượng liên quan khác. Điều này được thực hiện bằng cách định nghĩa một lược đồ, sử dụng lệnh create schema. Thông tin về lược đồ được giữ trong bảng danh mục hệ thống của cơ sở dữ liệu mà bạn đang kết nối. Khi các đối tượng khác được tạo ra, chúng có thể được đặt trong lược đồ này.

Các lược đồ hệ thống

Một tập hợp các lược đồ hệ thống được tạo ra với từng cơ sở dữ liệu và được đặt vào vùng bảng SYSCATSPACE:

SYSIBM
Đây là các danh mục hệ thống cơ bản. Không nên truy cập trực tiếp.
SYSCAT
Quyền SELECT cấp cho PUBLIC trên lược đồ này. Đây là các khung nhìn chỉ đọc của danh mục. Khuyến cáo nên dùng cách này để lấy thông tin danh mục.
SYSSTAT
Đây là các khung nhìn danh mục có thể cập nhật được -- nó ảnh hưởng đến trình tối ưu hoá.
SYSFUN
Các hàm được người sử dụng định nghĩa.

Lược đồ được sử dụng trong DB2 như thế nào?

Sử dụng một lược đồ để có tên phân biệt đầy đủ cho một bảng hoặc đối tượng khác, như sau:

schemaname.tablename

Bạn có thể có nhiều bảng có cùng tên nhưng tên lược đồ khác nhau. Như vậy, bảng user1.staff không giống như user2.staff. Kết quả là bạn có thể sử dụng lược đồ để tạo cơ sở dữ liệu logic trong một cơ sở dữ liệu DB2.

Để tạo một lược đồ, sử dụng lệnh create schema (tạo lược đồ).

Ai có thể sử dụng lược đồ?

Khi bạn có thể tạo ra một lược đồ, bạn có thể chỉ rõ chủ sở hữu của lược đồ bằng cách sử dụng từ khóa authorization; nếu bạn không làm như vậy, mã nhận dạng (ID) ủy quyền đã thực hiện lệnh create schema sẽ là chủ sở hữu của lược đồ. Các đặc quyền với lược đồ cũng có thể đồng thời được cấp cho những người sử dụng hoặc các nhóm người sử dụng. (Xem Phần 1 trong loạt bài này để có nhiều thông tin hơn về đặc quyền.)

Một khi lược đồ đã tồn tại, chủ sở hữu của lược đồ có thể cấp đặc quyền CREATE_IN trên lược đồ cho những người sử dụng hoặc các nhóm khác.

Chỉ rõ lược đồ khi tạo ra một đối tượng

Tên lược đồ dành cho một đối tượng có thể được chỉ rõ tường minh như sau:

create table DWAINE.table1 (c1 int, c2 int)

Nếu người sử dụng DWAINE kết nối cơ sở dữ liệu SAMPLE, và phát ra lệnh sau:

create table t2 (c1 int)

Lược đồ DWAINE được tạo ra (chừng nào mà IMPLICT_SCHEMA chưa bị thu hồi lại từ người sử dụng DWAINE), cũng như bảng t2 trong cơ sở dữ liệu.

Mã nhận dạng được sử dụng để kết nối cơ sở dữ liệu gọi là mã nhận dạng ủy quyền.

Chỉ rõ lược đồ khi sử dụng các lệnh thao tác dữ liệu (DML)

Khi sử dụng các lệnh thao tác dữ liệu (ví dụ như select, insert, update, delete) trên các đối tượng cơ sở dữ liệu:

  • Có thể chỉ rõ tường minh lược đồ của đối tượng trong tên đối tượng, chẳng hạn như schema1.table1.
  • Có thể chỉ rõ lược đồ của đối tượng bằng cách sử dụng lệnh set set current schema hoặc set current sqlid.
  • Nếu không có lược đồ đối tượng nào được chỉ rõ tường minh, lược đồ sẽ được đặt là mã nhận dạng (ID) ủy quyền hiện tại.

Ví dụ, nếu người sử dụng DWAINE kết nối cơ sở dữ liệu SAMPLE và phát ra lệnh sau:

select * from t2

bảng được chọn là DWAINE.T2, nếu có bảng này. Nếu không thì sẽ trả về một lỗi.


Các trạng thái vùng bảng

Xác định một trạng thái của vùng bảng

Để tìm trạng thái vùng bảng trong cơ sở dữ liệu:

list tablespaces show detail

Các trạng thái vùng bảng

Một vùng bảng có thể có một số trạng thái khác nhau, như dưới đây.

Trạng thái vùng bảng khác nhau


Tạo và thao tác các đối tượng DB2 khác nhau

Giới thiệu

Phần này thảo luận về mục đích và cách sử dụng:

  • Vùng đệm.
  • Vùng bảng.
  • Bảng và chỉ mục.
  • Khung nhìn.
  • Cột nhận dạng.
  • Bảng tạm.
  • Ràng buộc.
  • Các kích hoạt.

Vùng đệm

Khu vực vùng đệm cơ sở dữ liệu là một đoạn bộ nhớ được sử dụng để ghi nhớ sẵn (cache) chỉ mục của một bảng và các trang dữ liệu khi chúng đang được đọc vào từ đĩa để tìm kiếm hoặc sửa đổi. Khu vực vùng đệm giúp cải thiện hiệu năng hệ thống cơ sở dữ liệu bằng cách cho phép dữ liệu được truy cập từ bộ nhớ thay vì từ đĩa. Do việc truy cập bộ nhớ nhanh hơn nhiều so với truy cập đĩa, DB2 ít khi phải đọc vào từ đĩa hoặc ghi ra đĩa, hệ thống sẽ hoạt động tốt hơn.

Khi một cơ sở dữ liệu được tạo ra, một vùng đệm mặc định được tạo ra cho cơ sở dữ liệu đó. Vùng đệm IBMDEFAULTBP này có kích thước trang 4 KB và tổng kích thước tuỳ thuộc vào hệ điều hành. Đối với Windows, vùng đệm mặc định là 250 trang hay là 1 MB; đối với UNIX, vùng đệm mặc định là 1.000 trang hoặc 4 MB. Vùng đệm mặc định không thể bị hủy bỏ, nhưng kích thước của nó có thể được thay đổi bằng cách sử dụng lệnh alter bufferpool.

Tạo một vùng đệm

Lệnh create bufferpool có các tùy chọn để chỉ rõ những thứ sau đây:

Tên vùng đệm
Quy định tên của vùng đệm. Tên gọi này không thể được sử dụng cho bất kỳ vùng đệm khác và không thể bắt đầu bằng ký tự SYS hoặc IBM.
immediate
Quy định rằng vùng đệm sẽ được tạo ra ngay nếu có đủ bộ nhớ sẵn có trên hệ thống. Nếu không có đủ không gian dự trữ trong bộ nhớ chia sẻ cơ sở dữ liệu để cấp phát vùng đệm mới, một cảnh báo được trả lại, và việc tạo ra vùng đệm sẽ được DEFERRED (tạm hoãn), như mô tả dưới đây. (immediate là mặc định.)
deferred
Quy định rằng vùng đệm sẽ được tạo ra lần sau lúc mà cơ sở dữ liệu bị ngừng và khởi động lại.
all dbpartitionnumbs
Quy định rằng vùng đệm sẽ được tạo ra trên tất cả các phân đoạn trong cơ sở dữ liệu. Đây là mặc định nếu không có nhóm phân đoạn cơ sở dữ liệu nào được chỉ rõ.
database partition group
Chỉ rõ các nhóm phân đoạn cơ sở dữ liệu trên đó vùng đệm sẽ được tạo ra. Vùng đệm sẽ được tạo ra trên tất cả các phân đoạn cơ sở dữ liệu mà là một phần của nhóm phân đoạn cơ sở dữ liệu đã nêu.
size
Quy định kích thước của vùng đệm và được xác định bằng số lượng trang. Trong một cơ sở dữ liệu được phân đoạn, đây sẽ là kích thước mặc định cho tất cả các phân đoạn cơ sở dữ liệu nơi các vùng đệm hiện hữu.
numblockpages
Quy định số trang được tạo ra trong vùng dựa theo khối của vùng đệm. Giá trị thực tế của numblockpages có thể khác với giá trị đã quy định do kích thước phải là một bội số của kích thước khối blocksize. Vùng dựa theo khối của vùng đệm không thể nhiều hơn 98 phần trăm tổng kích thước vùng đệm. Quy định một giá trị bằng 0 sẽ vô hiệu hóa nhập xuất (I/O) theo khối cho vùng đệm.
blocksize
Quy định số lượng trang trong một khối đã cho trong vùng dựa theo khối của vùng đệm. Kích thước khối phải trong khoảng 2 và 256 trang; giá trị mặc định là 32 trang.
pagesize
Quy định kích thước trang được sử dụng cho vùng đệm. Kích thước trang mặc định là 4 KB hoặc 4.096 byte. Kích thước trang có thể được quy định bằng byte hoặc kilobyte.
extended storage/not extended storage
Quy định liệu các trang nạn nhân vùng đệm (victim pages) có được sao chép vào một bộ nhớ sẵn (cache) thứ cấp có tên là vùng lưu trữ mở rộng (extended storage). hay không. Việc lấy dữ liệu từ nơi lưu trữ mở rộng có hiệu quả hơn so với việc lấy nó từ đĩa nhưng kém hiệu quả hơn so với việc lấy nó từ vùng đệm, do đó nó không áp dụng cho môi trường 64-bit.

Một khi một kích thước trang và tên cho một vùng đệm đã được xác định, chúng không thể thay đổi.

Các ví dụ lệnh create bufferpool

Lệnh sau đây:

create bufferpool BP1 size 25000

tạo ra một vùng đệm có tên là BP1 với kích thước 100 MB (25.000 trang 4KB).Do kích thước trang không được chỉ rõ, vùng đệm sử dụng kích thước trang mặc định 4 KB. Do tuỳ chọn IMMEDIATE là mặc định, vùng đệm được cấp phát ngay và sẵn có để sử dụng khi có đủ bộ nhớ sẵn có để hoàn thành yêu cầu.

Lệnh sau đây:

create bufferpool BP2 size 25000 pagesize 8 K

tạo ra một vùng đệm có tên BP2 với kích thước 200 MB (25.000 trang 8 KB). Vùng đệm sử dụng một kích thước trang 8 KB. Do tuỳ chọn immediate là mặc định, vùng đệm được cấp phát ngay và có sẵn để dùng khi có đủ bộ nhớ sẵn có để hoàn thành yêu cầu.

Lệnh sau đây:

create bufferpool BP3 deferred size 1000000

tạo ra một vùng đệm có tên là BP3 với kích thước 4 GB (1,000,000 trang 4KB). Do kích thước trang không được chỉ rõ, vùng đệm sử dụng kích thước trang mặc định 4 KB. Do chỉ rõ tuỳ chọn là deferred vùng đệm không được cấp phát, cho đến khi cơ sở dữ liệu bị ngừng và khởi động lại.

Tạo bảng

Để tạo một bảng trong một cơ sở dữ liệu, trước hết bạn phải được kết nối với cơ sở dữ liệu. Bạn cũng phải có quyền SYSADM trong cá thể này, hoặc quyền DBADM hoặc đặc quyền createtab trong cơ sở dữ liệu.

Khi tạo một bảng, bạn có thể chỉ rõ những thứ sau đây:

  • Lược đồ.
  • Tên bảng.
  • Định nghĩa cột.
  • Khoá chính/khoá ngoại
  • Vùng bảng cho dữ liệu, chỉ mục, và các đối tượng dài.

Hình dưới đây trình bày một ví dụ.

Tạo cú pháp bảng

Bảng được tạo ra ở đâu?

Nếu một bảng được tạo ra mà không có mệnh đề in, dữ liệu bảng (và các chỉ mục và dữ liệu LOB của nó) được đặt theo thứ tự sau đây:

  • Trong vùng bảng IBMDEFAULTGROUP, nếu nó tồn tại và nếu kích thước trang là đủ dùng.
  • Trong một vùng bảng do người sử dụng tạo ra, cái mà có kích thước trang nhỏ nhất đủ cho bảng.
  • Trong USERSPACE1, nếu nó tồn tại và có một kích thước trang đủ dùng.

Các mệnh đề IN, INDEX IN, và LONG IN quy định các vùng bảng trong đó dữ liệu bảng thông thường, chỉ mục, và các đối tượng dài được lưu giữ. Lưu ý rằng điều này chỉ áp dụng cho các vùng bảng DMS.

Nhận thông tin bảng

Bạn có thể nhận được thông tin bảng với các lệnh sau đây:

LệnhMô tả
list tablesLiệt kê các bảng của người sử dụng hiện tại.
list tables for allLiệt kê tất cả các bảng được định nghĩa trong cơ sở dữ liệu.
list tables for schema schemanameLiệt kê các bảng của lược đồ đã nêu tên.
describe table tablenameTrình bày cấu trúc của bảng đã nêu tên.

Ví dụ, lệnh sau đây:

describe table department

tạo ra kết quả sau:

Mô tả kết quả bảng

Chỉ mục

Một chỉ mục có thể:

  • Theo chiều tăng hoặc chiều giảm (mặc định, nếu không chỉ rõ, là theo chiều tăng).
  • Là duy nhất hay không duy nhất (mặc định, nếu không chỉ rõ, là không duy nhất).
  • Là phức hợp.
  • Sử dụng để ép buộc phân cụm.
  • Hai hướng -- việc này được điều khiển bằng tùy chọn allow hay disallow reverse scans
  • Gồm thêm các cột bổ sung -- Việc này chỉ áp dụng cho các chỉ mục duy nhất.

Dưới đây là một số lệnh create unique minh họa các tùy chọn này:

create unique index itemno on albums (itemno) desc
create index clx1 on stock (shipdate) cluster allow reverse scans
create unique index incidx on stock (itemno) include (itemname)
create index item on stock (itemno) disallow reverse scans collect detailed statistics

Cột nhận dạng

Một cột nhận dạng là một cột kiểu số trong một bảng làm cho DB2 tự động tạo ra một giá trị số duy nhất cho mỗi hàng được chèn vào bảng. Một bảng có thể có tối đa một cột nhận dạng. Các giá trị cho cột có thể được DB2 tạo ra theo chế độ luôn luôn hoặc theo mặc định:

  • Nếu các giá trị luôn luôn được tạo ra, cơ sở dữ liệu DB2 luôn luôn tạo ra chúng, và các ứng dụng không được phép cung cấp một giá trị tường minh.
  • Nếu các giá trị được tạo ra theo mặc định, thì các giá trị đó có thể được cung cấp một cách tường minh bởi một ứng dụng; DB2 tạo ra một giá trị chỉ khi nào ứng dụng đó không cung cấp nó. Như vậy, DB2 không thể đảm bảo tính duy nhất của các giá trị. Tùy chọn này dành cho việc truyền dữ liệu, hoặc nạp lên hay giải phóng dữ liệu từ một bảng.

Hãy xem xét một ví dụ. Cho trước bảng được tạo ra bằng cách sử dụng lệnh sau đây:

create table inventory (partno INTEGER GENERATED ALWAYS AS IDENTITY
          (START WITH 100 INCREMENT BY 1), description CHAR(20) )

Và các lệnh sau đây:

Câu lệnhKết quả
insert into inventory VALUES (DEFAULT,'door') 
insert into inventory (description) VALUES ('hinge') 
insert into inventory VALUES (200,'windor') 
insert into inventory (description) VALUES ('frame')
inserts 100,door
inserts 101,hinge
error
inserts 102,frame

Sau đó lệnh SELECT * FROM inventory cho ra kết quả như sau:

100 door
101 hinge
102 frame

Khung nhìn (view)

Khung nhìn được làm ra từ một hoặc nhiều bảng cơ sở, biệt danh (nickname), hoặc khung nhìn khác, và có thể được dùng thay cho bảng cơ sở khi lấy dữ liệu. Khi thực hiện các thay đổi dữ liệu hiển thị trong một khung nhìn, dữ liệu được thay đổi trong chính bảng của nó. Một khung nhìn có thể được tạo ra để hạn chế truy cập vào dữ liệu nhạy cảm, trong khi cho phép nhiều truy cập phổ thông hơn đến các dữ liệu khác.

Dữ liệu cho một khung nhìn không được lưu tách riêng khỏi bảng. Nói cách khác, một khung nhìn không sử dụng một chút không gian nào trong cơ sở dữ liệu, ngoài định nghĩa của nó trong các danh mục hệ thống.

Người tạo ra khung nhìn cần có ít nhất đặc quyền SELECT trên các bảng cơ sở tham chiếu trong định nghĩa khung nhìn.

Thông tin về tất cả các khung nhìn hiện hữu được lưu trữ trong:

  • SYSCAT.VIEWS
  • SYSCAT.VIEWDEP
  • SYSCAT.TABLES

Các lệnh create view sau đây cho biết các khung nhìn làm việc như thế nào:

create view DEPTSALARY AS SELECT DEPTNO, DEPTNAME, SUM(SALARY) 
          AS TOTALS FROM PAYROLL GROUP BY DEPTNO,DEPTNAME
create view EMPSALARY AS SELECT EMPNO, EMPNAME, SALARY FROM PAYROLL, 
          PERSONNEL WHERE EMPNO=EMPNUMB

Tuỳ chọn with check option

Tuỳ chọn with check option quy định ràng buộc mà mỗi hàng được chèn vào hoặc được cập nhật thông qua một khung nhìn phải tuân thủ với định nghĩa của khung nhìn. Một hàng không tuân thủ định nghĩa khung nhìn là một hàng mà không đáp ứng được các điều kiện tìm kiếm của khung nhìn.

Ví dụ, xem xét lệnh này:

create view emp_view2 (empno, empname, deptno) AS (SELECT id, name, 
          dept FROM employee WHERE dept = 10)with check option

Khi khung nhìn này được sử dụng để chèn hoặc cập nhật với các giá trị mới, tuỳ chọn with check option hạn chế các giá trị đầu vào đối với cột dept.

Ràng buộc

Có một số kiểu ràng buộc trong DB2:

  • Ràng buộc toàn vẹn tham chiếu.
  • Ràng buộc duy nhất.
  • Ràng buộc kiểm tra.
  • Ràng buộc mang thông tin.

Bạn không thể trực tiếp sửa đổi một ràng buộc; thay vào đó, bạn phải hủy bỏ nó và tạo ra một ràng buộc mới với các đặc trưng mà bạn muốn

Các ràng buộc được thảo luận dưới đây.

Ràng buộc toàn vẹn tham chiếu

Ràng buộc toàn vẹn tham chiếu được định nghĩa khi tạo ra một bảng, hoặc sau đó bằng cách sử dụng lệnh alter table.

Các mệnh đề thiết lập toàn vẹn tham chiếu là:

  • Mệnh đề khóa chính.
  • Mệnh đề ràng buộc duy nhất.
  • Mệnh đề khoá ngoại.
  • Mệnh đề tham chiếu

Ví dụ:

create table artists (artno INT, ...  primary key (artno) foreign key dept (workdept) 
          references department on delete no action)

Chúng ta hãy xem xét các quy tắc toàn vẹn tham chiếu khác nhau.

Quy tắc chèn:

  • Có một quy tắc ngầm là rút lại thao tác chèn nếu không tìm thấy phần tử cha (parent).

Các quy tắc xóa:

  • Restrict: Một hàng cha không bị xóa nếu tìm thấy các hàng phụ thuộc nó.
  • Cascade (theo tầng): Xóa một hàng trong một bảng cha sẽ tự động xóa bất kỳ hàng nào liên quan trong một bảng phụ thuộc.
  • No Action (Không thực hiện, là mặc định): Ép buộc sự có mặt của hàng cha đối với mỗi phần tử con (child) sau khi tất cả các ràng buộc tham chiếu khác được áp dụng.
  • Set Null: Các trường khóa ngoại đặt giá trị là null; các cột khác giữ nguyên.

Các quy tắc cập nhật:

  • Restrict: Một cập nhật cho một khóa cha sẽ bị từ chối nếu một hàng trong một bảng phụ thuộc khớp với các giá trị gốc của khoá.
  • No Action (mặc định): Một cập nhật khoá cha sẽ bị từ chối nếu không có hàng nào khớp trong bảng phụ thuộc.

Ràng buộc duy nhất

Một ràng buộc duy nhất có thể được sử dụng như khóa chính đối với một ràng buộc khoá ngoại, giống như đã khai báo một khóa chính một cách tường minh. Điều này cho phép các ràng buộc toàn vẹn tham chiếu (xem Ràng buộc toàn vẹn tham chiếu) được đặt trên các cột khác nhau trong cùng một bảng.

Một ràng buộc duy nhất buộc các giá trị trong cột là duy nhất; cột này không thể chứa các giá trị null.

Ràng buộc kiểm tra

Một ràng buộc kiểm tra được sử dụng để ép buộc tính toàn vẹn dữ liệu ở mức bảng. Nó buộc các giá trị trong bảng tuân theo đúng ràng buộc. Tất cả các việc chèn và cập nhật sau đó phải tuân thủ ràng buộc đã xác định trên bảng, nếu không lệnh sẽ thất bại.

Nếu có các hàng trong bảng không đáp ứng được ràng buộc thì không thể định nghĩa được ràng buộc. Có thể tắt việc kiểm tra ràng buộc để tăng tốc độ khi thêm vào một lượng lớn dữ liệu, nhưng bảng sẽ được đặt ở trạng thái CHECK PENDING.

Ràng buộc mang thông tin

Ràng buộc mang thông tin là các quy tắc mà có thể được sử dụng bởi trình tối ưu hoá, nhưng không bị ép buộc trong thời gian chạy. Do các ràng buộc khác có thể gây ra thêm tải công việc (overhead) khi thao tác chèn, cập nhật, hoặc xóa, các ràng buộc mang thông tin có thể là một lựa chọn tốt hơn nếu ứng dụng đã kiểm tra dữ liệu hợp lệ.

Ràng buộc mang thông tin có thể là:

  • ENFORCED: Ràng buộc được thi hành bởi trình quản trị cơ sở dữ liệu trong các hoạt động bình thường chẳng hạn như chèn, cập nhật, hoặc xóa.
  • NOT ENFORCED: Khi được sử dụng, DB2 có thể trả lại các kết quả sai khi có bất kỳ dữ liệu nào trong bảng vi phạm ràng buộc.
  • ENABLE QUERY OPTIMIZATION: Ràng buộc có thể sử dụng để tối ưu hóa truy vấn trong các hoàn cảnh thích hợp.
  • DISABLE QUERY OPTIMIZATION: Ràng buộc không thể sử dụng để tối ưu hóa truy vấn.

Các kích hoạt

Một kích hoạt (trigger) xác định một loạt các hành động sẽ được kích hoạt, bởi một hành động trên một bảng cơ sở đã chỉ rõ. Hành động được kích hoạt có thể gây ra các thay đổi khác cho cơ sở dữ liệu hoặc đưa ra một ngoại lệ. Một kích hoạt có thể được khởi phát trước khi hoặc sau khi chèn, cập nhật, hay xóa.

Các kích hoạt được sử dụng vào việc:

  • Kiểm tra hợp lệ, tương tự như các ràng buộc nhưng linh hoạt hơn.
  • Đặt điều kiện, cho phép dữ liệu mới được sửa đổi hoặc được đặt điều kiện tùy theo giá trị xác định trước.
  • Tính toàn vẹn, tương tự như tính toàn vẹn tham chiếu nhưng linh hoạt hơn.

Tam giác lưu trữ DB2

Tam giác lưu trữ

Tam giác lưu trữ DB2

Trong một cơ sở dữ liệu DB2, việc lưu trữ dữ liệu và chỉ mục được định nghĩa và điều khiển ở bốn mức khác nhau. Để thích nghi các cơ sở dữ liệu đã phân đoạn, có một tầng trừu tượng có tên là nhóm phân đoạn, như trình bày trong hình trên đây. Một nhóm phân đoạn là một nhóm hoặc tập hợp của một hoặc nhiều phân đoạn cơ sở dữ liệu trong một cơ sở dữ liệu. Khi một vùng bảng được tạo ra, nó được gán cho một nhóm phân đoạn và sẽ chỉ được tạo ra trên phân đoạn cơ sở dữ liệu mà là một phần của nhóm phân đoạn đó. Mỗi vùng bảng phải có một hoặc nhiều thùng chứa, xác định việc lưu trữ vật lý cho vùng bảng đó. Một thùng chứa có thể là một thư mục hệ điều hành, một tệp tin với kích thước cho trước, một thiết bị thô (raw device) chẳng hạn như một ổ cứng chưa định dạng, một phân vùng trên ổ cứng, hoặc một ổ logic.

Vùng bảng

Một vùng bảng (table space) là một thực thể logic dùng để xác định nơi bảng và các chỉ mục sẽ được lưu trữ trong một cơ sở dữ liệu. Vì tất cả các bảng và chỉ mục DB2 nằm trong vùng bảng, điều này cho phép kiểm soát toàn bộ nơi dữ liệu bảng và chỉ mục được lưu trữ về mặt vật lý.

Một vùng bảng có thể được tạo ra bằng cách sử dụng một hoặc nhiều thiết bị lưu trữ vật lý nền bên dưới gọi là thùng chứa (containers). Chúng cung cấp khả năng tạo ra một thiết kế cơ sở dữ liệu vật lý mà sẽ mang lại hiệu năng tối ưu trong mọi môi trường vật lý.

Để có thêm chi tiết về vùng bảng trong một cơ sở dữ liệu, sử dụng các lệnh sau đây:

  • get snapshot for tablespaces
  • list tablespaces

Vùng bảng SMS

Giới thiệu

Các vùng bảng thuộc không gian do hệ thống quản lý (SMS- System Managed Space) sử dụng trình quản trị hệ thống tệp tin được cung cấp bởi hệ điều hành để cấp phát và quản lý không gian nơi các bảng được lưu trữ. Trong một vùng bảng SMS, mỗi thùng chứa là một thư mục hệ điều hành, và đối tượng bảng được tạo ra là các tệp tin trong thư mục đó. Khi tạo ra một vùng bảng SMS, người sử dụng phải chỉ rõ tên của thư mục cho mỗi thùng chứa. DB2 sẽ tạo ra bảng trong các thư mục sử dụng trong vùng bảng bằng cách sử dụng các tên tệp tin duy nhất cho mỗi đối tượng.

Nếu một vùng bảng được tạo ra với nhiều hơn một thùng chứa, DB2 sẽ cân bằng lượng dữ liệu được viết tới các thùng chứa. Do thùng chứa không thể tự động được thêm vào một vùng bảng SMS một khi nó đã được tạo ra, điều quan trọng là phải biết các yêu cầu về kích thước của vùng bảng và tạo ra tất cả các thùng chứa cần thiết khi vùng bảng được tạo ra.

Các đặc trưng của các vùng bảng SMS

Với các vùng bảng SMS:

  • Tất cả các dữ liệu bảng và chỉ mục dùng chung một vùng bảng.
  • Mỗi bảng trong một vùng bảng được đặt một tên tệp tin riêng của nó, mà tất cả các thùng chứa sẽ sử dụng. Phần mở rộng của tên tệp tin biểu thị kiểu dữ liệu được lưu trữ trong tệp tin
  • Có khả năng để tệp tin phát triển động, với một giới hạn trên về kích thước được điều quản bởi số lượng các thùng chứa, bởi hệ điều hành giới hạn kích thước của hệ thống tệp tin, và bởi hệ điều hành giới hạn kích thước của các tệp tin đơn lẻ.
  • Khi toàn bộ không gian trong chỉ một thùng chứa được cấp phát hết, vùng bảng được coi là đầy ngay cả khi vẫn còn không gian trong các thùng chứa khác.
  • Các thùng chứa mới chỉ có thể được thêm vào SMS trên một phân đoạn mà chưa có bất kỳ thùng chứa nào.
  • Trên Linux hoặc UNIX, kích thước hệ thống tệp tin có thể được tăng lên.

Vùng bảng SMS rất dễ quản lý, và được khuyên dùng đối với vùng bảng TEMP.

Tạo các vùng bảng SMS

Để tạo một vùng bảng SMS sử dụng lệnh sau đây:

create table space TS1 managed by system using ('path1', 'path2', 'path3')

Khi đường dẫn được quy định cho một thùng chứa SMS, đó có thể là hoặc là đường dẫn tuyệt đối hoặc là đường dẫn tương đối đến thư mục. Nếu thư mục không tồn tại, DB2 sẽ tạo ra nó. Nếu thư mục tồn tại, nó không thể chứa bất kỳ tệp tin hoặc thư mục con nào. Ví dụ, lệnh này:

create table space ts1 managed by system using ('D:\DIR1')

quy định đường dẫn tuyệt đối đến thư mục. DB2 sẽ tạo ra thư mục DIR1 trên ổ D: trên máy chủ cơ sở dữ liệu nếu nó chưa từng tồn tại.

Lệnh này:

create tablespace ts2  managed by system using ('DIR1')

quy định đường dẫn tương đối DIR1. DB2 sẽ tạo ra thư mục DIR1 dưới thư mục nhà của cơ sở dữ liệu (database home directory).

Lệnh SQL sau đây tạo ra một vùng bảng SMS với ba thùng chứa trên ba ổ đĩa riêng biệt hoặc hệ thống tệp tin. Lưu ý rằng tên của vùng bảng là như nhau, vì các ví dụ trình bày sự khác nhau giữa các định nghĩa vùng bảng của UNIX/Linux và của Windows.

create tablespace smstbspc managed by system 
          using ('d:\tbspc1', 'e:\tbspc2', 'f:\ tbspc3')
create tablespace smstbspc managed by system 
          using ('/dbase/container1', '/dbase/container2', '/dbase/container3')

Thay đổi các vùng bảng SMS

Vùng bảng SMS chỉ có thể được thay đổi để sửa lại kích thước tiền nạp. Các thùng chứa không thể được thêm vào một vùng bảng SMS bằng cách sử dụng lệnh alter. Tuy nhiên, thùng chứa có thể được định nghĩa lại, thêm vào, hoặc loại bỏ trong thời gian phục hồi có chuyển hướng (redirected restore).


Phân cụm đa chiều (MDC)

Giới thiệu về MDC

Phân cụm đa chiều (Multi-dimensional clustering - MDC) cho phép một bảng có thể được phân cụm vật lý theo nhiều hơn một khoá, hay chiều, một cách đồng thời. Trước phiên bản 8, DB2 chỉ hỗ trợ phân cụm dữ liệu đơn chiều bằng cách sử dụng các chỉ mục phân cụm. Khi một chỉ mục phân cụm được xác định trên một bảng, DB2 cố gắng duy trì thứ tự vật lý của dữ liệu trên các trang, dựa trên thứ tự khoá của chỉ mục phân cụm, khi các bản ghi được chèn vào và cập nhật trong bảng. Điều này có thể cải thiện đáng kể hiệu năng của các truy vấn mà có các vị từ chứa các khoá của chỉ mục phân cụm vì, nếu phân cụm tốt, chỉ cần truy cập một phần của bảng vật lý đó. Khi trang được lưu trữ tuần tự trên đĩa, có thể thực hiện việc tiền nạp hiệu quả hơn.

Với MDC, các lợi ích tương tự này được mở rộng cho nhiều hơn một chiều, hay khoá phân cụm. Trong trường hợp hiệu năng truy vấn, các truy vấn liên quan đến bất kỳ một hoặc tổ hợp của các chiều đã chỉ rõ của bảng sẽ hưởng lợi từ việc phân cụm nền tảng. Các truy vấn này sẽ chỉ cần truy cập các trang nào có các bản ghi với các giá trị chiều đã chỉ rõ, và các trang đủ điều kiện sẽ được nhóm lại với nhau thành các dải trang.

Một bảng với một chỉ mục phân cụm, sau một thời gian có thể trở thành không phân cụm nữa, vì không gian sẵn có trong bảng bị lấp đầy. Tuy nhiên, một bảng MDC có thể duy trì việc phân cụm của nó theo chiều đã xác định một cách tự động và liên tục, loại bỏ sự cần thiết phải tổ chức lại bảng để khôi phục thứ tự vật lý của dữ liệu.

Khi một bảng MDC được tạo ra, các khoá chiều cùng với cái để phân cụm dữ liệu của bảng được chỉ rõ. Tất cả các chiều đã chỉ ra có thể được định nghĩa bằng một hoặc nhiều cột, giống như một khoá chỉ mục. Một chỉ mục khối chiều sẽ được tự động tạo ra cho mỗi chiều đã xác định, và sẽ được sử dụng để truy cập dữ liệu một cách nhanh chóng và hiệu quả theo từng chiều đã định. Một chỉ mục khối cũng sẽ được tự động tạo ra, chứa tất cả các cột khoá của chiều. Chỉ mục khối sẽ được sử dụng để duy trì việc phân cụm dữ liệu trong thời gian thi hành hoạt động chèn và cập nhật, cũng như là để truy cập dữ liệu nhanh và hiệu quả.

Mỗi tổ hợp duy nhất của các giá trị chiều của bảng tạo thành một ô logic, về mặt vật lý bao gồm các khối trang, trong đó một khối trang là một tập hợp các trang liên tiếp trên đĩa. Tập hợp các khối mà chứa các trang chứa dữ liệu có cùng một giá trị khoá của một trong các chỉ mục khối chiều được gọi là một lát (slice). Mỗi trang của bảng sẽ được lưu trữ chỉ trong một khối, và tất cả các khối của bảng sẽ chứa cùng số trang, gọi là hệ số tạo khối (blocking factor). Hệ số tạo khối bằng kích thước của dải trang của vùng bảng, sao cho các biên giới khối khớp với các biên giới dải trang.

Tạo một bảng MDC

Để tạo một bảng MDC, bạn cần phải chỉ rõ các chiều của bảng, bằng cách sử dụng tham số organize by, như sau:

  CREATE TABLE MDCTABLE( 
  Year INT, 
  Nation CHAR(25), 
  Colour VARCHAR(10),
  ... )
  ORGANIZE BY(Year, Nation, Color)

Trong thí dụ này, bảng sẽ được tổ chức theo các chiều năm, quốc gia, và màu, và về mặt lôgic sẽ giống như hình dưới đây.

Một hình dáng ngoài logic về các chiều MDC

Bạn không thể thay đổi một bảng và đổi nó thành một bảng MDC, do đó hãy sử dụng cố vấn thiết kế (design advisor), nếu có thể, trước khi bạn tạo cơ sở dữ liệu để biết bảng của bạn sẽ là các bảng MDC hay là bảng bình thường.

Xem xét về MDC

Liệt kê sau đây tóm tắt lại các xem xét về thiết kế đối với bảng MDC.

  • Khi xác định các chiều ứng viên (candidate dimensions), hãy tìm các thuộc tính mà không quá chi tiết mịn, bằng cách đó cho phép nhiều hàng hơn được lưu trữ trong mỗi ô. Cách tiếp cận này sẽ làm cho sử dụng tốt hơn các chỉ mục mức khối (block-level indexes).
  • Các khối lượng dữ liệu lớn hơn có thể cải thiện mật độ cư trú.
  • Có thể hữu ích khi trước hết nạp dữ liệu như bảng không MDC chỉ để phục vụ mục đích phân tích.
  • Kích thước dải trang vùng bảng là một tham số trọng yếu để sử dụng không gian hiệu quả.
  • Mặc dù một bảng MDC có thể yêu cầu một sự hiểu biết ban đầu nhiều hơn về dữ liệu, lợi ích thu được là ở chỗ thời gian truy vấn sẽ có thể cải thiện.
  • Một số dữ liệu có lẽ không thích hợp đối với các bảng MDC và sẽ được thực hiện tốt hơn bằng cách sử dụng một chỉ mục phân cụm chuẩn.
  • Mặc dù một kích thước dải trang nhỏ hơn sẽ làm cho việc sử dụng không gian đĩa có hiệu quả nhất, các nhập/xuất cho các truy vấn cũng phải được xem xét.
  • Một dải trang lớn hơn thông thường sẽ giảm được chi phí nhập/xuất, vì nhiều dữ liệu hơn sẽ được đọc một lần. Điều này, đến lượt mình, làm cho các chỉ mục khối chiều nhỏ hơn vì mỗi giá trị chiều sẽ cần ít khối hơn. Và, các việc chèn vào sẽ nhanh hơn vì ít thường xuyên đòi hỏi khối mới hơn.

Phân đoạn bảng

Giới thiệu về phân đoạn bảng

Một số công nghệ trong DB2 v8.2 (và các bản phát hành trước) cho phép bạn chia nhỏ dữ liệu của bạn thành các “bó” (chunk) nhỏ hơn để có sự song song lớn hơn cho các truy vấn, cho phép loại bỏ phân đoạn trong các truy vấn, và giúp cải thiện hiệu năng nói chung. Như đã thảo luận trong phần trước, MDC cho phép DB2 đặt dữ liệu lên đĩa sao cho các hàng có cùng giá trị của cột chiều được lưu trữ cùng nhau trong các khối (một tập hợp các trang). Bằng cách sử dụng kỹ thuật này, một truy vấn cần tìm kiếm các hàng có một giá trị chiều cụ thể sẽ dẫn đến loại bỏ việc rà quét tất cả các phân đoạn khác và chỉ truy cập các hàng đủ điều kiện.

Tương tự như vậy, đặc tính phân đoạn cơ sở dữ liệu có thể chia nhỏ tập hợp các bảng sao cho một phần của dữ liệu nằm trên một phân đoạn cơ sở dữ liệu. Các phân đoạn cơ sở dữ liệu có thể nằm trên các máy chủ riêng biệt nên có thể sử dụng năng lực xử lý của nhiều máy chủ để thi hành một phép rà quét dữ liệu lớn.

DB2 V9 đem lại một dạng thức mới của phân đoạn, phổ biến trong DB2 dùng cho z/OS và các sản phẩm của các nhà cung cấp máy chủ dữ liệu khác. Được biết đến như là phân đoạn bảng, đặc tính này cho phép bạn lấy một bảng đơn lẻ và trải rộng nó xuyên qua nhiều vùng bảng.

Khả năng phân đoạn mới này có một số lợi ích, gồm cả một cú pháp đơn giản hoá để tạo ra chúng. Dưới đây là cú pháp đơn giản hoá để tạo một bảng được phân đoạn để lưu dữ liệu của 24 tháng trong 24 phân đoạn trải ra trên 4 vùng bảng:

CREATE TABLE fact 
(txn_id char(7), purchase_date date, ...)
IN tbsp1, tbsp2, tbsp3, tbsp4
PARTITION BY RANGE (purchase_date)
(
STARTING FROM ('2005-01-01') 
ENDING ('2006-12-31') 
EVERY 1 MONTH
)

Cú pháp phân đoạn bảng

Cú pháp tạo bảng có dạng ngắn và dạng dài. Trước khi đi sâu vào cú pháp, đầu tiên chúng ta hãy nói về cột phân đoạn (partitioning column). Phân đoạn bảng cho phép đặc tả các đoạn (range) dữ liệu, mỗi đoạn đi vào một phân đoạn riêng. Cột (hoặc các cột) phân đoạn, định nghĩa các đoạn này. Một cột phân đoạn có thể là bất kỳ kiểu dữ liệu cơ sở DB2 nào, trừ các cột LOB và cột LONG VARCHAR. Bạn cũng có thể quy định nhiều cột (xem ví dụ sau đây), và bạn có thể chỉ rõ các cột được tạo ra nếu bạn muốn mô phỏng việc phân đoạn theo một hàm.

Đây là dạng ngắn:

CREATE TABLE t1(c1 INT)
  IN tbsp1, tbsp2, tbsp3
  PARTITION BY RANGE(c1)
  (STARTING FROM (0) ENDING (80) EVERY (10))

Lệnh dưới đây cho cùng kết quả, bằng cách sử dụng dạng dài

CREATE TABLE t1(c1 INT)
  PARTITION BY RANGE(c1)
  (STARTING FROM (0) ENDING (10) IN tbsp1,
                     ENDING (20) IN tbsp2,
                     ENDING (30) IN tbsp3,
                     ENDING (40) IN tbsp1,
                     ENDING (50) IN tbsp2,
                     ENDING (60) IN tbsp3,
                     ENDING (70) IN tbsp1,
                     ENDING (80) IN tbsp2)

Thêm hoặc loại bỏ nhanh các đoạn dữ liệu

Một lợi ích khác là khi bạn tách phân đoạn để nhận được một bảng riêng biệt, chứa nội dung của phân đoạn đó. Bạn có thể tách phân đoạn từ một bảng và sau đó làm điều gì đó với phân đoạn vừa được tách ra đó, mà bây giờ là một bảng vật lý. Ví dụ bạn có thể lưu trữ lâu dài bảng đó, chuyển nó đến lưu trữ ở bên thứ ba, sao chép nó đến vị trí khác, hoặc bất cứ điều gì bạn muốn làm. DB2 V9 sẽ không đồng bộ dọn dẹp sạch bất kỳ khoá chỉ mục nào trên bảng được phân đoạn này mà không ảnh hưởng đến ứng dụng đang chạy.

Cũng tương tự khi thêm một phân đoạn mới, bạn chỉ cần tạo ra một bảng với cùng định nghĩa như bảng được phân đoạn, nạp dữ liệu vào nó và sau đó gắn thêm phân đoạn vào bảng chính đã được phân đoạn, như sau:

  ALTER TABLE FACT_TABLE ATTACH PARTITION 
  STARTING '06-01-2006'
  ENDING '06-30-2006'
  FROM TABLE FACT_NEW_MONTH

Nén bảng

Giới thiệu về nén bảng

Việc nén hàng hoạt động bằng cách quan sát nội dung của toàn bộ bảng, tìm kiếm các chuỗi byte lặp lại, lưu trữ các chuỗi đó trong một từ điển, và sau đó thay thế các chuỗi xuất hiện trong bảng bằng một ký hiệu đại diện cho dữ liệu thực tế được lưu trữ trong từ điển. Lợi ích lớn là ở chỗ DB2 xem xét toàn bộ dữ liệu trong bảng và tại hàng dữ liệu như một tổng thể -- không chỉ các giá trị cột lặp lại. Ví dụ, nếu có một chuỗi con lặp lại bên trong một cột, nó có thể được nén. Nếu có một chuỗi lặp lại mà trải xuyên qua nhiều cột (như thành phố, bang), nó cũng có thể được nén thành một ký hiệu đơn lẻ.

Sử dụng nén bảng

Để sử dụng nén hàng trước hết bạn phải thiết đặt bảng có đủ điều kiện nén, và sau đó bạn phải tạo ra từ điển có chứa các chuỗi chung bên trong bảng đó. Để thiết đặt bảng có đủ điều kiện nén, sử dụng một trong hai lệnh sau đây:

create table table_name ... compress yes
or
alter table tablename compress yes

Tạo từ điển nén

Tạo từ điển nén (compression dictionary) cho phép bảng được nén. DB2 sau đó cần phải quét dữ liệu trong bảng để tìm ra chuỗi phổ biến mà nó có thể nén ra khỏi bảng và đưa vào từ điển. Để làm việc này bạn sử dụng lệnh reorg (sắp xếp lại). Lần đầu tiên bạn nén một bảng (hoặc nếu bạn muốn xây dựng lại từ điển nén) bạn phải chạy lệnh:

reorg table  table_name resetdictionary

Việc này sẽ quét bảng, tạo từ điển, và sau đó thực hiện việc sắp xếp lại bảng thực tế, nén dữ liệu khi nó chạy. Từ điểm này trở đi, bất kỳ việc chèn nào vào bảng này hoặc nạp dữ liệu tiếp theo sẽ tôn trọng từ điển nén này và nén tất cả các dữ liệu mới. Nếu sau này bạn muốn chạy một lệnh reorg bảng bình thường và không xây dựng lại từ điển, bạn có thể chạy lệnh:

reorg table table_name keepdictionary

Mỗi bảng có một từ điển riêng của mình, nghĩa là một bảng được phân đoạn sẽ có một từ điển riêng cho từng phân đoạn. Điều này là tốt vì nó cho phép DB2 thích nghi với các thay đổi trong dữ liệu khi bạn chuyển vào một phân đoạn mới.

Ước tính không gian tiết kiệm được

Nếu bạn chỉ muốn xem bao nhiêu không gian mà bạn có thể tiết kiệm mà không thực sự nén bảng, bạn cũng có thể làm được việc đó. Lệnh DB2 INSPECT bây giờ có một tuỳ chọn để báo cáo số trang sẽ tiết kiệm được nếu bạn quyết định nén một bảng cho trước. Cú pháp cho việc này là:

db2 inspect rowcompestimate table name table_name results keep file_name

Sau đó bạn chạy lệnh:

db2inspf file_nameoutput_file_name

để chuyển đổi tệp đầu ra kết quả kiểm tra dưới dạng nhị phân thành một tệp tin văn bản có thể đọc được tên là output_file_name. Tệp tin này chứa tỷ lệ phần trăm ước tính các trang dữ liệu tiết kiệm được từ việc nén.

Các bước nén bảng cho một bảng mới

Nếu bạn đang bắt đầu với một hệ thống mới, bạn có thể muốn:

  • Tạo ra bảng với tùy chọn nén là yes.
  • Nạp một mẫu đại diện của dữ liệu vào bảng.
  • Sắp xếp lại bảng với tùy chọn resetdictionary để tạo một từ điển mới.
  • Nạp phần còn lại của dữ liệu vào bảng (phần nạp này sẽ tôn trọng từ điển và nén khi chương trình đang chạy trong khi nạp).

XML

Giới thiệu về XML trong DB2

Bạn đã có khả năng lưu trữ dữ liệu XML trong DB2 từ khá lâu nay. Tất nhiên, bạn có thể lưu trữ đối tượng này như là một CLOB, và với trình mở rộng XML, bạn có thể băm nhỏ tài liệu vào các bảng quan hệ, cho phép bạn truy cập một cách hiệu quả các thành phần của một tài liệu XML với một truy vấn. Nhưng phương pháp nào cũng có nhược điểm của nó. Tài liệu bị chia nhỏ có thể dẫn đến mất đi độ trung thực tài liệu và làm cho khó thay đổi lược đồ XML. Lợi ích lớn nhất của XML là ở chỗ lược đồ này rất linh hoạt, nên việc làm cho trở thành cứng nhắc bằng cách chia nhỏ tài liệu vào các bảng quan hệ là phản tác dụng. Với CLOB bạn có thể giữ nguyên tính linh hoạt nhưng mỗi khi bạn muốn đọc các thành phần của XML bạn cần phân tích các CLOB lúc đang chạy, do đó hiệu năng bị kém đi.

DB2 V9 đưa ra một công cụ lưu trữ XML hoàn toàn mới, ở đây dữ liệu XML được lưu trữ theo kiểu phân cấp (hierarchical). XML về bản chất có tính phân cấp, nên việc lưu trữ XML theo kiểu phân cấp trong bộ máy này duy trì được sự trung thực, cho phép lược đồ linh hoạt, và cũng đem lại hiệu năng cao khi truy cập các phần trong tài liệu. Máy lưu trữ phân cấp mới này nằm bên trong cùng một máy chủ dữ liệu DB2 giống như máy lưu trữ quan hệ, vì vậy bây giờ bạn có thể lưu trữ thông tin khách hàng cùng với đơn đặt hàng dưới dạng XML của họ và tìm kiếm tất cả các thông tin một cách hiệu quả.

Các cột XML trong bảng DB2

XML được lưu trữ bên trong DB2 ở dạng thức phân cấp. XML tự nó đã có tính phân cấp bắt đầu từ thẻ (hoặc nút) gốc và sau đó lần lượt đi qua chuỗi (hoặc tài liệu) XML. Trong DB2, XML được lưu trữ bên trong các trang dữ liệu trong cấu trúc phân cấp này. Nếu dữ liệu XML lớn hơn một trang dữ liệu đơn lẻ, thì cây XML được chia nhỏ thành các cây con (subtrees), với mỗi cây con được lưu trữ trên một trang dữ liệu và các trang này được liên kết với nhau.

Để tạo một bảng với dữ liệu XML chỉ cần chạy lệnh:

create table table_name (col1 data_type, ..., xml_col_name XML)

Việc này cho phép bạn tạo ra bảng với các cột quan hệ của bạn như bạn vẫn làm hiện nay, và đối với thông tin XML của bạn thì bạn chỉ cần gán cho cột có kiểu dữ liệu XML. Bây giờ bạn có thể lưu trữ dữ liệu XML trong cột đó.

Chỉ mục XML

Việc tạo ra một chỉ mục cũng tương tự như việc tạo ra một chỉ mục thông thường trên dữ liệu quan hệ, ngoại trừ việc bạn không lập chỉ mục column, mà đúng ra là một thành phần của lược đồ XML được định nghĩa trong cột xml_column_name trên đây. Cú pháp sẽ trông giống như sau:

create index index_name on table_name (xml_column_name) 
   generate key using xmlpattern '/po/purchaser/@pname' as sql varchar(50)

Để có nhiều thông tin hơn về hỗ trợ XML trong DB2 9, xem Tài nguyên.


Kết luận

Tóm tắt

Trong hướng dẫn này chúng ta đã thảo luận:

  • Tạo các cơ sở dữ liệu.
  • Sử dụng các lược đồ.
  • Các trạng thái vùng bảng khác nhau.
  • Tạo và thao tác các đối tượng DB2.
  • Tạo các vùng bảng SMS và các đặc trưng của chúng.
  • Các đặc trưng và cách sử dụng lưu trữ tự động của DB2.
  • Thực hiện phân đoạn bảng và MDC.
  • Sử dụng nén bảng.
  • Sử dụng XML.

Bạn bây giờ đã sẵn sàng thực hiện phần phân bố dữ liệu của bài kiểm tra lấy chứng chỉ DBA. Chúc May mắn!

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Một phiên bản dùng thử của DB2 9 có sẵn để tải về miễn phí.
  • Tải về DB2 Express-C, một phiên bản miễn phí của DB2 Express Edition dùng cho cộng đồng, cung cấp cùng các đặc tính dữ liệu cốt lõi như bản DB2 Express Edition và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management
ArticleID=444785
ArticleTitle=Chuẩn bị kỳ thi số 731 lấy chứng chỉ DBA (Quản trị cơ sở dữ liệu) DB2 9, Phần 2: Bố trí dữ liệu
publish-date=11062009