Hướng dẫn nhanh về DB2
Chương này mô tả lịch sử của DB2, các phiên bản, phiên bản của nó và các tính năng tương ứng của chúng.
Tổng quat
DB2 là một sản phẩm cơ sở dữ liệu của IBM. Nó là một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). DB2 được thiết kế để lưu trữ, phân tích và truy xuất dữ liệu một cách hiệu quả. Sản phẩm DB2 được mở rộng với sự hỗ trợ của các tính năng Hướng đối tượng và cấu trúc phi quan hệ với XML.
Lịch sử
Ban đầu, IBM đã phát triển sản phẩm DB2 cho nền tảng cụ thể của họ. Kể từ năm 1990, nó quyết định phát triển Máy chủ DB2 cho Cơ sở dữ liệu chung (UDB), có thể chạy trên bất kỳ hệ điều hành có thẩm quyền nào như Linux, UNIX và Windows.
Phiên bản
Đối với IBM DB2, phiên bản hiện tại của UDB là 10.5 với các tính năng của BLU Acceleration và tên mã của nó là 'Kepler'. Tất cả các phiên bản của DB2 cho đến ngày nay được liệt kê dưới đây:
Phiên bản | Tên mã |
---|---|
3,4 | Mạng nhện |
8.1, 8.2 | Stinger |
9.1 | Viper |
9.5 | Viper 2 |
9,7 | Rắn hổ mang |
9,8 | Nó đã thêm các tính năng với Only PureScale |
10.1 | Galileo |
10,5 | Kepler |
Các phiên bản và tính năng của máy chủ dữ liệu
Tùy theo yêu cầu về các tính năng cần thiết của DB2, các tổ chức sẽ chọn phiên bản DB2 thích hợp. Bảng sau đây cho thấy các phiên bản máy chủ DB2 và các tính năng của chúng:
Các phiên bản | Đặc trưng |
---|---|
Phiên bản Máy chủ Doanh nghiệp Nâng cao và Phiên bản Máy chủ Doanh nghiệp (AESE / ESE) | Nó được thiết kế cho các tổ chức kinh doanh quy mô vừa và lớn. Nền tảng - Linux, UNIX và Windows. Phân vùng bảng Tính khả dụng cao Phục hồi sau thảm họa (HARD) Bảng truy vấn được vật chất hóa (MQTs) Phân cụm đa chiều (MDC) Bộ tập trung kết nối Pure XML Backup Nén liên kết đồng nhất |
Phiên bản Máy chủ Nhóm làm việc (WSE) | Nó được thiết kế cho Nhóm làm việc hoặc các tổ chức kinh doanh quy mô vừa. Sử dụng WSE này, bạn có thể làm việc với - Phục hồi sau thảm họa khả dụng cao (HARD) Tổ chức lại trực tuyến Hỗ trợ liên kết dịch vụ web thuần XML thuần túy hỗ trợ DB2 Liên đoàn đồng nhất Nhân bản SQL đồng nhất |
Express -C | Nó cung cấp tất cả các khả năng của DB2 mà không mất phí. Nó có thể chạy trên bất kỳ hệ thống vật lý hoặc ảo nào với bất kỳ kích thước cấu hình nào. |
Phiên bản Express | Nó được thiết kế cho cấp đầu vào và các tổ chức kinh doanh quy mô vừa. Nó là máy chủ dữ liệu DB2 đầy đủ tính năng. Nó chỉ cung cấp các dịch vụ hạn chế. Phiên bản này đi kèm với - Liên đoàn dịch vụ web Liên kết đồng nhất DB2 Bản sao SQL đồng nhất Nén sao lưu |
Phiên bản dành cho nhà phát triển doanh nghiệp | Nó chỉ cung cấp một nhà phát triển ứng dụng duy nhất. Sẽ rất hữu ích khi thiết kế, xây dựng và tạo mẫu các ứng dụng để triển khai trên bất kỳ máy chủ nào của IBM. Phần mềm không thể được sử dụng để phát triển các ứng dụng. |
Chương này mô tả các bước cài đặt của máy chủ DB2.
Giới thiệu
Bạn có thể tải xuống phiên bản dùng thử Máy chủ DB2 hoặc mua giấy phép sản phẩm từ www.ibm.com . Có hai máy chủ DB2 riêng biệt có sẵn để tải xuống, tùy thuộc vào kích thước của hệ điều hành mà nó dự định thực thi. Ví dụ: nếu bạn muốn tải xuống máy chủ DB2 cho hệ điều hành Linux hoặc UNIX 32 bit, thì bạn cần tải xuống máy chủ DB2 32 bit. Điều tương tự cũng áp dụng cho máy chủ DB2 64 bit.
Yêu cầu phần cứng
Bộ xử lý: Tối thiểu Core 2Duo
Ram: tối thiểu 1GB
Đĩa cứng: tối thiểu 30GB
Yêu cầu phần mềm
Trước khi cài đặt máy chủ DB2, hệ thống của bạn cần sẵn sàng với phần mềm cần thiết trên đó. Đối với Linux, bạn cần cài đặt “libstdc ++ 6.0”.
Kiểm tra tính tương thích của hệ thống
Trước khi cài đặt Máy chủ DB2, bạn cần xác minh xem hệ thống của bạn có tương thích với máy chủ DB2 hay không. Để xác nhận tính tương thích, bạn cần gọi lệnh 'db2prereqcheck' trên bảng điều khiển lệnh.
Cài đặt DB2 trên hệ điều hành Linux
Mở Terminal và đặt đường dẫn thư mục hình ảnh cài đặt db2 trên bảng điều khiển bằng lệnh “CD <DB2 install folder>”. Sau đó, gõ lệnh “./db2prereqcheck”, lệnh này xác nhận tính tương thích của hệ thống của bạn với máy chủ DB2.
./db2prereqcheck
Hình-1 cho thấy các yêu cầu tương thích của hệ điều hành Linux và hệ thống phần cứng.
Làm theo các bước đã cho để cài đặt DB2 trên hệ thống Linux của bạn:
- Mở thiết bị đầu cuối.
- Đăng nhập với tư cách người dùng root.
- Mở thư mục Cài đặt DB2.
- Nhập “./db2setup” và nhấn Enter.
Quá trình này sẽ bắt đầu thực hiện thiết lập máy chủ DB2.
Gõ “./db2setup” và nhấn Enter trên thiết bị đầu cuối gốc để bắt đầu quá trình thiết lập Máy chủ DB2.
Khi làm như vậy, màn hình “Thiết lập bệ phóng” sẽ xuất hiện. [Hình 2]
Trên trang Setup Launch pad, chọn tùy chọn “Install a Product” từ menu bên trái. Chọn tùy chọn “Phiên bản máy chủ doanh nghiệp nâng cao DB2”. Chọn Nút “Cài đặt Mới”.
Một khung mới xuất hiện với tên “Trình hướng dẫn thiết lập DB2”. Bấm tiếp". [Hình-3]
Màn hình tiếp theo xuất hiện với thỏa thuận cấp phép DB2. Chọn “Tôi chấp nhận các điều khoản…” Nhấp vào “Tiếp theo”. [Hinh 4]
Màn hình tiếp theo xuất hiện đề nghị Loại cài đặt, được đặt thành “Thông thường” theo mặc định.
Giữ nguyên lựa chọn. Bấm tiếp". [Hình-5]
Màn hình tiếp theo xuất hiện với hành động cài đặt.
Chọn “Cài đặt phiên bản máy chủ doanh nghiệp nâng cao DB2…”
Bấm tiếp". [Hình-6]
Trên màn hình tiếp theo, chương trình cài đặt yêu cầu lựa chọn thư mục cài đặt.
Giữ nguyên giá trị mặc định và nhấp vào “Tiếp theo”.
Màn hình tiếp theo hiển thị xác thực người dùng. Nhập mật khẩu của bạn cho người dùng “dasusr1”.
(Mật khẩu của bạn có thể giống với tên người dùng để thuận tiện cho việc ghi nhớ.)
Trên màn hình sau, thiết lập yêu cầu bạn tạo Phiên bản máy chủ DB2.
Ở đây, nó đang tạo một cá thể DB2 với tên “db2inst1”.
Màn hình tiếp theo hỏi bạn số lượng phân vùng bạn cần cho phiên bản mặc định của mình.
Bạn có thể lựa chọn phân vùng "một hoặc nhiều".
Chọn “phiên bản phân vùng duy nhất”. Bấm tiếp".
Trên màn hình tiếp theo, thiết lập yêu cầu bạn xác thực cho phiên bản DB2 đang được tạo.
Ở đây, tên người dùng mặc định được tạo là “db2inst1”. Bạn có thể nhập mật khẩu giống như tên người dùng.
Bấm tiếp".
Trên màn hình tiếp theo, thiết lập yêu cầu nhập thông tin xác thực cho người dùng “db2fenc”.
Tại đây, bạn có thể nhập mật khẩu giống như tên người dùng.
Bấm tiếp".
Trên màn hình tiếp theo, bạn có thể chọn tùy chọn “Không thiết lập máy chủ db2 của bạn để gửi thông báo vào lúc này”.
Bấm tiếp".
Màn hình tiếp theo hiển thị cho bạn thông tin về thiết lập db2.
Nhấp vào “Hoàn tất”.
Quá trình cài đặt DB2 đã hoàn tất ở giai đoạn này.
Xác minh cài đặt DB2
Bạn cần xác minh việc cài đặt máy chủ DB2 về tính hữu ích của nó. Khi hoàn tất cài đặt Máy chủ DB2, hãy đăng xuất khỏi chế độ người dùng hiện tại và đăng nhập vào người dùng “db2inst1”. Trong môi trường người dùng “db2inst1”, bạn có thể mở terminal và thực hiện các lệnh sau để xác minh xem sản phẩm db2 của bạn có được cài đặt đúng cách hay không.
db2level
Lệnh này hiển thị phiên bản hiện tại và mức dịch vụ của sản phẩm DB2 đã cài đặt cho phiên bản hiện tại.
Syntax:
db2level
Example:
db2level
Output:
DB21085I Instance "db2inst2" uses "64" bits
And DB2 code release "SQL10010" with level
identifier "0201010E". Informational tokens
are "DB2 v10.1.0.0", "s120403",
"LINUXAMD64101", and Fix Pack "0".
Product is installed at "/home/db2inst2/sqllib".
db2licm
Lệnh này hiển thị tất cả thông tin liên quan đến giấy phép của Sản phẩm DB2 của chúng tôi.
Syntax:
db2licm <parameter>
Example:
db2licm -l
Output:
Product name: "DB2 Advanced Enterprise Server Edition"
License type: "Trial"
Expiry date: "10/02/2014"
Product identifier: "db2aese"
Version information: "10.1"
Product name: "DB2 Connect Server"
License type: "Trial"
Expiry date: "10/02/2014"
Product identifier: "db2consv"
Version information: "10.1"
Bộ xử lý dòng lệnh (CLP)
CLP có thể được khởi động ở một trong ba chế độ:
Command mode: Trong chế độ này, mỗi lệnh và câu lệnh SQL phải có tiền tố là “db2”. Ví dụ, truy vấn “db2 kích hoạt mẫu cơ sở dữ liệu”.
Interactive input mode: bạn có thể khởi chạy chế độ này bằng cách sử dụng lệnh “db2”. Tại đây, bạn có thể chuyển các câu lệnh SQL mà không cần tiền tố. Ví dụ, "kích hoạt mẫu cơ sở dữ liệu".
Batch mode: Tại đây, bạn cần tạo một tệp script, chứa tất cả các yêu cầu của truy vấn SQL và lưu tệp với phần mở rộng “.db2”. Bạn có thể gọi nó trong dòng lệnh bằng cú pháp “db2 –tf <filename.db2>”.
Giới thiệu
Phiên bản là một môi trường hợp lý cho Trình quản lý cơ sở dữ liệu DB2. Sử dụng phiên bản, bạn có thể quản lý cơ sở dữ liệu. Tùy thuộc vào yêu cầu của chúng tôi, bạn có thể tạo nhiều phiên bản trên một máy vật lý. Nội dung của thư mục Instance là:
- Tệp cấu hình trình quản lý cơ sở dữ liệu
- Thư mục Cơ sở dữ liệu Hệ thống
- Thư mục nút
- Tệp cấu hình nút [db2nodes.cfg]
- Gỡ lỗi tệp, kết xuất tệp
Đối với Máy chủ cơ sở dữ liệu DB2, phiên bản mặc định là “DB2”. Không thể thay đổi vị trí của thư mục Instance sau khi tạo. Một phiên bản có thể quản lý nhiều cơ sở dữ liệu. Trong một ví dụ, mỗi cơ sở dữ liệu có một tên duy nhất, bộ bảng danh mục riêng, tệp cấu hình, quyền hạn và đặc quyền.
Kiến trúc của phiên bản trong sản phẩm DB2
Nhiều trường hợp
Bạn có thể tạo nhiều phiên bản trong một Máy chủ DB2Server trên Linux, UNIX và Windows. Có thể cài đặt nhiều Máy chủ DB2 trên một máy vật lý.
Tạo phiên bản trên Linux
Bạn có thể tạo nhiều phiên bản trên Linux và UNIX nếu Máy chủ DB2 được cài đặt với tư cách là người dùng gốc. Một phiên bản có thể chạy đồng thời trên Linux và UNIX một cách độc lập. Bạn có thể làm việc trong một phiên bản duy nhất của trình quản lý cơ sở dữ liệu tại một thời điểm.
Thư mục Phiên bản chứa các tệp và thư mục cấu hình cơ sở dữ liệu. Thư mục Instance được lưu trữ tại các vị trí khác nhau trên Windows tùy thuộc vào phiên bản hệ điều hành.
Bản sao danh sách
Lệnh sau được sử dụng để liệt kê các trường hợp:
db2ilist
Lệnh này liệt kê tất cả các phiên bản có sẵn trên một hệ thống.
Syntax:
db2ilist
Example:[Để xem có bao nhiêu trường hợp được tạo trong bản sao DB2]
db2ilist
Output:
db2inst1
db2inst2
db2inst3
Lệnh môi trường phiên bản
Các lệnh này rất hữu ích để làm việc với sự sắp xếp các cá thể trong DB2 CLI.
Lấy ví dụ
Lệnh này hiển thị chi tiết về phiên bản hiện đang chạy.
Syntax:
db2 get instance
Example:[Để xem phiên bản hiện tại đã kích hoạt người dùng hiện tại]
db2 get instance
Output:
The current database manager instance is : db2inst1
Đặt phiên bản
Để bắt đầu hoặc dừng trình quản lý cơ sở dữ liệu của một phiên bản trên DB2 UDB, lệnh sau được thực thi cho phiên bản hiện tại.
Syntax:
set db2instance=<instance_name>
Example:[Để sắp xếp môi trường “db2inst1” cho người dùng hiện tại]
set db2instance=db2inst1
db2start
Sử dụng lệnh này, bạn có thể bắt đầu một phiên bản. Trước đó, bạn cần chạy "set instance".
Syntax:
db2start
Example:[Để bắt đầu một phiên bản]
db2start
Output:
SQL1063N DB2START processing was successful
db2stop
Sử dụng lệnh này, bạn có thể dừng một phiên bản đang chạy.
Syntax:
db2stop
Output:
SQL1064N DB2STOP processing was successful.
Tạo một phiên bản
Hãy để chúng tôi xem cách tạo một phiên bản mới.
db2icrt
Nếu bạn muốn tạo một phiên bản mới, bạn cần đăng nhập bằng root. Id phiên bản không phải là id gốc hoặc tên gốc.
Dưới đây là các bước để tạo một phiên bản mới:
Step1: Tạo một người dùng hệ điều hành chẳng hạn.
Syntax:
useradd -u <ID> -g <group name> -m -d <user location> <user name>
-p <password>
Example: [Để tạo người dùng có tên 'db2inst2' trong nhóm 'db2iadm1' và mật khẩu 'db2inst2']
useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2
Step2: Đi tới thư mục cá thể DB2 trong người dùng gốc để tạo cá thể mới.
Location:
cd /opt/ibm/db2/v10.1/instance
Step3: Tạo phiên bản bằng cú pháp bên dưới:
Syntax:
./db2icrt -s ese -u <inst id> <instance name>
Example: [Để tạo phiên bản mới 'db2inst2' trong người dùng 'db2inst2' với các tính năng của 'ESE' (Enterprise Server Edition)]
./db2icrt -s ese -u db2inst2 db2inst2
Output:
DBI1446I The db2icrt command is running, please wait.
….
…..
DBI1070I Program db2icrt completed successfully.
Sắp xếp cổng giao tiếp và máy chủ cho một phiên bản
Chỉnh sửa tệp / etc / services và thêm số cổng. Trong cú pháp đưa ra bên dưới, 'inst_name' cho biết tên Phiên bản và 'inst_port' cho biết số cổng của phiên bản.
Syntax:
db2c_<inst name> <inst_port>/tcp
Example: [Thêm số cổng '50001 / tcp', chẳng hạn như 'db2inst2' với biến 'db2c_db2inst2' trong tệp 'services']
db2c_db2inst2 50001/tcp
Syntax 1: [Cập nhật Cấu hình Trình quản lý Cơ sở dữ liệu với tên dịch vụ. Cú pháp sau 'svcename' cho biết tên dịch vụ phiên bản và 'inst_name' cho biết tên phiên bản]
db2 update database manager configuration using svcename db2c_&<inst_name>
Example 1: [Đang cập nhật Cấu hình DBM với biến svcename có giá trị 'db2c_db2inst2', chẳng hạn như 'db2inst2'
db2 update database manager configuration using svcename db2c_db2inst2
Output
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.
Syntax 2: đặt giao thức truyền thông “tcpip” cho phiên bản hiện tại
db2set DB2COMM=tcpip
Syntax 3: [Dừng và bắt đầu phiên bản hiện tại để nhận các giá trị cập nhật từ cấu hình trình quản lý cơ sở dữ liệu]
db2stop
db2start
Cập nhật một phiên bản
Bạn có thể cập nhật một phiên bản bằng lệnh sau:
db2iupdt
Lệnh này được sử dụng để cập nhật phiên bản trong cùng phiên bản phát hành. Trước khi thực hiện lệnh này, bạn cần dừng trình quản lý cơ sở dữ liệu cá thể bằng lệnh “db2stop”. Cú pháp bên dưới “inst_name” cho biết tên phiên bản máy chủ db2 được phát hành hoặc cài đặt trước đó, mà bạn muốn cập nhật lên phiên bản máy chủ db2 mới hơn hoặc đã cài đặt.
Syntax 1: Để cập nhật một phiên bản ở chế độ bình thường
db2iupdt <inst_name>
Example1:
./db2iupdt db2inst2
Syntax 2: Để cập nhật một phiên bản trong chế độ gỡ lỗi
db2iupdt -D <inst_name>
Example
db2iupdt -D db2inst2
Nâng cấp một phiên bản
Bạn có thể nâng cấp một phiên bản từ phiên bản trước của bản sao DB2 lên phiên bản hiện tại mới được cài đặt của bản sao DB2.
db2iupgrade
Trên hệ thống Linux hoặc UNIX, lệnh này nằm trong thư mục DB2DIR / instance. Trong các cú pháp sau, “inst_name” biểu thị phiên bản DB2 trước đó và “inst_username” cho biết người dùng phiên bản sao chép DB2 phiên bản hiện tại đã được cài đặt.
Syntax 2:
db2iupgrade -d -k -u <inst_username> <inst_name>
Example:
db2iupgrade -d -k -u db2inst2 db2inst2
Command Parameters:
-d : Bật chế độ gỡ lỗi.
-k : Giữ kiểu phiên bản trước khi nâng cấp nếu nó được hỗ trợ trong bản sao DB2, từ nơi bạn đang chạy lệnh này.
Nếu bạn đang sử dụng lệnh Super User (su) trên Linux cho db2iupgrade, bạn phải sử dụng lệnh “su” với tùy chọn “-”.
Bỏ một phiên bản
Bạn có thể xóa hoặc xóa cá thể, được tạo bằng lệnh “db2icrt”.
db2idrop
Trên hệ điều hành Linux và UNIX, lệnh này nằm trong thư mục DB2_installation_folder / instance.
Syntax: [trong cú pháp sau, 'inst_username' cho biết tên người dùng của phiên bản và 'inst_name' cho biết tên phiên bản]
db2idrop -u <inst_username> <inst_name>
Example: [Để thả db2inst2]
./db2idrop -u db2inst2 db2inst2
Sử dụng các lệnh khác với phiên bản
Lệnh để tìm ra phiên bản DB2 mà chúng ta đang làm việc.
Syntax 1: [để kiểm tra phiên bản hiện tại được kích hoạt bởi trình quản lý cơ sở dữ liệu]
db2 get instance
Output:
The current database manager instance is: db2inst1
Syntax 2: [Để xem phiên bản hiện tại với các bit hoạt động và phiên bản phát hành]
db2pd -inst | head -2
Example:
db2pd -inst | head -2
Output:
Instance db2inst1 uses 64 bits and DB2 code release SQL10010
Syntax 3: [Để kiểm tra tên của phiên bản hiện đang hoạt động]
db2 select inst_name from sysibmadm.env_inst_info
Example:
db2 select inst_name from sysibmadm.env_inst_info
Output:
INST_NAME --------------------------------------
db2inst1
1 record(s) selected.
Syntax: [Để đặt một phiên bản mới làm mặc định]
db2set db2instdef=<inst_name> -g
Example: [Để mảng phiên bản mới được tạo làm phiên bản mặc định]
db2set db2instdef=db2inst2 -g
Chương này mô tả việc tạo, kích hoạt và hủy kích hoạt cơ sở dữ liệu bằng cú pháp liên quan.
Kiến trúc cơ sở dữ liệu
Cơ sở dữ liệu là tập hợp các Bảng, Lược đồ, Trang đệm, Bản ghi, Nhóm lưu trữ và Không gian bảng làm việc cùng nhau để xử lý các hoạt động cơ sở dữ liệu một cách hiệu quả.
Thư mục cơ sở dữ liệu
Thư mục cơ sở dữ liệu là một kho cơ sở dữ liệu có tổ chức. Khi bạn tạo cơ sở dữ liệu, tất cả thông tin chi tiết về cơ sở dữ liệu được lưu trữ trong thư mục cơ sở dữ liệu, chẳng hạn như chi tiết về thiết bị lưu trữ mặc định, tệp cấu hình và danh sách bảng tạm thời, v.v.
Thư mục toàn cầu phân vùng được tạo trong thư mục cá thể. Thư mục này chứa tất cả thông tin toàn cầu liên quan đến cơ sở dữ liệu. Thư mục chung của phân vùng này được đặt tên là NODExxxx / SQLyyy, trong đó xxxx là số phân vùng dữ liệu và yyy là mã thông báo cơ sở dữ liệu.
Trong thư mục phân vùng-chung, một thư mục dành riêng cho thành viên được tạo. Thư mục này chứa thông tin cơ sở dữ liệu cục bộ. Thư mục dành riêng cho thành viên được đặt tên là MEMBERxxxx trong đó xxxx là số thành viên. Môi trường DB2 Enterprise Server Edition chạy trên một thành viên duy nhất và chỉ có một thư mục cụ thể dành cho thành viên. Thư mục dành riêng cho thành viên này được đặt tên duy nhất là MEMBER0000.
Thư mục toàn cầu được phân vùng
Vị trí thư mục: <instance> / NODExxx / SQLxxx
Thư mục phân vùng-toàn cục chứa các tệp liên quan đến cơ sở dữ liệu như được liệt kê bên dưới.
- Tệp theo dõi sự kiện ghi vào tệp bế tắc toàn cầu
- Tệp thông tin không gian bảng [SQLSPCS.1, SQLSPCS.2]
- Tệp điều khiển nhóm lưu trữ [SQLSGF.1, SQLSGF.2]
- Các tệp vùng chứa không gian bảng tạm thời. [/ đường dẫn lưu trữ /
/T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA] - Tệp cấu hình chung [SQLDBCONF]
- Tệp lịch sử [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]
- Các tệp liên quan đến ghi nhật ký [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]
- Khóa tệp [SQLINSLK, SQLTMPLK]
- Bộ chứa lưu trữ tự động
Thư mục cụ thể thành viên
Vị trí thư mục: / NODExxxx / SQLxxxx / MEMBER0000
Thư mục này chứa:
- Đối tượng liên kết với cơ sở dữ liệu
- Tệp thông tin nhóm đệm [SQLBP.1, SQLBP.2]
- Tệp giám sát sự kiện cục bộ
- Các tệp liên quan đến ghi nhật ký [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH].
- Tệp cấu hình cục bộ
- Tệp theo dõi sự kiện bế tắc. Các tệp giám sát sự kiện bế tắc chi tiết được lưu trữ trong thư mục cơ sở dữ liệu của nút danh mục trong trường hợp ESE và môi trường cơ sở dữ liệu được phân vùng.
Tạo cơ sở dữ liệu
Chẳng hạn, bạn có thể tạo cơ sở dữ liệu bằng lệnh “TẠO CƠ SỞ DỮ LIỆU”. Tất cả cơ sở dữ liệu được tạo bằng nhóm lưu trữ mặc định “IBMSTOGROUP”, nhóm này được tạo tại thời điểm tạo một phiên bản. Trong DB2, tất cả các bảng cơ sở dữ liệu được lưu trữ trong “vùng bảng”, sử dụng các nhóm lưu trữ tương ứng của chúng.
Các đặc quyền cho cơ sở dữ liệu được tự động đặt thành PUBLIC [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA và SELECT], tuy nhiên, nếu có tùy chọn RESTRICTIVE, các đặc quyền sẽ không được cấp dưới dạng PUBLIC.
Tạo cơ sở dữ liệu không hạn chế
Lệnh này được sử dụng để tạo cơ sở dữ liệu không hạn chế.
Syntax: [Để tạo một Cơ sở dữ liệu mới. 'database_name' chỉ ra một tên cơ sở dữ liệu mới mà bạn muốn tạo.]
db2 create database <database name>
Example: [Để tạo một cơ sở dữ liệu không hạn chế mới với tên 'one']
db2 create database one
Output:
DB20000I The CREATE DATABASE command completed successfully.
Tạo cơ sở dữ liệu hạn chế
Cơ sở dữ liệu hạn chế được tạo khi gọi lệnh này.
Syntax: [Trong cú pháp bên dưới, “db_name” cho biết tên cơ sở dữ liệu.]
db2 create database <db_name> restrictive
Example: [Để tạo một cơ sở dữ liệu hạn chế mới với tên 'hai']
db2 create database two restrictive
Tạo cơ sở dữ liệu với vị trí do người dùng xác định khác nhau
Tạo cơ sở dữ liệu với nhóm lưu trữ mặc định “IBMSTOGROUP” trên đường dẫn khác. Trước đó, bạn đã gọi lệnh “tạo cơ sở dữ liệu” mà không có bất kỳ vị trí nào do người dùng xác định để lưu trữ hoặc tạo cơ sở dữ liệu tại một vị trí cụ thể. Để tạo cơ sở dữ liệu bằng cách sử dụng vị trí cơ sở dữ liệu do người dùng xác định, quy trình sau được thực hiện:
Syntax: [Trong cú pháp bên dưới, 'db_name' cho biết 'tên cơ sở dữ liệu' và 'data_location' cho biết nơi phải lưu trữ dữ liệu trong các thư mục và 'db_path_location' cho biết vị trí trình điều khiển của 'data_location'.]
db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'
Example: [Để tạo cơ sở dữ liệu có tên 'four', nơi dữ liệu được lưu trữ trong 'data1' và thư mục này được lưu trữ trong 'dbpath1']
db2 create database four on '/data1' dbpath on '/dbpath1'
Xem các tệp thư mục cơ sở dữ liệu cục bộ hoặc hệ thống
Bạn thực hiện lệnh này để xem danh sách các thư mục có sẵn trong phiên bản hiện tại.
Syntax:
db2 list database directory
Example:
db2 list database directory
Output:
System Database Directory
Number of entries in the directory = 6
Database 1 entry:
Database alias = FOUR
Database name = FOUR
Local database directory =
/home/db2inst4/Desktop/dbpath
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Database 2 entry:
Database alias = SIX
Database name = SIX
Local database directory = /home/db2inst4
Database release level = f.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
Kích hoạt cơ sở dữ liệu
Lệnh này khởi động tất cả các dịch vụ cần thiết cho một cơ sở dữ liệu cụ thể để cơ sở dữ liệu có sẵn cho ứng dụng.
Syntax: ['db_name' cho biết tên cơ sở dữ liệu]
db2 activate db <db_name>
Example: [Kích hoạt cơ sở dữ liệu 'một']
db2 activate db one
Hủy kích hoạt cơ sở dữ liệu
Sử dụng lệnh này, bạn có thể dừng các dịch vụ cơ sở dữ liệu.
Syntax:
db2 deactivate db <db_name>
Example: [Để hủy kích hoạt cơ sở dữ liệu 'một']
db2 deactivate db one
Kết nối với cơ sở dữ liệu
Sau khi tạo cơ sở dữ liệu, để đưa vào sử dụng, bạn cần kết nối hoặc khởi động cơ sở dữ liệu.
Syntax:
db2 connect to <database name>
Example: [Để Kết nối Cơ sở dữ liệu một với CLI hiện tại]
db2 connect to one
Output:
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
Xác minh xem cơ sở dữ liệu có hạn chế không
Để kiểm tra xem cơ sở dữ liệu này có bị hạn chế hay không, đây là cú pháp:
Syntax: [Trong cú pháp sau, 'db' cho biết Cơ sở dữ liệu, 'cfg' cho biết cấu hình, 'db_name' cho biết tên cơ sở dữ liệu]
db2 get db cfg for <db_name> | grep -i restrict
Example: [Để kiểm tra xem cơ sở dữ liệu 'một' có bị hạn chế hay không]
db2 get db cfg for one | grep -i restrict
Output:
Restrict access = NO
Định cấu hình trình quản lý cơ sở dữ liệu và cơ sở dữ liệu
Cấu hình phiên bản (Cấu hình trình quản lý cơ sở dữ liệu) được lưu trữ trong tệp có tên 'db2system' và cấu hình liên quan đến cơ sở dữ liệu được lưu trữ trong tệp có tên 'SQLDBCON'. Các tệp này không thể được chỉnh sửa trực tiếp. Bạn có thể chỉnh sửa các tệp này bằng các công cụ gọi API. Sử dụng bộ xử lý dòng lệnh, bạn có thể sử dụng các lệnh này.
Tham số cấu hình trình quản lý cơ sở dữ liệu
Syntax: [Để lấy thông tin của người quản lý Cơ sở dữ liệu phiên bản]
db2 get database manager configuration
db2 get dbm cfg
Syntax: [Để cập nhật trình quản lý cơ sở dữ liệu phiên bản]
db2 update database manager configuration
db2 update dbm cfg
Syntax: [Để đặt lại các cấu hình trước đó]
db2 reset database manager configuration
db2 reset dbm cfg
Tham số cấu hình cơ sở dữ liệu
Syntax: [Để lấy thông tin của Cơ sở dữ liệu]
db2 get database configuration
db2 get db cfg
Syntax: [Để cập nhật cấu hình cơ sở dữ liệu]
db2 update database configuration
db2 update db cfg
Syntax: [Để đặt lại các giá trị đã định cấu hình trước đó trong cấu hình cơ sở dữ liệu
db2 reset database configuration
db2 reset db cfg
Syntax: [Để kiểm tra kích thước của Cơ sở dữ liệu Hoạt động Hiện tại]
db2 "call get_dbsize_info(?,?,?,-1)"
Example: [Để xác minh kích thước của Cơ sở dữ liệu Hiện đang kích hoạt]
db2 "call get_dbsize_info(?,?,?,-1)"
Output:
Value of output parameters
--------------------------
Parameter Name : SNAPSHOTTIMESTAMP
Parameter Value : 2014-07-02-10.27.15.556775
Parameter Name : DATABASESIZE
Parameter Value : 105795584
Parameter Name : DATABASECAPACITY
Parameter Value : 396784705536
Return Status = 0
Ước tính không gian cần thiết cho cơ sở dữ liệu
Để ước tính kích thước của cơ sở dữ liệu, phải xem xét sự đóng góp của các yếu tố sau:
- Bảng danh mục hệ thống
- Dữ liệu bảng người dùng
- Dữ liệu trường dài
- Dữ liệu Đối tượng Lớn (LOB)
- Không gian chỉ mục
- Không gian làm việc tạm thời
- Dữ liệu XML
- Ghi nhật ký không gian tệp
- Thư mục cơ sở dữ liệu cục bộ
- Tập tin hệ thống
Kiểm tra cơ quan cơ sở dữ liệu
Bạn có thể sử dụng cú pháp sau để kiểm tra cơ quan cơ sở dữ liệu nào được cấp cho PUBLIC trên cơ sở dữ liệu không hạn chế.
Step 1: kết nối với cơ sở dữ liệu với xác thực user-id và mật khẩu.
Syntax: [Để kết nối với cơ sở dữ liệu bằng tên người dùng và mật khẩu]
db2 connect to <db_name> user <userid> using <password>
Example: [Để kết nối Cơ sở dữ liệu “một” với id người dùng 'db2inst4' và mật khẩu 'db2inst4']
db2 connect to one user db2inst4 using db2inst4
Output:
Database Connection Information
Database server = DB2/LINUXX8664 10.1.0
SQL authorization ID = DB2INST4
Local database alias = ONE
Step2: Để xác minh các cơ quan chức năng của cơ sở dữ liệu.
Syntax: [Cú pháp bên dưới hiển thị kết quả của các dịch vụ cấp quyền cho cơ sở dữ liệu hiện tại]
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('public','g'))as t
order by authority"
Example:
db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t
order by authority"
Output:
AUTHORITY D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL * * N * * N *
BINDADD * * Y * * N *
CONNECT * * Y * * N *
CREATETAB * * Y * * N *
CREATE_EXTERNAL_ROUTINE * * N * * N *
CREATE_NOT_FENCED_ROUTINE * * N * * N *
CREATE_SECURE_OBJECT * * N * * N *
DATAACCESS * * N * * N *
DBADM * * N * * N *
EXPLAIN * * N * * N *
IMPLICIT_SCHEMA * * Y * * N *
LOAD * * N * * N *
QUIESCE_CONNECT * * N * * N *
SECADM * * N * * N *
SQLADM * * N * * N *
SYSADM * * * * * * *
SYSCTRL * * * * * * *
SYSMAINT * * * * * * *
SYSMON * * * * * * *
WLMADM * * N * * N *
20 record(s) selected.
Bỏ cơ sở dữ liệu
Sử dụng lệnh Drop, bạn có thể xóa cơ sở dữ liệu của chúng tôi khỏi thư mục cơ sở dữ liệu cá thể. Lệnh này có thể xóa tất cả các đối tượng, bảng, khoảng trắng, vùng chứa và các tệp liên quan của nó.
Syntax: [Để loại bỏ bất kỳ cơ sở dữ liệu nào khỏi một phiên bản]
db2 drop database <db_name>
Example: [Để loại bỏ cơ sở dữ liệu 'sáu' khỏi phiên bản]
db2 drop database six
Output:
DB20000I The DROP DATABASE command completed successfully
Chương này giới thiệu với bạn về Bufferpools trong cơ sở dữ liệu.
Giới thiệu
Vùng đệm là một phần của không gian bộ nhớ chính được cấp phát bởi trình quản lý cơ sở dữ liệu. Mục đích của bufferpools là lưu dữ liệu bảng và lập chỉ mục từ đĩa. Tất cả các cơ sở dữ liệu đều có vùng đệm riêng. Một vùng đệm mặc định được tạo tại thời điểm tạo cơ sở dữ liệu mới. Nó được gọi là “IBMDEFAULTBP”. Tùy theo yêu cầu của người dùng, có thể tạo một số vùng đệm. Trong vùng đệm, trình quản lý cơ sở dữ liệu đặt dữ liệu hàng của bảng dưới dạng một trang. Trang này vẫn ở trong vùng đệm cho đến khi cơ sở dữ liệu tắt hoặc cho đến khi không gian được ghi bằng dữ liệu mới. Các trang trong vùng đệm, được cập nhật dữ liệu nhưng không được ghi vào đĩa, được gọi là trang "Dirty". Sau khi các trang dữ liệu cập nhật trong vùng đệm được ghi trên đĩa, vùng đệm sẵn sàng lấy dữ liệu khác.
Mối quan hệ giữa không gian bảng và vùng đệm
Mỗi vùng bảng được liên kết với một vùng đệm cụ thể trong cơ sở dữ liệu. Một vùng bảng được liên kết với một vùng đệm. Kích thước của vùng đệm và vùng bảng phải giống nhau. Nhiều vùng đệm cho phép bạn định cấu hình bộ nhớ được cơ sở dữ liệu sử dụng để tăng hiệu suất tổng thể của nó.
Kích thước vùng đệm
Kích thước của trang vùng đệm được đặt khi bạn sử dụng lệnh “TẠO CƠ SỞ DỮ LIỆU”. Nếu bạn không chỉ định kích thước trang, nó sẽ có kích thước trang mặc định là 4KB. Khi vùng đệm được tạo, không thể sửa đổi kích thước trang sau này
Liệt kê các vùng đệm có sẵn trong thư mục cơ sở dữ liệu hiện tại
Syntax: [Cú pháp bên dưới hiển thị tất cả các vùng đệm có sẵn trong cơ sở dữ liệu]
db2 select * from syscat.bufferpools
Example: [Để xem các vùng đệm có sẵn trong cơ sở dữ liệu hiện tại]
db2 select * from syscat.bufferpools
Output:
BPNAME BUFFERPOOLID DBPGNAME NPAGES PAGESIZE ESTORE
NUMBLOCKPAGES BLOCKSIZE NGNAME
------------------------------------------------------------
IBMDEFAULTBP
1 -
-2 4096 N 0 0 -
1 record(s) selected.
Tạo vùng đệm
Để tạo một vùng đệm mới cho máy chủ cơ sở dữ liệu, bạn cần hai tham số là "tên vùng đệm" và "kích thước của trang". Truy vấn sau được thực hiện để tạo một vùng đệm mới.
Cú pháp: [Trong cú pháp bên dưới, 'bp_name' cho biết tên vùng đệm và 'kích thước' cho biết kích thước trang bạn cần khai báo cho các vùng đệm (4K, 8K, 16K, 32K)]
db2 create bufferpool <bp_name> pagesize <size>
Example: [Để tạo một vùng đệm mới với tên “bpnew” và kích thước “8192” (8Kb).]
db2 create bufferpool bpnew pagesize 8192
Output
DB20000I The SQL command completed successfully.
Bỏ bộ đệm
Trước khi thả vùng đệm, cần phải kiểm tra xem có bất kỳ vùng bảng nào được gán cho nó hay không.
Syntax: [Để bỏ vùng đệm]
drop bufferpool <bp_name>
Example: [Để thả 'bpnew' có tên vùng đệm]
db2 drop bufferpool bpnew
Output
DB20000I The SQL command completed successfully.
Chương này mô tả chi tiết các vùng bảng
Giới thiệu
Vùng bảng là một cấu trúc lưu trữ, nó chứa các bảng, chỉ mục, các đối tượng lớn và dữ liệu dài. Nó có thể được sử dụng để tổ chức dữ liệu trong cơ sở dữ liệu thành nhóm lưu trữ logic có liên quan đến nơi dữ liệu được lưu trữ trên hệ thống. Không gian bảng này được lưu trữ trong nhóm phân vùng cơ sở dữ liệu
Lợi ích của không gian bảng trong cơ sở dữ liệu
Các không gian bảng có lợi trong cơ sở dữ liệu theo nhiều cách khác nhau như sau:
Recoverability: Không gian bảng giúp cho hoạt động sao lưu và khôi phục trở nên thuận tiện hơn. Sử dụng một lệnh duy nhất, bạn có thể sao lưu hoặc khôi phục tất cả các đối tượng cơ sở dữ liệu trong không gian bảng.
Automatic storage Management: Trình quản lý cơ sở dữ liệu tạo và mở rộng vùng chứa tùy theo nhu cầu.
Memory utilization: Một vùng đệm duy nhất có thể quản lý nhiều vùng bảng. Bạn có thể gán không gian bảng tạm thời cho vùng đệm của riêng chúng để tăng hiệu suất của các hoạt động như sắp xếp hoặc tham gia.
Thùng đựng hàng
Không gian bảng chứa một hoặc nhiều vùng chứa. Vùng chứa có thể là tên thư mục, tên thiết bị hoặc tên tệp. Trong cơ sở dữ liệu, một vùng bảng có thể có nhiều vùng chứa trên cùng một thiết bị lưu trữ vật lý. Nếu vùng bảng được tạo với tùy chọn vùng bảng lưu trữ tự động, thì việc tạo và quản lý vùng chứa sẽ do trình quản lý cơ sở dữ liệu tự động xử lý. Nếu nó không được tạo bằng tùy chọn vùng bảng lưu trữ tự động, bạn cần tự xác định và quản lý các vùng chứa.
Không gian bảng mặc định
Khi bạn tạo cơ sở dữ liệu mới, trình quản lý cơ sở dữ liệu sẽ tạo một số không gian bảng mặc định cho cơ sở dữ liệu. Các vùng bảng này được sử dụng làm nơi lưu trữ dữ liệu người dùng và dữ liệu tạm thời. Mỗi cơ sở dữ liệu phải chứa ít nhất ba không gian bảng như đã cho ở đây:
- Catalog không gian bảng
- Vùng bảng người dùng
- Vùng bảng tạm thời
Catalog tablespace: Nó chứa các bảng danh mục hệ thống cho cơ sở dữ liệu. Nó được đặt tên là SYSCATSPACE và không thể bỏ nó.
User tablespace: Vùng bảng này chứa các bảng do người dùng định nghĩa. Trong cơ sở dữ liệu, chúng tôi có một vùng bảng người dùng mặc định, được đặt tên là USERSPACE1. Nếu bạn không chỉ định vùng bảng do người dùng xác định cho một bảng tại thời điểm bạn tạo nó, thì trình quản lý cơ sở dữ liệu sẽ chọn vùng bảng người dùng mặc định cho bạn.
Temporary tablespace: Một vùng bảng tạm thời chứa dữ liệu bảng tạm thời. Vùng bảng này chứa các vùng bảng tạm thời của hệ thống hoặc vùng bảng tạm thời của người dùng.
Không gian bảng tạm thời của hệ thống giữ dữ liệu tạm thời do trình quản lý cơ sở dữ liệu yêu cầu trong khi thực hiện thao tác như sắp xếp hoặc kết hợp. Cơ sở dữ liệu phải có ít nhất một vùng bảng tạm thời của hệ thống và nó được đặt tên là TEMPSPACE1. Nó được tạo tại thời điểm tạo cơ sở dữ liệu. Vùng bảng tạm thời của người dùng giữ dữ liệu tạm thời từ các bảng. Nó được tạo bằng DECLARE GLOBAL TABLE TABLE hoặc câu lệnh CREATE GLOBAL TEMPORARY TABLE. Không gian bảng tạm thời này không được tạo theo mặc định tại thời điểm tạo cơ sở dữ liệu.
Tablespaces and storage management:
Không gian bảng có thể được thiết lập theo nhiều cách khác nhau, tùy thuộc vào cách bạn muốn sử dụng chúng. Bạn có thể thiết lập hệ điều hành để quản lý phân bổ vùng bảng, bạn có thể cho phép người quản lý cơ sở dữ liệu phân bổ không gian hoặc bạn có thể chọn tự động phân bổ vùng bảng cho dữ liệu của mình.
Có ba loại không gian được quản lý sau:
System Managed Space (SMS): Trình quản lý hệ thống tệp của hệ điều hành phân bổ và quản lý không gian nơi bảng được lưu trữ. Không gian lưu trữ được phân bổ theo yêu cầu. Mô hình này bao gồm các tệp đại diện cho các đối tượng cơ sở dữ liệu. Loại không gian bảng này đã không được chấp nhận trong Phiên bản 10.1 đối với không gian bảng do người dùng xác định và không được chấp nhận cho danh mục và không gian bảng tạm thời.
Database Managed Space (DMS): Máy chủ Cơ sở dữ liệu kiểm soát không gian lưu trữ. Không gian lưu trữ được cấp phát trước trên hệ thống tệp dựa trên định nghĩa vùng chứa mà bạn chỉ định khi tạo không gian bảng DMS. Nó không được chấp nhận từ phiên bản 10.1 sửa chữa gói 1 cho không gian bảng do người dùng xác định, nhưng nó không bị phản đối cho không gian bảng hệ thống và không gian bảng tạm thời.
Automatic Storage Tablespace: Máy chủ cơ sở dữ liệu có thể được quản lý tự động. Máy chủ cơ sở dữ liệu tạo và mở rộng vùng chứa phụ thuộc vào dữ liệu trên cơ sở dữ liệu. Với quản lý lưu trữ tự động, không bắt buộc phải cung cấp các định nghĩa về container. Máy chủ cơ sở dữ liệu trông sau khi tạo và mở rộng vùng chứa để sử dụng bộ nhớ được phân bổ cho cơ sở dữ liệu. Nếu bạn thêm không gian lưu trữ vào một nhóm lưu trữ, các vùng chứa mới sẽ tự động được tạo khi vùng chứa hiện có đạt đến dung lượng tối đa. Nếu bạn muốn sử dụng ngay bộ nhớ mới được thêm vào, bạn có thể cân bằng lại không gian bảng.
Page, table and tablespace size:
DMS tạm thời và không gian bảng lưu trữ tự động, kích thước trang bạn chọn cho cơ sở dữ liệu của mình xác định giới hạn tối đa cho kích thước vùng bảng. Đối với SMS bảng và không gian bảng lưu trữ tự động tạm thời, kích thước trang hạn chế kích thước của chính bảng. Kích thước trang có thể là 4kb, 8kb, 16kb hoặc 32kb.
Loại vùng bảng | Giới hạn kích thước trang 4K | Giới hạn kích thước 8K trang | Giới hạn kích thước trang 16K | Giới hạn kích thước 32K trang |
---|---|---|---|---|
DMS, không gian bảng lưu trữ tự động không tạm thời thông thường | 64G | 128G | 256G | 512G |
DMS, DMS tạm thời và không gian bảng lưu trữ tự động không tạm thời lớn | 1892G | 16384G | 32768G | 65536G |
Chương này mô tả Nhóm lưu trữ cơ sở dữ liệu.
Giới thiệu
Tập hợp các đường dẫn Lưu trữ để lưu trữ bảng hoặc đối tượng cơ sở dữ liệu, là một nhóm lưu trữ. Bạn có thể gán không gian bảng cho nhóm lưu trữ. Khi bạn tạo một cơ sở dữ liệu, tất cả các vùng bảng sẽ có bộ nhớ lưu trữ mặc định. Nhóm lưu trữ mặc định cho cơ sở dữ liệu là 'IBMSTOGROUP'. Khi bạn tạo cơ sở dữ liệu mới, nhóm lưu trữ mặc định sẽ hoạt động, nếu bạn truyền tham số “AUTOMATIC STOGROUP NO” vào cuối lệnh “CREATE DATABASE”. Cơ sở dữ liệu không có bất kỳ nhóm lưu trữ mặc định nào.
Nhóm lưu trữ danh sách
Bạn có thể liệt kê tất cả các nhóm lưu trữ trong cơ sở dữ liệu.
Syntax: [Để xem danh sách các nhóm lưu trữ có sẵn trong cơ sở dữ liệu hiện tại]
db2 select * from syscat.stogroups
Example: [Để xem danh sách các dự phòng lưu trữ có sẵn trong cơ sở dữ liệu hiện tại]
db2 select * from syscat.stogroups
Tạo nhóm lưu trữ
Đây là cú pháp để tạo một nhóm lưu trữ trong cơ sở dữ liệu:
Syntax: [Để tạo một nhóm mới. 'Stogropu_name' cho biết tên của nhóm lưu trữ mới và 'đường dẫn' cho biết vị trí nơi dữ liệu (bảng) được lưu trữ]
db2 create stogroup
on ‘path’
Example: [Để tạo một nhóm mới 'stg1' trên đường dẫn 'data1' thư mục]
db2 create stogroup stg1 on ‘/data1’
Output:
DB20000I The SQL command completed succesfully
Tạo không gian bảng với nhóm
Đây là cách bạn có thể tạo một vùng bảng với nhóm cửa hàng:
Syntax: [Để tạo một vùng bảng mới bằng cách sử dụng nhóm lưu trữ hiện có]
db2 create tablespace <tablespace_name> using stogroup <stogroup_name>
Example: [Để tạo một vùng bảng mới có tên 'ts1' bằng cách sử dụng nhóm lưu trữ hiện có 'stg1']
db2 create tablespace ts1 using stogroup stg1
Output:
DB20000I The SQL command completed succesfully
Thay đổi nhóm lưu trữ
Bạn có thể thay đổi vị trí của nhóm cửa hàng bằng cách sử dụng cú pháp sau:
Syntax: [Để chuyển nhóm lưu trữ từ vị trí cũ sang vị trí mới]
db2 alter stogroup
add ‘location’, ‘location’
Example: [Để sửa đổi đường dẫn vị trí từ vị trí cũ sang vị trí mới cho nhóm lưu trữ có tên 'sg1']
db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’
Đang thả đường dẫn thư mục của nhóm lưu trữ
Trước khi bỏ đường dẫn thư mục của nhóm lưu trữ, bạn có thể thêm vị trí mới cho nhóm lưu trữ bằng cách sử dụng lệnh thay đổi.
Syntax: [Để xóa đường dẫn cũ khỏi vị trí nhóm lưu trữ]
db2 alter stogroup
drop ‘/path’
Example: [Để loại bỏ vị trí nhóm lưu trữ khỏi 'stg1']
db2 alter stogroup stg1 drop ‘/path/data1’
Cân bằng lại vùng bảng
Cân bằng lại không gian bảng là bắt buộc khi chúng ta tạo một thư mục mới cho nhóm lưu trữ hoặc không gian bảng trong khi các giao dịch được tiến hành trên cơ sở dữ liệu và không gian bảng trở nên đầy. Tái cân bằng cập nhật các tệp cấu hình cơ sở dữ liệu với nhóm lưu trữ mới.
Syntax: [Để cân bằng lại không gian bảng từ đường dẫn nhóm lưu trữ cũ sang nhóm lưu trữ mới]
db2 alter tablspace <ts_name> rebalance
Example: [Để cân bằng lại]
db2 alter tablespace ts1 rebalance
Đổi tên nhóm lưu trữ
Syntax: [Để sửa đổi tên của tên bộ nhớ hiện có]
db2 rename stogroup <old_stg_name> to <new_stg_name>
Example: [Để sửa đổi tên của nhóm lưu trữ từ 'sg1' thành tên mới 'sgroup1']
db2 rename stogroup sg1 to sgroup1
Bỏ nhóm lưu trữ
Step 1: Trước khi bỏ bất kỳ nhóm lưu trữ nào, bạn có thể chỉ định một số nhóm lưu trữ khác nhau cho không gian bảng.
Syntax: [Để gán một nhóm lưu trữ khác cho không gian bảng.]
db2 alter tablspace <ts_name> using stogroup <another sto_group_name>
Example: [Để thay đổi từ một nhóm cũ sang nhóm mới có tên 'sg2' cho không gian bảng 'ts1']
db2 alter tablespace ts1 using stogroup sg2
Step 2:
Syntax: [Để loại bỏ nhóm hiện có]
db2 drop stogorup <stogroup_name>
Example: [Để thả nhóm 'stg1' khỏi cơ sở dữ liệu]
db2 drop stogroup stg1
Chương này giới thiệu và mô tả khái niệm về Lược đồ.
Giới thiệu
Một lược đồ là một tập hợp các đối tượng được đặt tên được phân loại một cách hợp lý trong cơ sở dữ liệu.
Trong cơ sở dữ liệu, bạn không thể tạo nhiều đối tượng cơ sở dữ liệu có cùng tên. Để làm như vậy, lược đồ cung cấp một môi trường nhóm. Bạn có thể tạo nhiều lược đồ trong một cơ sở dữ liệu và bạn có thể tạo nhiều đối tượng cơ sở dữ liệu có cùng tên, với các nhóm lược đồ khác nhau.
Một lược đồ có thể chứa các bảng, hàm, chỉ số, không gian bảng, thủ tục, trình kích hoạt, v.v. Ví dụ: bạn tạo hai lược đồ khác nhau có tên là “Chuyên nghiệp” và “Cá nhân” cho cơ sở dữ liệu “nhân viên”. Có thể lập hai bảng khác nhau có cùng tên “Nhân viên”. Trong môi trường này, một bảng có thông tin nghề nghiệp và bảng kia có thông tin cá nhân của nhân viên. Mặc dù có hai bảng trùng tên, chúng có hai lược đồ khác nhau “Cá nhân” và “Chuyên nghiệp”. Do đó, người dùng có thể làm việc với cả hai mà không gặp bất kỳ vấn đề nào. Tính năng này rất hữu ích khi có những ràng buộc trong việc đặt tên cho các bảng.
Hãy cho chúng tôi xem một số lệnh liên quan đến Schema:
Nhận giản đồ hiện đang hoạt động
Syntax:
db2 get schema
Example: [Để lấy giản đồ cơ sở dữ liệu hiện tại]
db2 get schema
Đặt một giản đồ khác cho môi trường hiện tại
Syntax:
db2 set schema=<schema_name>
Example: [Để sắp xếp 'schema1' vào môi trường phiên bản hiện tại]
db2 set schema=schema1
Tạo một lược đồ mới
Syntax: [Để tạo một lược đồ mới với id người dùng được ủy quyền]
db2 create schema <schema_name> authroization <inst_user>
Example: [Để tạo lược đồ “schema1” được ủy quyền với 'db2inst2 ”]
db2 create schema schema1 authorization db2inst2
Tập thể dục
Chúng ta hãy tạo hai bảng khác nhau có cùng tên nhưng hai lược đồ khác nhau. Tại đây, bạn tạo bảng nhân viên với hai lược đồ khác nhau, một cho thông tin cá nhân và một cho thông tin nghề nghiệp.
Step 1: Tạo hai lược đồ.
Schema 1: [Để tạo giản đồ có tên là chuyên nghiệp]
db2 create schema professional authorization db2inst2
Schema 2: [Để tạo giản đồ có tên là cá nhân]
db2 create schema personal authorization db2inst2
Step 2: Tạo hai bảng có cùng tên để biết chi tiết về Nhân viên
Table1: Professional.employee
[Để tạo một bảng mới 'nhân viên' trong cơ sở dữ liệu bằng cách sử dụng tên giản đồ 'chuyên nghiệp']
db2 create table professional.employee(id number, name
varchar(20), profession varchar(20), join_date date,
salary number);
Table2: cá nhân.employee
[Để tạo một bảng mới 'nhân viên' trong cùng một cơ sở dữ liệu, với tên giản đồ là 'cá nhân']
db2 create table personal.employee(id number, name
varchar(20), d_birth date, phone bigint, address
varchar(200));
Sau khi thực hiện các bước này, bạn nhận được hai bảng có cùng tên 'nhân viên', với hai lược đồ khác nhau.
Chương này giới thiệu các kiểu dữ liệu khác nhau được sử dụng trong DB2.
Giới thiệu
Trong các bảng Cơ sở dữ liệu DB2, mỗi cột có kiểu dữ liệu riêng tùy thuộc vào yêu cầu của nhà phát triển. Kiểu dữ liệu được cho là kiểu và phạm vi của các giá trị trong các cột của bảng.
Các kiểu dữ liệu tích hợp
- Ngày giờ
- TIME: Nó thể hiện thời gian trong ngày bằng giờ, phút và giây.
- TIMESTAMP: Nó đại diện cho bảy giá trị của ngày và giờ ở dạng năm, tháng, ngày, giờ, phút, giây và micro giây.
- DATE: Nó đại diện cho ngày trong ngày thành ba phần dưới dạng năm, tháng và ngày.
- String
- Character
- CHAR (fixed length): Độ dài cố định của chuỗi Ký tự.
- Chiều dài thay đổi
- VARCHAR: Các chuỗi ký tự có độ dài thay đổi.
- CLOB: chuỗi đối tượng lớn, bạn sử dụng điều này khi một chuỗi ký tự có thể vượt quá giới hạn của kiểu dữ liệu VARCHAR.
- Graphic
- GRAPHIC
- Fixed length: Các chuỗi đồ họa có độ dài cố định có chứa các ký tự 2 byte
- Chiều dài thay đổi
- VARGRAPHIC: Chuỗi đồ họa ký tự thay đổi có chứa các ký tự tạm biệt kép.
- DBCLOB: loại đối tượng lớn
- Binary
- BLOB (độ dài khác nhau): chuỗi nhị phân trong đối tượng lớn
- BOOLEAN: Dưới dạng 0 và 1.
- Signed numeric
- Exact
- Binary integer
- SMALLINT [16BIT]: Sử dụng điều này, bạn có thể chèn các giá trị int nhỏ vào các cột
- INTEGER [32BIT]: Sử dụng điều này, bạn có thể chèn các giá trị int lớn vào các cột
- BIGINT [64BIT]: Sử dụng điều này, bạn có thể chèn các giá trị int lớn hơn vào các cột
- Decimal
- DECIMAL (đóng gói)
- DECFLOAT (dấu phẩy động thập phân): Sử dụng tính năng này, bạn có thể chèn số dấu phẩy động thập phân
- Approximate
- Floating points
- REAL (độ chính xác đơn): Sử dụng kiểu dữ liệu này, bạn có thể chèn các số dấu chấm động chính xác đơn.
- DOUBLE (độ chính xác kép): Sử dụng kiểu dữ liệu này, bạn có thể chèn số dấu chấm động có độ chính xác gấp đôi.
- eXtensible Mark-up Language
- XML: Bạn có thể lưu trữ dữ liệu XML vào cột kiểu dữ liệu này.
Các bảng có cấu trúc logic được duy trì bởi trình quản lý Cơ sở dữ liệu. Trong một bảng, mỗi khối dọc được gọi là cột (Tuple) và mỗi khối ngang được gọi là hàng (Thực thể). Tập hợp dữ liệu được lưu trữ dưới dạng cột và hàng được gọi là bảng. Trong các bảng, mỗi cột có kiểu dữ liệu khác nhau. Các bảng được sử dụng để lưu trữ dữ liệu liên tục.
Loại bảng
- Base Tables: Chúng giữ dữ liệu liên tục. Có nhiều loại bảng cơ sở khác nhau, bao gồm:
- Regular Tables: Bảng mục đích chung, Bảng thông thường có chỉ mục là bảng mục đích chung.
- Multidimensional Clustering Table (MDC): Loại bảng này được nhóm vật lý trên nhiều khóa và nó được sử dụng để duy trì các môi trường cơ sở dữ liệu lớn. Loại bảng này không được hỗ trợ trong DB2 pureScale.
- Insert time clustering Table (ITC): Tương tự như bảng MDC, các hàng được nhóm lại theo thời gian chúng được chèn vào bảng. Chúng có thể là các bảng được phân vùng. Chúng cũng không hỗ trợ môi trường pureScale.
- Range-Clustered tables Table (RCT): Loại bảng này cung cấp khả năng truy cập dữ liệu trực tiếp và nhanh chóng. Chúng được thực hiện dưới dạng các cụm tuần tự. Mỗi bản ghi trong bảng có một ID bản ghi. Loại bảng này được sử dụng khi dữ liệu được nhóm chặt chẽ với một hoặc nhiều cột trong bảng. Loại bảng này cũng không hỗ trợ trong DB2 pureScale.
- Partitioned Tables: Loại bảng này được sử dụng trong lược đồ tổ chức dữ liệu, trong đó dữ liệu bảng được chia thành nhiều đối tượng lưu trữ. Các phân vùng dữ liệu có thể được thêm vào, gắn vào và tách ra khỏi bảng đã phân vùng. Bạn có thể lưu trữ nhiều phân vùng dữ liệu từ một bảng trong một vùng bảng.
- Temporal Tables: Lịch sử của một bảng trong cơ sở dữ liệu được lưu trữ trong các bảng tạm thời chẳng hạn như chi tiết về các sửa đổi đã thực hiện trước đó.
- Temporary Tables: Đối với công việc tạm thời của các hoạt động cơ sở dữ liệu khác nhau, bạn cần sử dụng các bảng tạm thời. Các bảng tạm thời (DGTT) không xuất hiện trong danh mục hệ thống, không thể sử dụng các cột XML trong các bảng tạm thời đã tạo.
- Materialized Query Tables: MQT có thể được sử dụng để cải thiện hiệu suất của các truy vấn. Các loại bảng này được xác định bởi một truy vấn, được sử dụng để xác định dữ liệu trong bảng.
Tạo bảng
Cú pháp sau tạo bảng:
Syntax: [Để tạo một bảng mới]
db2 create table <schema_name>.<table_name>
(column_name column_type....) in <tablespace_name>
Example: Chúng tôi tạo một bảng để lưu trữ thông tin chi tiết về “nhân viên” trong lược đồ “chuyên nghiệp”. Bảng này có các trường “id, name, jobrole, joindate, lương” và dữ liệu bảng này sẽ được lưu trữ trong không gian bảng “ts1”.
db2 create table professional.employee(id int, name
varchar(50),jobrole varchar(30),joindate date,
salary double) in ts1
Output:
DB20000I The SQL command completed successfully.
Bảng liệt kê chi tiết
Cú pháp sau được sử dụng để liệt kê chi tiết bảng:
Syntax: [Để xem danh sách các bảng được tạo bằng lược đồ]
db2 select tabname, tabschema, tbspace from syscat.tables
Example: [Để xem danh sách các bảng trong cơ sở dữ liệu hiện tại]
db2 select tabname, tabschema, tbspace from syscat.tables
Output:
TABNAME TABSCHEMA TBSPACE
------------ ------------- --------
EMPLOYEE PROFESSIONAL TS1
1 record(s) selected.
Liệt kê các cột trong một bảng
Cú pháp sau liệt kê các cột trong bảng:
Syntax: [Để xem các cột và kiểu dữ liệu của bảng]
db2 describe table <table_name>
Example: [Để xem các cột và kiểu dữ liệu của bảng 'nhân viên']
db2 describe table professional.employee
Output:
Data type Column
Column name schema Data type name Length Scale Nulls
------ ----- --------- ----------------- --------- ----- ------
ID SYSIBM INTEGER 4 0 Yes
NAME SYSIBM VARCHAR 50 0 Yes
JOBROLE SYSIBM VARCHAR 30 0 Yes
JOINDATE SYSIBM DATE 4 0 Yes
SALARY SYSIBM DOUBLE 8 0 Yes
5 record(s) selected.
Cột ẩn
Bạn có thể ẩn toàn bộ cột của bảng. Nếu bạn gọi truy vấn “select * from”, các cột ẩn sẽ không được trả về trong bảng kết quả. Khi bạn chèn dữ liệu vào bảng, câu lệnh “INSERT” không có danh sách cột sẽ không mong đợi giá trị cho bất kỳ cột nào được ẩn hoàn toàn. Loại cột này được tham chiếu nhiều trong các bảng truy vấn cụ thể hóa. Loại cột này không hỗ trợ tạo bảng tạm thời.
Tạo bảng với cột ẩn
Cú pháp sau tạo bảng với các cột ẩn:
Syntax: [Để tạo bảng có các cột ẩn]
db2 create table <tab_name> (col1 datatype,col2 datatype
implicitly hidden)
Example: [Để tạo bảng 'khách hàng' với các cột ẩn 'điện thoại']
db2 create table professional.customer(custid integer not
null, fullname varchar(100), phone char(10)
implicitly hidden)
Chèn các giá trị dữ liệu trong bảng
Cú pháp sau sẽ chèn các giá trị trong bảng:
Syntax: [Để chèn giá trị vào bảng]
db2 insert into <tab_name>(col1,col2,...)
values(val1,val2,..)
Example: [Để chèn giá trị vào bảng 'khách hàng']
db2 insert into professional.customer(custid, fullname, phone)
values(100,'ravi','9898989')
db2 insert into professional.customer(custid, fullname, phone)
values(101,'krathi','87996659')
db2 insert into professional.customer(custid, fullname, phone)
values(102,'gopal','768678687')
Output:
DB20000I The SQL command completed successfully.
Lấy giá trị từ bảng
Cú pháp sau lấy các giá trị từ bảng:
Syntax: [Để truy xuất các giá trị tạo thành một bảng]
db2 select * from <tab_name>
Example: [Để truy xuất các giá trị từ bảng 'khách hàng']
db2 select * from professional.customer
Output:
CUSTID FULLNAME
----------- ------------------------
100 ravi
101 krathi
102 gopal
3 record(s) selected.
Lấy các giá trị từ một bảng bao gồm các cột ẩn
Cú pháp sau lấy giá trị từ các cột đã chọn:
Syntax: [Để truy xuất các giá trị cột ẩn đã chọn từ bảng]
db2 select col1,col2,col3 from <tab_name>
Example: [Để truy xuất kết quả các giá trị cột đã chọn từ bảng]
db2 select custid,fullname,phone from professional.customer
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
Nếu bạn muốn xem dữ liệu trong các cột ẩn, bạn cần thực hiện lệnh “DESCRIBE”.
Syntax:
db2 describe table <table_name> show detail
Example:
db2 describe table professional.customer show detail
Output:
Column name Data type schema Data type name Column
column Partitionkey code
Length Scale Nulls
number sequence page Hidden Default
--------------- -------------------- --------------- -------- ----
---- -------- ---------- ------------- -------- ----------- ------
---
CUSTID SYSIBM INTEGER 4 0
No 0 0 0 No
FULLNAME SYSIBM VARCHAR 100 0
Yes 1 0 1208 No
PHONE SYSIBM CHARACTER 10 0
Yes 2 0 1208 Implicitly
3 record(s) selected.
Thay đổi loại cột trong bảng
Bạn có thể sửa đổi cấu trúc bảng của chúng tôi bằng cách sử dụng lệnh "thay đổi" này như sau:
Syntax:
db2 alter table <tab_name> alter column <col_name> set data type <data_type>
Example: [Để sửa đổi kiểu dữ liệu cho cột “id” từ “int” thành “bigint” cho bảng nhân viên]
db2 alter table professional.employee alter column id set data type bigint
Output::
DB20000I The SQL command completed successfully.
Thay đổi tên cột
Bạn có thể thay đổi tên cột như hình dưới đây:
Syntax: [Để sửa đổi tên cột từ tên cũ thành tên mới của bảng]
db2 alter table <tab_name> rename column <old_name> to <new_name>
Example: [Để sửa đổi tên cột từ “fullname” thành “custname” trong bảng “customer”.]
db2 alter table professional.customer rename column fullname to custname
Bỏ bàn
Để xóa bất kỳ bảng nào, bạn cần sử dụng lệnh “DROP” như sau:
Syntax:
db2 drop table <tab_name>
Example: [Để thả cơ sở dữ liệu biểu mẫu bảng khách hàng]
db2 drop table professional.customers
Để xóa toàn bộ hệ thống phân cấp của bảng (bao gồm các trình kích hoạt và mối quan hệ), bạn cần sử dụng lệnh “DROP TABLE HIERARCHY”.
Syntax:
db2 drop table hierarchy <tab_name>
Example: [Để loại bỏ toàn bộ thứ bậc của bảng 'khách hàng']
db2 drop table hierarchy professional.customers
Chương này mô tả việc tạo bí danh và truy xuất dữ liệu bằng bí danh của các đối tượng cơ sở dữ liệu.
Giới thiệu
Bí danh là một tên thay thế cho các đối tượng cơ sở dữ liệu. Nó có thể được sử dụng để tham chiếu đối tượng cơ sở dữ liệu. Có thể nói, nó là biệt danh cho các đối tượng cơ sở dữ liệu. Bí danh được xác định cho các đối tượng để đặt tên ngắn gọn, do đó giảm kích thước truy vấn và tăng khả năng đọc của truy vấn.
Tạo bí danh đối tượng cơ sở dữ liệu
Bạn có thể tạo bí danh đối tượng cơ sở dữ liệu như hình dưới đây:
Syntax:
db2 create alias <alias_name> for <table_name>
Example: Tạo tên bí danh cho bảng "chuyên nghiệp.customer"
db2 create alias pro_cust for professional.customer
Nếu bạn vượt qua “SELECT * FROM PRO_CUST” hoặc “SELECT * FROM PROFESSIONAL.CUSTOMER” máy chủ cơ sở dữ liệu sẽ hiển thị cùng một kết quả.
Syntax: [Để truy xuất các giá trị từ một bảng trực tiếp với tên giản đồ]
db2 select * from <schema_name>.<table_name>
Example: [Để truy xuất giá trị từ khách hàng trên bàn]
db2 select * from professional.customer
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
Truy xuất giá trị bằng cách sử dụng tên bí danh của bảng
Bạn có thể lấy các giá trị từ cơ sở dữ liệu bằng cách sử dụng tên bí danh như hình dưới đây:
Syntax: [Để truy xuất các giá trị từ bảng bằng cách gọi tên bí danh của bảng]
db2 select * from <alias_name>
Example: [Để truy xuất giá trị từ khách hàng trong bảng bằng cách sử dụng tên bí danh]
db2 select * from pro_cust
Output:
CUSTID FULLNAME PHONE
------- --------- ------------
100 ravi 9898989
101 krathi 87996659
102 gopal 768678687
3 record(s) selected.
Chương này mô tả các ràng buộc khác nhau trong cơ sở dữ liệu.
Giới thiệu
Để thực thi tính toàn vẹn của cơ sở dữ liệu, một tập hợp các quy tắc được xác định, được gọi là các ràng buộc. Các ràng buộc cho phép hoặc cấm các giá trị trong cột.
Trong các hoạt động cơ sở dữ liệu Thời gian thực, dữ liệu phải được thêm vào với một số hạn chế nhất định. Ví dụ: trong cơ sở dữ liệu bán hàng, id bán hàng hoặc id giao dịch phải là duy nhất. Các loại ràng buộc là:
- CÓ GIÁ TRỊ
- Unique
- Khóa chính
- Khóa ngoại
- Check
- Informational
Các ràng buộc chỉ được liên kết với các bảng. Chúng chỉ được áp dụng cho các bảng cụ thể. Chúng được xác định và áp dụng cho bảng tại thời điểm tạo bảng.
Giải thích về từng ràng buộc:
CÓ GIÁ TRỊ
Đó là một quy tắc để cấm các giá trị null từ một hoặc nhiều cột trong bảng.
Syntax:
db2 create table <table_name>(col_name col_type not null,..)
Example: [Để tạo một bảng bán hàng, với bốn cột (id, itemname, qty, price), thêm các ràng buộc “not null” vào tất cả các cột để tránh tạo bất kỳ ô trống nào trong bảng.]
db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)
Chèn giá trị NOT NULL vào bảng
Bạn có thể chèn các giá trị vào bảng như hình dưới đây:
Example: [Truy vấn LỖI]
db2 insert into shopper.sales(id,itemname,qty)
values(1,'raagi',12)
Output: [Truy vấn đúng]
DB21034E The command was processed as an SQL statement because
it was not a
valid Command Line Processor command. During SQL processing
it returned:
SQL0407N Assignment of a NULL value to a NOT NULL column
"TBSPACEID=5,
TABLEID=4, COLNO=3" is not allowed. SQLSTATE=23502
Example: [Truy vấn đúng]
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)
Output:
DB20000I The SQL command completed successfully.
Ràng buộc duy nhất
Sử dụng các ràng buộc này, bạn có thể đặt giá trị của các cột duy nhất. Đối với điều này, các ràng buộc duy nhất được khai báo với ràng buộc “not null” tại thời điểm tạo bảng.
Syntax:
db2 create table <tab_name>(<col> <col_type> not null unique, ...)
Example:
db2 create table shopper.sales1(id bigint not null unique,
itemname varchar(40) not null, qty int not null,price
double not null)
Chèn các giá trị vào bảng
Example: Để chèn bốn hàng khác nhau với các id duy nhất là 1, 2, 3 và 4.
db2 insert into shopper.sales1(id, itemname, qty, price)
values(1, 'sweet', 100, 89)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(2, 'choco', 50, 60)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'butter', 30, 40)
db2 insert into shopper.sales1(id, itemname, qty, price)
values(4, 'milk', 1000, 12)
Example: Để chèn một hàng mới có giá trị "id" 3
db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'cheese', 60, 80)
Output: khi bạn cố gắng chèn một hàng mới với giá trị id đã tồn tại, nó sẽ hiển thị kết quả sau:
DB21034E The command was processed as an SQL statement
because it was not a
valid Command Line Processor command. During
SQL processing it returned:
SQL0803N One or more values in the INSERT statement,
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key,
unique constraint or unique index identified by "1" constrains
table "SHOPPER.SALES1" from having duplicate values for the
index key. SQLSTATE=23505
Khóa chính
Tương tự như các ràng buộc duy nhất, bạn có thể sử dụng một ràng buộc “khóa chính” và một ràng buộc “khóa ngoại” để khai báo mối quan hệ giữa nhiều bảng.
Syntax:
db2 create table <tab_name>(
,.., primary key ())
Example: Để tạo bảng "salesboys" với "sid" làm khóa chính
db2 create table shopper.salesboys(sid int not null, name
varchar(40) not null, salary double not null, constraint
pk_boy_id primary key (sid))
Khóa ngoại
Khóa ngoại là một tập hợp các cột trong bảng được yêu cầu khớp với ít nhất một khóa chính của một hàng trong bảng khác. Nó là một ràng buộc tham chiếu hoặc ràng buộc toàn vẹn tham chiếu. Đó là một quy tắc logic về các giá trị trong nhiều cột trong một hoặc nhiều bảng. Nó cho phép mối quan hệ bắt buộc giữa các bảng.
Trước đó, bạn đã tạo một bảng có tên “shopper.salesboys”. Đối với bảng này, khóa chính là "sid". Bây giờ bạn đang tạo một bảng mới có thông tin chi tiết cá nhân của cậu bé bán hàng với các giản đồ khác nhau có tên là “nhân viên” và bảng có tên “cậu bán hàng”. Trong trường hợp này, “sid” là khóa ngoại.
Syntax:
db2 create table <tab_name>(<col> <col_type>,constraint
<const_name> foreign key (<col_name>)
reference <ref_table> (<ref_col>)
Example: [Để tạo một bảng có tên 'salesboys' với cột khóa ngoại 'sid']
db2 create table employee.salesboys(
sid int,
name varchar(30) not null,
phone int not null,
constraint fk_boy_id
foreign key (sid)
references shopper.salesboys (sid)
on delete restrict
)
Example: [Chèn giá trị vào bảng khóa chính “shopper.salesboys”]
db2 insert into shopper.salesboys values(100,'raju',20000.00),
(101,'kiran',15000.00),
(102,'radha',10000.00),
(103,'wali',20000.00),
(104,'rayan',15000.00)
Example: [Chèn giá trị vào bảng khóa ngoại “worker.salesboys” [không có lỗi]]
db2 insert into employee.salesboys values(100,'raju',98998976),
(101,'kiran',98911176),
(102,'radha',943245176),
(103,'wali',89857330),
(104,'rayan',89851130)
Nếu bạn nhập một số không xác định, không được lưu trữ trong bảng “shopper.salesboys”, nó sẽ hiển thị cho bạn lỗi SQL.
Example: [thực thi lỗi]
db2 insert into employee.salesboys values(105,'rayan',89851130)
Output:
DB21034E The command was processed as an SQL statement because it
was not a valid Command Line Processor command. During SQL
processing it returned: SQL0530N The insert or update value of
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any
value of the parent key of the parent table. SQLSTATE=23503
Kiểm tra ràng buộc
Bạn cần sử dụng ràng buộc này để thêm các hạn chế có điều kiện cho một cột cụ thể trong bảng.
Syntax:
db2 create table
(
primary key (
), constraint
check (condition or condition) )
Example: [To create emp1 table with constraints values]
db2 create table empl
(id smallint not null,
name varchar(9),
dept smallint check (dept between 10 and 100),
job char(5) check (job in ('sales', 'mgr', 'clerk')),
hiredate date,
salary decimal(7,2),
comm decimal(7,2),
primary key (id),
constraint yearsal check (year(hiredate) > 1986 or salary > 40500)
)
Inserting values
You can insert values into a table as shown below:
db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' ,
40000.00, 1000.00)
Dropping the constraint
Let us see the syntaxes for dropping various constraints.
Dropping UNIQUE constraint
Syntax:
db2 alter table <tab_name> drop unique <const_name>
Dropping primary key
Syntax:
db2 alter table <tab_name> drop primary key
Dropping check constraint
Syntax:
db2 alter table <tab_name> drop check <check_const_name>
Dropping foreign key
Syntax:
db2 alter table <tab_name> drop foreigh key <foreign_key_name>
DB2 Indexes
This chapter covers introduction to indexes, their types, creation and dropping.
Introduction
Index is a set of pointers, which can refer to rows in a table, blocks in MDC or ITC tables, XML data in an XML storage object that are logically ordered by the values of one or more keys. It is created on DB2 table columns to speed up the data access for the queries, and to cluster and partition the data efficiently. It can also improve the performance of operation on the view. A table with a unique index can have rows with unique keys. Depending on the table requirements, you can take different types of indexes.
Types of indexes
- Unique and Non-Unique indexes
- Clustered and non-clustered indexes
Creating indexes
For creating unique indexes, you use following syntax:
Syntax:
db2 create unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)
Example: To create index for “shopper.sales1” table.
db2 create unique index sales1_indx on
shopper.sales1(id) include (itemname)
Dropping indexes
For dropping the index, you use the following syntax:
Syntax:
db2 create unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)
Example:
db2 drop index sales_index
DB2 Triggers
This chapter describes triggers, their types, creation and dropping of the triggers.
Introduction
A trigger is a set of actions, which are performed for responding to an INSERT, UPDATE or DELETE operation on a specified table in the database. Triggers are stored in the database at once. They handle governance of data. They can be accessed and shared among multiple applications. The advantage of using triggers is, if any change needs to be done in the application, it is done at the trigger; instead of changing each application that is accessing the trigger. Triggers are easy to maintain and they enforce faster application development. Triggers are defined using an SQL statement “CREATE TRIGGER”.
Types of triggers
There are two types of triggers:
1. BEFORE triggers
They are executed before any SQL operation.
2. AFTER triggers
They are executed after any SQL operation.
Creating a BEFORE trigger
Let us see how to create a sequence of trigger:
Syntax:
db2 create sequence <seq_name>
Example: Creating a sequence of triggers for table shopper.sales1
db2 create sequence sales1_seq as int start with 1 increment by 1
Syntax:
db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
<table_object>.<col_name>=nextval for <sequence_name>
Example: Creating trigger for shopper.sales1 table to insert primary key numbers automatically
db2 create trigger sales1_trigger no cascade before insert on
shopper.sales1 referencing new as obj for each row set
obj.id=nextval for sales1_seq
Now try inserting any values:
db2 insert into shopper.sales1(itemname, qty, price)
values('bicks', 100, 24.00)
Retrieving values from table
Let us see how to retrieve values from a table:
Syntax:
db2 select * from <tablename>
Example:
db2 select * from shopper.sales1
Output:
ID ITEMNAME QTY
------- ------------ ----------
3 bicks 100
2 bread 100
2 record(s) selected.
Creating an AFTER trigger
Let us see how to create an after trigger:
Syntax:
db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
<table_object>.<col_name>=nextval for <sequence_name>
Example: [To insert and retrieve the values]
db2 create trigger sales1_tri_after after insert on shopper.sales1
for each row mode db2sql begin atomic update shopper.sales1
set price=qty*price; end
Output:
//inseting values in shopper.sales1
db2 insert into shopper.sales1(itemname,qty,price)
values('chiken',100,124.00)
//output
ID ITEMNAME QTY PRICE
----- -------------- ----------- -----------
3 bicks 100 2400.00
4 chiken 100 12400.00
2 bread 100 2400.00
3 record(s) selected.
Dropping a trigger
Here is how a database trigger is dropped:
Syntax:
db2 drop trigger <trigger_name>
Example:
db2 drop trigger slaes1_trigger
DB2 - Sequences
This chapter introduces you to the concept of sequence, creation of sequence, viewing the sequence, and dropping them.
Introduction
A sequence is a software function that generates integer numbers in either ascending or descending order, within a definite range, to generate primary key and coordinate other keys among the table. You use sequence for availing integer numbers say, for employee_id or transaction_id. A sequence can support SMALLINT, BIGINT, INTEGER, and DECIMAL data types. A sequence can be shared among multiple applications. A sequence is incremented or decremented irrespective of transactions.
A sequence is created by CREATE SEQUENCE statement.
Types of Sequences
There are two type of sequences available:
NEXTVAL: It returns an incremented value for a sequence number.
PREVIOUS VALUE: It returns recently generated value.
Parameters of sequences
The following parameters are used for sequences:
Data type: This is the data type of the returned incremented value. (SMALLINT, BIGINT, INTEGER, NUMBER, DOUBLE)
START WITH: The reference value, with which the sequence starts.
MINVALUE: A minimum value for a sequence to start with.
MAXVALUE: A maximum value for a sequence.
INCREMENT BY: step value by which a sequence is incremented.
Sequence cycling: the CYCLE clause causes generation of the sequence repeatedly. The sequence generation is conducted by referring the returned value, which is stored into the database by previous sequence generation.
Creating a sequence
You can create sequence using the following syntax:
Syntax:
db2 create sequence <seq_name>
Example: [To create a new sequence with the name ‘sales1_seq’ and increasing values from 1]
db2 create sequence sales1_seq as int start
with 1 increment by 1
Viewing the sequences
You can view a sequence using the syntax given below:
Syntax:
db2 value <previous/next> value for <seq_name>
Example: [To see list of previous updated value in sequence ‘sales1_seq’]
db2 values previous value for sales1_seq
Output:
1
-----------
4
1 record(s) selected.
Dropping the sequence
To remove the sequence, you need to use the “DROP SEQUENCE
” command. Here is how you do it:
Syntax:
db2 drop sequence <seq_name>>
Example: [To drop sequence ‘sales1_seq’ from database]
db2 drop sequence sales1_seq
Output:
DB20000I The SQL command completed successfully.
DB2 Views
This chapter describes introduction of views, creating, modifying and dropping the views.
Introduction
A view is an alternative way of representing the data stored in the tables. It is not an actual table and it does not have any permanent storage. View provides a way of looking at the data in one or more tables. It is a named specification of a result table.
Creating a view
You can create a view using the following syntax:
Syntax:
db2 create view <view_name> (<col_name>,
<col_name1...) as select <cols>..
from <table_name>
Example: Creating view for shopper.sales1 table
db2 create view view_sales1(id, itemname, qty, price)
as select id, itemname, qty, price from
shopper.sales1
Modifying a view
You can modify a view using the following syntax:
Syntax:
db2 alter view <view_name> alter <col_name>
add scope <table_or_view_name>
Example: [To add new table column to existing view ‘view_sales1’]
db2 alter view view_sales1 alter id add
scope shopper.sales1
Dropping the view
You can drop a view using the following syntax:
Syntax:
db2 drop view <view_name>
Example:
db2 drop view sales1_view
DB2 with XML
This chapter describes use of XML with DB2.
Introduction
PureXML feature allows you to store well-formed XML documents in columns of database tables. Those columns have XML database. Data is kept in its native hierarchical form by storing XML data in XML column. The stored XML data can be accessed and managed by DB2 database server functionality. The storage of XML data in its native hierarchical form enables efficient search, retrieval, and update of XML. To update a value in XML data, you need to use XQuery, SQL or combination of both.
Creating a database and table for storing XML data
Create a database by issuing the following syntax:
Syntax:
db2 create database xmldb
By default, databases use UTF-8 (UNICODE) code set. Activate the database and connect to it:
Syntax:
db2 activate db <db_name>
db2 connect to <db_name>
Example:
db2 activate db xmldb
db2 connect to xmldb
Create a well-formed XML file and create a table with data type of the column as ‘XML’. It is mandatory to pass the SQL query containing XML syntax within double quotation marks.
Syntax:
db2 “create table <schema>.<table>(col <datatype>,
col <xml datatype>)”
Example:
db2 "create table shope.books(id bigint not null
primary key, book XML)"
Insert xml values into table, well-formed XML documents are inserted into XML type column using SQL statement ‘INSERT’.
Syntax:
db2 “insert into <table_name> values(value1, value2)”
Example:
db2 "insert into shope.books values(1000, '<catalog>
<book>
<author> Gambardella Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating application
with XML</description>
</book>
</catalog>')"
Updating XML data in a table
You can update XML data in a table by using the following syntax:
Syntax:
db2 “update <table_name> set <column>=<value> where
<column>=<value>”
Example:
db2 "update shope.books set book='<catalog>
<book>
<author> Gambardella, Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth XML</description>
</book>
</catalog>' where id=1000"
DB2 - Backup and Recovery
This chapter describes backup and restore methods of database.
Introduction
Backup and recovery methods are designed to keep our information safe. In Command Line Interface (CLI) or Graphical User Interface (GUI) using backup and recovery utilities you can take backup or restore the data of databases in DB2 UDB.
Logging
Log files consist of error logs, which are used to recover from application errors. The logs keep the record of changes in the database. There are two types of logging as described below:
Circular logging
It is a method where the old transaction logs are overwritten when there is a need to allocate a new transaction log file, thus erasing the sequences of log files and reusing them. You are permitted to take only full back-up in offline mode. i.e., the database must be offline to take the full backup.
Archive logging
This mode supports for Online Backup and database recovery using log files called roll forward recovery. The mode of backup can be changed from circular to archive by setting logretain or userexit to ON. For archive logging, backup setting database require a directory that is writable for DB2 process.
Backup
Using Backup command you can take copy of entire database. This backup copy includes database system files, data files, log files, control information and so on.
You can take backup while working offline as well as online.
Offline backup
Syntax: [To list the active applications/databases]
db2 list application
Output:
Auth Id Application Appl. Application Id
DB # of
Name Handle
Name Agents
-------- -------------- ---------- ---------------------
----------------------------------------- -------- -----
DB2INST1 db2bp 39
*LOCAL.db2inst1.140722043938
ONE 1
Syntax: [To force application using app. Handled id]
db2 "force application (39)"
Output:
DB20000I The FORCE APPLICATION command completed
successfully.
DB21024I This command is asynchronous and may not
be effective immediately.
Syntax: [To terminate Database Connection]
db2 terminate
Syntax: [To deactivate Database]
db2 deactivate database one
Syntax: [To take the backup file]
db2 backup database <db_name> to <location>
Example:
db2 backup database one to /home/db2inst1/
Output:
Backup successful. The timestamp for this backup image is :
20140722105345
Online backup
To start, you need to change the mode from Circular logging to Archive Logging.
Syntax: [To check if the database is using circular or archive logging]
db2 get db cfg for one | grep LOGARCH
Output:
First log archive method (LOGARCHMETH1) = OFF
Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF
Options for logarchmeth1 (LOGARCHOPT1) =
Second log archive method (LOGARCHMETH2) = OFF
Archive compression for logarchmeth2 (LOGARCHCOMPR2) = OFF
Options for logarchmeth2 (LOGARCHOPT2) =
In the above output, the highlighted values are [logarchmeth1 and logarchmeth2] in off mode, which implies that the current database in “CIRCULLAR LOGGING” mode. If you need to work with ‘ARCHIVE LOGGING’ mode, you need to change or add path in the variables logarchmeth1 and logarchmeth2 present in the configuration file.
Updating logarchmeth1 with required archive directory
Syntax: [To make directories]
mkdir backup
mkdir backup/ArchiveDest
Syntax: [To provide user permissions for folder]
chown db2inst1:db2iadm1 backup/ArchiveDest
Syntax: [To update configuration LOGARCHMETH1]
db2 update database configuration for one using LOGARCHMETH1
'DISK:/home/db2inst1/backup/ArchiveDest'
You can take offline backup for safety, activate the database and connect to it.
Syntax: [To take online backup]
db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs
Output:
db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs
Verify Backup file using following command:
Syntax:
db2ckbkp <location/backup file>
Example:
db2ckbkp
/home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001
Listing the history of backup files
Syntax:
db2 list history backup all for one
Output:
List History File for one
Number of matching file entries = 4
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722105345001 F D S0000000.LOG S0000000.LOG
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
------------------------------------------------------------
----------------
Comment: DB2 BACKUP ONE OFFLINE
Start Time: 20140722105345
End Time: 20140722105347
Status: A
------------------------------------------------------------
----------------
EID: 3 Location: /home/db2inst1
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722112239000 N S0000000.LOG S0000000.LOG
------------------------------------------------------------
-------------------------------------------------------------
-------------------------------
Comment: DB2 BACKUP ONE ONLINE
Start Time: 20140722112239
End Time: 20140722112240
Status: A
------------------------------------------------------------
----------------
EID: 4 Location:
SQLCA Information
sqlcaid : SQLCA sqlcabc: 136 sqlcode: -2413 sqlerrml: 0
sqlerrmc:
sqlerrp : sqlubIni
sqlerrd : (1) 0 (2) 0 (3) 0
(4) 0 (5) 0 (6) 0
sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11)
sqlstate:
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-- --- ------------------ ---- --- ------------ ------------
--------------
B D 20140722112743001 F D S0000000.LOG S0000000.LOG
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
-------------------------------------------------------------
----------------
Comment: DB2 BACKUP ONE OFFLINE
Start Time: 20140722112743
End Time: 20140722112743
Status: A
-------------------------------------------------------------
----------------
EID: 5 Location: /home/db2inst1
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
-------------------------------------------------------------
----------------
R D 20140722114519001 F
20140722112743
------------------------------------------------------------
----------------
Contains 4 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
00003 SYSTOOLSPACE
00004 TS1
------------------------------------------------------------
----------------
Comment: RESTORE ONE WITH RF
Start Time: 20140722114519
End Time: 20140722115015
Status: A
------------------------------------------------------------
----------------
EID: 6 Location:
Restoring the database from backup
To restore the database from backup file, you need to follow the given syntax:
Syntax:
db2 restore database <db_name> from <location>
taken at <timestamp>
Example:
db2 restore database one from /home/db2inst1/ taken at
20140722112743
Output:
SQL2523W Warning! Restoring to an existing database that is
different from
the database on the backup image, but have matching names.
The target database
will be overwritten by the backup version. The Roll-forward
recovery logs
associated with the target database will be deleted.
Do you want to continue ? (y/n) y
DB20000I The RESTORE DATABASE command completed successfully.
Roll forward all the logs located in the log directory, including latest changes just before the disk drive failure.
Syntax:
db2 rollforward db <db_name> to end of logs and stop
Example:
db2 rollforward db one to end of logs and stop
Output:
Rollforward Status
Input database alias = one
Number of members have returned status = 1
Member ID = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0000000.LOG -
S0000001.LOG
Last committed transaction = 2014-07-22-
06.00.33.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
DB2 - Database Security
This chapter describes database security.
Introduction
DB2 database and functions can be managed by two different modes of security controls:
- Authentication
- Authorization
Authentication
Authentication is the process of confirming that a user logs in only in accordance with the rights to perform the activities he is authorized to perform. User authentication can be performed at operating system level or database level itself. By using authentication tools for biometrics such as retina and figure prints are in use to keep the database from hackers or malicious users.
The database security can be managed from outside the db2 database system. Here are some type of security authentication process:
- Based on Operating System authentications.
- Lightweight Directory Access Protocol (LDAP)
For DB2, the security service is a part of operating system as a separate product. For Authentication, it requires two different credentials, those are userid or username, and password.
Authorization
You can access the DB2 Database and its functionality within the DB2 database system, which is managed by the DB2 Database manager. Authorization is a process managed by the DB2 Database manager. The manager obtains information about the current authenticated user, that indicates which database operation the user can perform or access.
Here are different ways of permissions available for authorization:
Primary permission: Grants the authorization ID directly.
Secondary permission: Grants to the groups and roles if the user is a member
Public permission: Grants to all users publicly.
Context-sensitive permission: Grants to the trusted context role.
Authorization can be given to users based on the categories below:
- System-level authorization
- System administrator [SYSADM]
- System Control [SYSCTRL]
- System maintenance [SYSMAINT]
- System monitor [SYSMON]
Authorities provide of control over instance-level functionality. Authority provide to group privileges, to control maintenance and authority operations. For instance, database and database objects.
- Database-level authorization
- Security Administrator [SECADM]
- Database Administrator [DBADM]
- Access Control [ACCESSCTRL]
- Data access [DATAACCESS]
- SQL administrator. [SQLADM]
- Workload management administrator [WLMADM]
- Explain [EXPLAIN]
Authorities provide controls within the database. Other authorities for database include with LDAD and CONNECT.
- Object-Level Authorization: Object-Level authorization involves verifying privileges when an operation is performed on an object.
- Content-based Authorization: User can have read and write access to individual rows and columns on a particular table using Label-based access Control [LBAC].
DB2 tables and configuration files are used to record the permissions associated with authorization names. When a user tries to access the data, the recorded permissions verify the following permissions:
- Authorization name of the user
- Which group belongs to the user
- Which roles are granted directly to the user or indirectly to a group
- Permissions acquired through a trusted context.
While working with the SQL statements, the DB2 authorization model considers the combination of the following permissions:
- Permissions granted to the primary authorization ID associated with the SQL statements.
- Secondary authorization IDs associated with the SQL statements.
- Granted to PUBLIC
- Granted to the trusted context role.
Instance level authorities
Let us discuss some instance related authorities.
System administration authority (SYSADM)
It is highest level administrative authority at the instance-level. Users with SYSADM authority can execute some databases and database manager commands within the instance. Users with SYSADM authority can perform the following operations:
- Upgrade a Database
- Restore a Database
- Update Database manager configuration file.
System control authority (SYSCTRL)
It is the highest level in System control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations can affect system resources, but they do not allow direct access to data in the database.
Users with SYSCTRL authority can perform the following actions:
- Updating the database, Node, or Distributed Connect Service (DCS) directory
- Forcing users off the system-level
- Creating or Dropping a database-level
- Creating, altering, or dropping a table space
- Using any table space
- Restoring Database
System maintenance authority (SYSMAINT)
It is a second level of system control authority. It provides to perform maintenance and utility operations against the database manager instance and its databases. These operations affect the system resources without allowing direct access to data in the database. This authority is designed for users to maintain databases within a database manager instance that contains sensitive data.
Only Users with SYSMAINT or higher level system authorities can perform the following tasks:
- Taking backup
- Restoring the backup
- Roll forward recovery
- Starting or stopping instance
- Restoring tablespaces
- Executing db2trc command
- Taking system monitor snapshots in case of an Instance level user or a database level user.
A user with SYSMAINT can perform the following tasks:
- Query the state of a tablespace
- Updating log history files
- Reorganizing of tables
- Using RUNSTATS (Collection catalog statistics)
System monitor authority (SYSMON)
With this authority, the user can monitor or take snapshots of database manager instance or its database. SYSMON authority enables the user to run the following tasks:
- GET DATABASE MANAGER MONITOR SWITCHES
- GET MONITOR SWITCHES
- GET SNAPSHOT
- LIST
- LIST ACTIVE DATABASES
- LIST APPLICATIONS
- LIST DATABASE PARTITION GROUPS
- LIST DCS APPLICATIONS
- LIST PACKAGES
- LIST TABLES
- LIST TABLESPACE CONTAINERS
- LIST TABLESPACES
- LIST UTITLITIES
- RESET MONITOR
- UPDATE MONITOR SWITCHES
Database authorities
Each database authority holds the authorization ID to perform some action on the database. These database authorities are different from privileges. Here is the list of some database authorities:
ACCESSCTRL: allows to grant and revoke all object privileges and database authorities.
BINDADD: Allows to create a new package in the database.
CONNECT: Allows to connect to the database.
CREATETAB: Allows to create new tables in the database.
CREATE_EXTERNAL_ROUTINE: Allows to create a procedure to be used by applications and the users of the databases.
DATAACCESS: Allows to access data stored in the database tables.
DBADM: Act as a database administrator. It gives all other database authorities except ACCESSCTRL, DATAACCESS, and SECADM.
EXPLAIN: Allows to explain query plans without requiring them to hold the privileges to access the data in the tables.
IMPLICIT_SCHEMA: Allows a user to create a schema implicitly by creating an object using a CREATE statement.
LOAD: Allows to load data into table.
QUIESCE_CONNECT: Allows to access the database while it is quiesce (temporarily disabled).
SECADM: Allows to act as a security administrator for the database.
SQLADM: Allows to monitor and tune SQL statements.
WLMADM: Allows to act as a workload administrator
Privileges
SETSESSIONUSER
Authorization ID privileges involve actions on authorization IDs. There is only one privilege, called the SETSESSIONUSER privilege. It can be granted to user or a group and it allows to session user to switch identities to any of the authorization IDs on which the privileges are granted. This privilege is granted by user SECADM authority.
Schema privileges
This privileges involve actions on schema in the database. The owner of the schema has all the permissions to manipulate the schema objects like tables, views, indexes, packages, data types, functions, triggers, procedures and aliases. A user, a group, a role, or PUBLIC can be granted any user of the following privileges:
- CREATEIN: allows to create objects within the schema
- ALTERIN: allows to modify objects within the schema.
DROPIN
This allows to delete the objects within the schema.
Tablespace privileges
These privileges involve actions on the tablespaces in the database. User can be granted the USE privilege for the tablespaces. The privileges then allow them to create tables within tablespaces. The privilege owner can grant the USE privilege with the command WITH GRANT OPTION on the tablespace when tablespace is created. And SECADM or ACCESSCTRL authorities have the permissions to USE privileges on the tablespace.
Table and view privileges
The user must have CONNECT authority on the database to be able to use table and view privileges. The privileges for tables and views are as given below:
CONTROL
It provides all the privileges for a table or a view including drop and grant, revoke individual table privileges to the user.
ALTER
It allows user to modify a table.
DELETE
It allows the user to delete rows from the table or view.
INDEX
It allows the user to insert a row into table or view. It can also run import utility.
REFERENCES
It allows the users to create and drop a foreign key.
SELECT
It allows the user to retrieve rows from a table or view.
UPDATE
It allows the user to change entries in a table, view.
Package privileges
User must have CONNECT authority to the database. Package is a database object that contains the information of database manager to access data in the most efficient way for a particular application.
CONTROL
It provides the user with privileges of rebinding, dropping or executing packages. A user with this privileges is granted to BIND and EXECUTE privileges.
BIND
It allows the user to bind or rebind that package.
EXECUTE
Allows to execute a package.
Index privileges
This privilege automatically receives CONTROL privilege on the index.
Sequence privileges
Sequence automatically receives the USAGE and ALTER privileges on the sequence.
Routine privileges
It involves the action of routines such as functions, procedures, and methods within a database.
DB2 - Roles
Introduction
A role is a database object that groups multiple privileges that can be assigned to users, groups, PUBLIC or other roles by using GRANT statement.
Restrictions on roles
- A role cannot own database objects.
- Permissions and roles granted to groups are not considered when you create the following database objects.
- Package Containing static SQL
- Views
- Materialized Query Tables (MQT)
- Triggers
- SQL Routines
Creating and granting membership in roles
Syntax: [To create a new role]
db2 create role <role_name>
Example: [To create a new role named ‘sales’ to add some table to be managed by some user or group]
db2 create role sales
Output:
DB20000I The SQL command completed successfully.
Granting role from DBADM to a particular table
Syntax: [To grant permission of a role to a table]
db2 grant select on table <table_name> to role <role_name>
Example: [To add permission to manage a table ‘shope.books’ to role ‘sales’]
db2 grant select on table shope.books to role sales
Output:
DB20000I The SQL command completed successfully.
Security administrator grants role to the required users. (Before you use this command, you need to create the users.)
Syntax: [To add users to a role]
db2 grant role <role_name> to user <username>
Example: [To add a user ‘mastanvali’ to a role ‘sales’]
db2 grant sales to user mastanvali
Output:
DB20000I The SQL command completed successfully.
Role hierarchies
For creating a hierarchies for roles, each role is granted permissions/ membership with another role.
Syntax: [before this syntax create a new role with name of “production”]
db2 grant role <roll_name> to role <role_name>
Example: [To provide permission of a role ‘sales’ to another role ‘production’]
db2 grant sales to role production
DB2 - LDAP
Introduction
LDAP is Lightweight Directory Access Protocol. LDAP is a global directory service, industry-standard protocol, which is based on client-server model and runs on a layer above the TCP/IP stack. The LDAP provides a facility to connect to, access, modify, and search the internet directory.
The LDAP servers contain information which is organized in the form of a directory tree. The clients ask server to provide information or to perform some operation on a particular information. The server answers the client by providing required information if it has one, or it refers the client to another server for action on required information. The client then acquires the desired information from another server.
The tree structure of directory is maintained same across all the participating servers. This is a prominent feature of LDAP directory service. Hence, irrespective of which server is referred to by the client, the client always gets required information in an error-free manner. Here, we use LDAP to authenticate IBM DB2 as a replacement of operating system authentication.
There are two types of LDAP:
- Transparent
- Plug-in
Let us see how to configure a transparent LDAP.
Configuring transparent LDAP
To start with configuration of transparent LDAP, you need to configure the LDAP server.
LDAP server configuration
Create a SLAPD.conf file, which contains all the information about users and group object in the LDAP. When you install LDAP server, by default it is configured with basic LDAP directory tree on your machine.
The table shown below indicates the file configuration after modification.
The text highlighted with yellow the code box means for the following:
DBA user-id = “db2my1”, group = “db1my1adm”, password= “db2my1” Admin user-id = “my1adm”, group = “dbmy1ctl”.
# base dn: example.com
dn: dc=example,dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
# pc box db
dn: dc=db697,dc=example,dc=com
dc: db697
o: db697
objectClass: organization
objectClass: dcObject
#
# Group: db
adm
#
dn: cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: dbmy1adm
objectClass: top
objectClass: posixGroup
gidNumber: 400
objectClass: groupOfNames
member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: db2my1
#
# User: db2
# dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com cn: db2my1 sn: db2my1 uid: db2my1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 400 gidNumber: 400 loginShell: /bin/csh homeDirectory: /db2/db2my1 # # Group: db
ctl # dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: dbmy1ctl objectClass: top objectClass: posixGroup gidNumber: 404 objectClass: groupOfNames member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: my1adm # # User:
adm # dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: my1adm sn: my1adm uid: my1adm objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 404 gidNumber: 404 loginShell: /bin/csh homeDirectory: /home/my1adm
Save the above file with name ‘/var/lib/slapd.conf’, then execute this file by following command to add these values into LDAP Server. This is a linux command; not a db2 command.
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f
/var/lib/slapd.conf
After registering the DB2 users and the DB2 group at the LDAP Server, logon to the particular user where you have installed instance and database. You need to configure LDAP client to confirm to client where your server is located, be it remote or local.
LDAP client configuration
The LDAP Client configuration is saved in the file ‘ldap.conf’. There are two files available for configuration parameters, one is common and the other is specific. You should find the first one at ‘/etc/ldap.conf’ and the latter is located at ‘/etc/openldap/ldap.conf’.
The following data is available in common LDAP client configuration file
# File: /etc/ldap.conf
# The file contains lots of more entries and many of them
# are comments. You show only the interesting values for now
host localhost
base dc=example,dc=com
ldap_version 3
pam_password crypt
pam_filter objectclass=posixAccount
nss_map_attribute uniqueMember member
nss_base_passwd dc=example,dc=com
nss_base_shadow dc=example,dc=com
nss_base_group dc=example,dc=com
You need to change the location of server and domain information according to the DB2 configuration. If we are using server in same system then mention it as ‘localhost’ at ‘host’ and at ‘base’ you can configure which is mentioned in ‘SLAPD.conf’ file for LDAP server.
Pluggable Authentication Model (PAM) is an API for authentication services. This is common interface for LDAP authentication with an encrypted password and special LDAP object of type posixAccount. All LDAP objects of this type represent an abstraction of an account with portable Operating System Interface (POSIX) attributes.
Network Security Services (NSS) is a set of libraries to support cross-platform development of security-enabled client and server applications. This includes libraries like SSL, TLS, PKCS S/MIME and other security standards.
You need to specify the base DN for this interface and two additional mapping attributes. OpenLDAP client configuration file contains the entries given below:
host localhost
base dc=example,dc=com
Till this you just define the host of LDAP serve and the base DN.
Validating OpenLDAP environment
After you configured your LDAP Server and LDAP Client, verify both for communication.
Step1: Check your Local LDAP server is running. Using below command:
ps -ef | grep -i ldap
This command should list the LDAP deamon which represents your LDAP server:
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
This indicates that you LDAP server is running and is waiting for request from clients. If there is no such process for previous commands you can start LDAP server with the ’rcldap’ command.
rcldap start
When the server starts, you can monitor this in the file ‘/var/log/messages/ by issuing the following command.
tail –f /var/log/messages
Testing connection to LDAP server with ldapsearch
The ldapsearch command opens a connection to an LDAP server, binds to it and performs a search query which can be specified by using special parameters ‘-x’ connect to your LDAP server with a simple authentication mechanism by using the –x parameter instead of a more complex mechanism like Simple Authentication and Security Layer (SASL)
ldapsearch –x
LDAP server should reply with a response given below, containing all of your LDAP entries in a LDAP Data Interchange Format(LDIF).
# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# example.com
dn: dc=example,
dc=com dc: example
o: example
objectClass: organization
objectClass: dcObject
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Configuring DB2
After working with LDAP server and client, you need to configure our DB2 database for use with LDAP. Let us discuss, how you can install and configure your database to use our LDAP environment for the DB2 user authentication process.
Configuring DB2 and LDAP interaction plug-ins
IBM provides a free package with LDAP plug-ins for DB2. The DB2 package includes three DB2 security plug-ins for each of the following:
- server side authentication
- client side authentication
- group lookup
Depending upon your requirements, you can use any of the three plug-ins or all of them. This plugin do not support environments where some users are defined in LDAP and others in the operating Systems. If you decide to use the LDAP plug-ins, you need to define all users associated with the database in the LDAP server. The same principle applies to the group plug-in.
You have to decide which plug-ins are mandatory for our system. The client authentication plug-ins used in scenarios where the user ID and the password validation supplied on a CONNECT or ATTACH statement occurs on the client system. So the database manager configuration parameters SRVCON_AUTH or AUTHENTICATION need to be set to the value CLIENT. The client authentication is difficult to secure and is not generally recommended. Server plug-in is generally recommended because it performs a server side validation of user IDs and passwords, if the client executes a CONNECT or ATTACH statement and this is secure way. The server plug-in also provides a way to map LDAP user IDs DB2 authorization IDs.
Now you can start installation and configuration of the DB2 security plug-ins, you need to think about the required directory information tree for DB2. DB2 uses indirect authorization which means that a user belongs to a group and this group was granted with fewer authorities. You need to define all DB2 users and DB2 groups in LDAP directory.
Image
The LDIF file openldap.ldif should contain the code below:
#
# LDAP root object
# example.com
#
dn: dc=example,
dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
#
# db2 groups
#
dn: cn=dasadm1,dc=example,dc=com
cn: dasadm1
objectClass: top
objectClass: posixGroup
gidNumber: 300
objectClass: groupOfNames
member: uid=dasusr1,cn=dasadm1,dc=example,dc=com
memberUid: dasusr1
dn: cn=db2grp1,dc=example,dc=com
cn: db2grp1
objectClass: top
objectClass: posixGroup
gidNumber: 301
objectClass: groupOfNames
member: uid=db2inst2,cn=db2grp1,dc=example,dc=com memberUid: db2inst2
dn: cn=db2fgrp1,dc=example,dc=com
cn: db2fgrp1
objectClass: top
objectClass: posixGroup
gidNumber: 302
objectClass: groupOfNames
member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
memberUid: db2fenc1
#
# db2 users
#
dn: uid=dasusr1,
cn=dasadm1,
dc=example,dc=com
cn: dasusr1
sn: dasusr1
uid: dasusr1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 300
gidNumber: 300
loginShell: /bin/bash
homeDirectory: /home/dasusr1
dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com
cn: db2inst2
sn: db2inst2
uid: db2inst2
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 301
gidNumber: 301
loginShell: /bin/bash
homeDirectory: /home/db2inst2
dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
cn: db2fenc1
sn: db2fenc1
uid: db2fenc1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 303
gidNumber: 303
loginShell: /bin/bash
homeDirectory: /home/db2fenc1
Create a file named ‘db2.ldif’ and paste the above example into it. Using this file, add the defined structures to your LDAP directory.
To add the DB2 users and DB2 groups to the LDAP directory, you need to bind the user as ‘rootdn’ to the LDAP server in order to get the exact privileges.
Execute the following syntaxes to fill the LDAP information directory with all our objects defined in the LDIF file ‘db2.ldif’
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
Perform the search result with more parameter
ldapsearch –x |more
Preparing file system for DB2 usage
Creating instance for our LDAP user db2inst2. This user requires home directory with two empty files inside the home directory. Before you create a new instance, you need to create a user who will be the owner of the instance.
After creating the instance user, you should have to create the file ‘.profile’ and ‘.login’ in user home directory, which will be modified by DB2. To create this file in the directory, execute the following command:
mkdir /home/db2inst2
mkdir /home/db2inst2/.login
mkdir /home/db2inst2/.profile
You have registered all users and groups related with DB2 in LDAP directory, now you can create an instance with the name ‘db2inst2’ with the instance owner id ‘db2inst2’ and use the fenced user id ‘db2fenc1’, which is needed for running user defined functions (UDFs)or stored procedures.
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.
Now check the instance home directory. You can see new sub-directory called ‘sqllib’ and the .profile and .login files customized for DB2 usage.
Configuring authentication public-ins for LDAP support in DB2
Copy the required LDAP plug-ins to the appropriate DB2 directory:
cp /
/
/v10/IBMLDAPauthserver.so /home/db2inst2/sqllib/security
/plugin/server/. cp /
/
/v10/IBMLDAPgroups.so /home/db2inst2/sqllib/security
/plugin/group/.
Once the plug-ins are copied to the specified directory, you toned to login to DB2 instance owner and change the database manager configuration to use these plug-ins.
Su – db2inst2
db2inst2> db2 update dbm cfg using svrcon_pw_plugin
IBMLDAPauthserver
db2inst2> db2 update dbm cfg using group_plugin
IBMLDAPgroups
db2inst2> db2 update dbm cfg using authentication
SERVER_ENCRYPT
db2inst2> db2stop
db2inst2> db2start
This modification comes into effect after you start DB2 instance. After restarting the instance, you need to install and configure the main DB2 LDAP configuration file named “IBMLDAPSecurity.ini” to make DB2 plug-ins work with the current LDAP configuration.
IBMLDAPSecurity.ini file contains
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
; Name of your LDAP server(s).
; This is a space separated list of LDAP server addresses,
; with an optional port number for each one:
; host1[:port] [host2:[port2] ... ]
; The default port number is 389, or 636 if SSL is enabled.
LDAP_HOST = my.ldap.server
;-----------------------------------------------------------
; USER RELATED VALUES
;-----------------------------------------------------------
rs
; LDAP object class used for use USER_OBJECTCLASS = posixAccount
; LDAP user attribute that represents the "userid"
; This attribute is combined with the USER_OBJECTCLASS and
; USER_BASEDN (if specified) to construct an LDAP search
; filter when a user issues a DB2 CONNECT statement with an
; unqualified userid. For example, using the default values
; in this configuration file, (db2 connect to MYDB user bob
; using bobpass) results in the following search filter:
OrgPerson)(uid=bob)
; &(objectClass=inet USERID_ATTRIBUTE = uid
representing the DB2 authorization ID
; LDAP user attribute, AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
ps
; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames
at represents the name of the group
; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn
; Determines the method used to find the group memberships
; for a user. Possible values are:
; SEARCH_BY_DN - Search for groups that list the user as
; a member. Membership is indicated by the
; group attribute defined as
; GROUP_LOOKUP_ATTRIBUTE.
; USER_ATTRIBUTE - A user's groups are listed as attributes
; of the user object itself. Search for the
; user attribute defined as
TRIBUTE to get the groups.
; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN
; GROUP_LOOKUP_ATTRIBUTE
; Name of the attribute used to determine group membership,
; as described above.
llGroups
; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member
Now locate the file IBMLDAPSecurity.ini file in the current instance directory. Copy the above sample contents into the same.
Cp
/
/db2_ldap_pkg/IBMLDAPSecurity.ini
/home/db2inst2/sqllib/cfg/
Now you need to restart your DB2 instance, using two syntaxes given below:
db2inst2> db2stop
Db2inst2> db2start
At this point, if you try ‘db2start’ command, you will get security error message. Because, DB2 security configuration is not yet correctly configured for your LDAP environment.
Customizing both configurations
Keep LDAP_HOST name handy, which is configured in slapd.conf file.
Now edit IMBLDAPSecurity.ini file and type the LDAP_HOST name. The LDAP_HOST name in both the said files must be identical.
The contents of file are as shown below:
;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
LDAP_HOST = localhost
;-----------------------------------------------------------
; USER RELATED VALUES
----------------------------
;-------------------------------
USER_OBJECTCLASS = posixAccount
USER_BASEDN = dc=example,dc=com
USERID_ATTRIBUTE = uid
AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
GROUP_OBJECTCLASS = groupOfNames
GROUP_BASEDN = dc=example,dc=com
GROUPNAME_ATTRIBUTE = cn
GROUP_LOOKUP_METHOD = SEARCH_BY_DN
GROUP_LOOKUP_ATTRIBUTE = member
After changing these values, LDAP immediately takes effect and your DB2 environment with LDAP works perfectly.
You can logout and login again to ‘db2inst2’ user.
Now your instance is working with LDAP directory.
Next Page