GIẢI PHÁP XÂY DỰNG HỆ THỐNG CƠ SỞ DỮ LIỆU
Cùng với sự phát triển mạnh mẽ của CNTT, hệ thống Cơ sở Dữ liệu (CSDL) ngày càng trở thành tài sản quan trọng đối với mọi doanh nghiệp. CSDL ngày nay được xem là thành phần cơ bản nhất trong mọi hệ thống ứng dụng, từ các ứng dụng lõi phục vụ sản xuất, kinh doanh cho đến các ứng dụng trao đổi thông tin, hỗ trợ người dùng, marketing, dịch vụ khách hàng…. Do vậy, yêu cầu trang bị hệ thống CSDL phù hợp, đáp ứng được các yêu cầu phát triển đang là một thách thức lớn đối với các doanh nghiệp hiện nay. Hệ thống CSDL phải luôn sẵn sàng, có khả năng hoạt động với hiệu năng cao và đảm bảo tính toàn vẹn ngay cả khi có sự cố xảy ra. Ngoài ra hệ thống CSDL còn phải được bảo đảm an toàn trước các nguy cơ tấn công từ bên ngoài và bên trong, có khả năng hiệu chỉnh, nâng cấp, mở rộng linh hoạt…
Bộ giải pháp bao gồm:
Giải Pháp sẵn sàng cao Oracle Real Application Cluster:
Giải pháp Oracle Real Application Clusters (RAC) là giải pháp xây dựng một hệ thống database gồm nhiều máy chủ xử lý trên cùng một vùng lưu trữ và cung cấp dịch vụ database như một database đơn, hoàn toàn trong suốt cho các ứng dụng. RAC tăng cường khả năng chịu lỗi cho hệ thống trong các trường hợp lỗi về phần cứng hay tạm ngừng một máy chủ. RAC cung cấp tính sẵn sàng cao, khả năng mở rộng và tối ưu chi phí.
Các đặc điểm của giải pháp Oracle Real Application:
Lợi ích:
Oracle RAC là giải pháp mang lại nhiều lợi ích cho khách hàng khi sử dụng: tận dụng tài nguyên, tiết kiệm chi phí và quan trọng nhất là đảm bảo an toàn, sẵn sàng dữ liệu trước những sự cố, thảm họa ngoài ý muốn.
Giải pháp sẵn sàng cao Oracle Data Guard:
Giải pháp Oracle Data Guard là giải pháp xây dựng hệ thống CSDL (Database) bao gồm một Database chính và một hay nhiều Database dự phòng. Database chính, còn gọi là Primary Database có chức năng liên tục gửi những cập nhật dưới dạng dữ liệu redo đến các Database dự phòng, tức Standby Database. Việc này sẽ đảm bảo dữ liệu luôn trong tình trạng đồng bộ giữa các Database với nhau. Trong trường hợp Primary Database bị hỏng do lỗi phần cứng, lỗi dữ liệu hoặc gặp sự cố thì Standby Database sẽ đảm nhiệm vai trò của Primary Database và khi đó các ứng dụng sẽ được chuyển kết nối đến Standby Database. Lúc này Standby Database hoạt động không khác gì Primary Database cho đến khi Primary Database được phục hồi.
Lợi Ích:
Giải pháp Oracle Data Guard đảm bảo tính an toàn dữ liệu, khả năng sẵn sàng, dễ dàng cấu hình và quản trị, đồng thời tiết kiệm chi phí.
Giải pháp đồng bộ dữ liệu Oracle GoldenGate:
Oracle GoldenGate là giải pháp phần mềm hiệu năng cao cho phép đồng bộ và tích hợp dữ liệu theo thời gian thực, đảm bảo tính sẵn sàng cao đối với các ứng dụng quan trọng. Oracle GoldenGate cung cấp khả năng đồng bộ và phân phối dữ liệu của các phiên giao dịch giữa các hệ thống thực thi (production) và phân tích (analysis) một cách ổn định, nhanh chóng và chính xác. Ngoài ra, Oracle GoldenGate có khả năng thu thập, lọc, vận chuyển, kiểm tra, chuyển đổi và phân phối dữ liệu trong môi trường cơ sở dữ liệu Oracle và các cơ sở dữ liệu khác một cách toàn vẹn với hiệu suất cao.
Lợi ích:
Giải pháp quản lý Oracle Enterprise Manager:
OEM (Oracle Enterprise Management) Grid Control là ứng dụng với giao diện web của Oracle, có khả năng quản lý tập trung các hệ thống CNTT của các tổ chức, doanh nghiệp. OEM Grid Control hỗ trợ người quản trị giám sát hầu hết các thành phần ở các tầng kiến trúc của hệ thống CNTT, bao gồm cả những thành phần thuộc Oracle và không thuộc Oracle như máy chủ, thiết bị lưu trữ, cơ sở dữ liệu, Middleware, Application server, các ứng dụng nghiệp vụ, các thiết bị mạng, máy ảo, các phần mềm hoặc phần cứng của các hãng thứ 3. Oracle Enterprise Manager Grid Control cho phép quản lý các thành phần tài nguyên trong hệ thống CNTT như:
Giới thiệu Oracle Data Guard
Oracle Data Guard đảm bảo tính sẵn sàng cao, bảo vệ dữ liệu, và khôi phục sau sự cố. Data Guard cung cấp tất cả các dịch vụ khởi tạo, duy trì, quản lý và giám sát một hay nhiều standby database để Oracle database tiếp tục tồn tại sau sự cố, hư hỏng dữ liệu. Data Guard duy trì các standby database như là các bản sao của primary database. Nếu primary database không sẵn sàng hoạt động, Data Guard có thể chuyển bất kỳ standby database thành primary database, giảm thiểu thời gian ngưng hoạt động. Data Guard có thể sử dụng với sao lưu, khôi phục, và kỹ thuật cluster để tạo ra mức độ cao về bảo vệ dữ liệu và sẵn sàng dữ liệu.
Với Data Guard, có thể cải thiện hiệu năng của primary database bằng cách sao lưu và chạy các báo cáo trên hệ thống standby.
Cấu hình Data Guard
Một cấu hình Data Guard bao gồm một primary database và một hay nhiều standby database. Các database trong một cấu hình Data Guard được kết nối bởi Oracle Net và có thể phân tán về mặt địa lý. Không có giới hạn về vị trí đặt database, chỉ đảm bảo các database phải liên lạc được với nhau. Ví dụ, có thể đặt một standby database trên cùng hệ thống với primary database, cùng với hai standby database trên một hệ thống khác tại một vị trí khác.
Có thể quản lý primary và các standby database bằng cách sử dụng giao diện dòng lệnh SQL hoặc giao diện Data Guard broker, bao gồm một giao diện dòng lệnh và một giao diện đồ họa người dùng được tích hợp trong Oracle Enterprise Manager.
Primary Database
Một cấu hình Data Guard bao gồm một primary database, có chức năng là vai trò chính. Đây là database mà hầu hết ứng dụng truy cập.
Primary database có thể là một single-instance Oracle database hay một Oracle Real Application Clusters (RAC) database.
Standby Databases
Một standby database là một bản copy của primary database. Sử dụng một bản copy backup của primary database, có thể tạo ra standby database và kết hợp standby database này vào trong một cấu hình Data Guard. Khi được tạo ra, Data Guard tự động duy trì mỗi standby database bằng cách truyền redo data từ primary database và apply redo data đến standby database.
Tương tự primary database, một standby database có thể là một single-instance Oracle database hay một Oracle RAC database.
Standby database có các loại sau:
Physical standby database
Cung cấp một bản copy vật lý đồng nhất của primary database, với cấu trúc database giống y primary database. Database schema, bao gồm cả index, là giống nhau. Một physical standby database duy trì đồng bộ với primary database thông qua Redo Apply: thực hiện recover redo data nhận từ primary database và apply redo đến physical standby database.
Với Oracle Database 11g release 1 (11.1), một physical standby database có thể nhận và apply redo trong khi open cho truy cập read-only. Vì thế một physical standby database có thể sử dụng đồng thời để bảo vệ dữ liệu và chạy báo cáo.
Logical standby database
Bao gồm thông tin logic giống như primary database, mặc dù cấu trúc và tổ chức vật lý của dữ liệu có thể khác. Logical standby database duy trì đồng bộ với primary database thông qua SQL Apply: chuyển đổi data trong redo nhận từ primary database thành các lệnh SQL và thực hiện các lệnh SQL này trên standby database.
Một logical standby database có thể sử dụng cho các mục đích nghiệp vụ khác, ngoài các yêu cầu khôi phục từ sự cố. Điều này cho phép người dùng truy cập đến logical standby database để truy vấn, chạy báo cáo bất kỳ lúc nào. Ngoài ra, dùng một logical standby database có thể upgrade Oracle Database software và các bản sửa lỗi mà gần như không phải ngừng hoạt động. Vì vậy, một logical standby database có thể sử dụng đồng thời để bảo vệ dữ liệu, chạy báo cáo, và upgrade database.
Snapshot Standby Database
Một snapshot standby database là một standby database có thể update đầy đủ.
Giống như một physical hay logical standby database, một snapshot standby database nhận và lưu trữ redo data từ một primary database. Không giống một physical hay logical standby database, một snapshot standby database không apply redo data nhận được. Redo data đã nhận bởi một snapshot standby database không apply cho tới khi snapshot standby chuyển đổi trở lại thành một physical standby database, sau khi loại bỏ các local update đã thực hiện với snapshot standby database.
Một snapshot standby database được sử dụng tốt nhất trong trường hợp yêu cầu một cái tạm thời, updatable snapshot của một physical standby database. Bởi vì redo data đã nhận bởi snapshot standby database không apply cho tới khi snapshot standby chuyển đổi trở lại thành một physical standby, nên thời gian cần thiết để recover một primary database bị sự cố thì tỷ lệ hoàn toàn với số lượng redo data cần thiết phải apply.
Các service của Data Guard
Redo Transport Services
Redo transport services điều khiển việc tự động truyền redo data từ primary database đến một hay nhiều đích lưu trữ.
Redo transport services thực hiện các công việc:
• Truyền redo data từ primary system đến standby systems theo cấu hình
• Quản lý tiến trình giải quyết sự ngắt quãng các archived redo log file vì sự cố về mạng.
• Tự động phát hiện các archived redo log file bị thiếu hay hư hỏng trên hệ thống standby, và tự động lấy lại các archived redo log file thay thế từ primary database hoặc từ standby database khác.
Apply Services
Redo data truyền từ primary database được ghi vào standby redo log trên standby database. Apply services tự động apply redo data trên standby database để duy trì sự đồng nhất với primary database. Apply services cũng cho phép truy cập dữ liệu read-only.
Sự khác nhau giữa physical và logical standby databases là cách mà apply services apply archived redo data:
• Với physical standby databases, Data Guard dùng công nghệ Redo Apply: apply redo data trên standby database sử dụng kỹ thuật standard recovery của một Oracle database.
• Với logical standby databases, Data Guard sử dụng công nghệ SQL Apply: chuyển đổi redo data đã nhận thành các lệnh SQL và thực hiện các lệnh SQL trên logical standby database.
Sự chuyển đổi vai trò
Một Oracle database hoạt động theo một trong hai vai trò: primary hoặc standby. Sử dụng Data Guard, có thể thay đổi vai trò của một database bằng hoạt động switchover hoặc failover.
Switchover là đảo ngược vai trò giữa primary database và một trong các standby database của nó. Switchover đảm bảo không mất dữ liệu. Hoạt động này thường được thực hiện cho việc bảo dưỡng theo kế hoạch của primary system. Trong qúa trình switchover, primary database chuyển vai trò thành standby, và standby database chuyển vai trò thành primary.
Failover khi primary database không sẵn sàng hoạt động. Failover chỉ thực hiện trong trường hợp primary database failure, và kết quả của failover là sự chuyển đổi một standby database thành vai trò primary. Quản trị database có thể cấu hình Data Guard để đảm bảo không mất dữ liệu.
Data Guard Broker
Data Guard broker là một framework quản lý phân tán, tự động hóa việc tạo ra, duy trì, và theo dõi cấu hình Data Guard. Có thể sử dụng Oracle Enterprise Manager GUI hay giao diện dòng lệnh Data Guard (DGMGRL) để:
• Tạo cấu hình Data Guard, bao gồm cả thiết lập redo transport services và apply services
• Quản lý toàn bộ cấu hình Data Guard từ bất kỳ hệ thống nào trong cấu hình
• Quản lý và theo dõi cấu hình Data Guard, bao gồm cả Oracle RAC primary hoặc standby databases
• Đơn giản hóa hoạt động switchovers và failovers chỉ bằng một click key trong Oracle Enterprise Manager hay một lệnh trong DGMGRL.
• Cho phép fast-start failover đối với hư hỏng một cách tự động khi primary database trở nên không sẵn sàng hoạt động. Khi fast-start failover là enabled, Data Guard broker xác định nếu một hư hỏng là tất yếu thì bắt đầu failover đối với target standby database đã chỉ rõ một cách tự động, không cần đến sự can thiệp của DBA.
Các đặc điểm của Data Guard
• Phần cứng ở server chính và server dự phòng có thể khác nhau.
• Hệ điều hành cài đặt ở các server phải như nhau
• Các phiên bản Release của hệ điều hành cài trên các server có thể khác nhau
• Các server phải cài đặt cùng bản Release của Oracle Database Enterprise Edition
• Database phải hoạt động ở Archive log mode
• Khôi phục, bảo vệ dữ liệu, và tính sẵn sàng cao.
• Sử dụng hiệu quả tài nguyên hệ thống
• Tinh hoạt trong bảo vệ dữ liệu, cân bằng tính sẵn sàng với các yêu cầu về hiệu năng
• Quản lý tập trung và đơn giản
• Tích hợp với Oracle Database
• Tự động chuyển đổi vai trò
Oracle block
Bất kỳ hệ điều hành nào cũng xác định riêng cho mình 1 block, gọi là OS block. OS block size là đơn vị nhỏ nhất cho việc read/write, và nó cũng là thuộc tính của file system. Khi tạo ra 1 Oracle Database, chúng ta sẽ xác định 1 Oracle block, size của Oracle block là 1 bội số của OS block size. Trước 9i, 1 khi đã xác định size của Oracle block, thì không thể thay đổi size này, và nó cũng tồn tại theo chu kỳ sống của Oracle Database. Để xác định 1 block size tương thích cho Database, ta phải xác định, nghiên cứu rất nhiều yếu tố trước khi đưa ra quyết định.
Hình 1.1
Header: Chứa các thông tin về data, ví dụ như block address, loại segment (table, index…), đồng thời nó cũng chứa thông tin về table, row thực sự (address) chứa data
Freespace: Không gian cấp phát cho việc insert/update trong tương lai, ảnh hưởng bởi giá trị của 2 tham số là PCTUSED và PCTFREE
Data: Row chứa dữ liệu
FreeList, PCTUSED, PCTFREE parameters:
Khi create/alter bất kỳ table/index nào, Oracle sẽ sử dụng 2 tham số đề điều khiển không gian
– PCTFREE: Số % dành riêng cho việc update các dữ liệu đã có trong tương lai
– PCTUSED: Số % của không gian nhỏ nhất đã được sử dụng cho việc insert data mới, giá trị này xác định khi nào thì các blocks sẽ được đưa trở lại vào trong FREELIST
– FREELIST: Cờu trúc xác định mà Oracle sử dụng để maitains 1 danh sách các block free hiện có.
Đầu tiên, Oracle sẽ tìm kiếm 1 free block trong FREELIST, sau đó, data sẽ được insert vào block đó, tính khả dụng của block trong FREELIST sẽ được xác định bởi giá trị của tham số PCTFREE, 1 block trống ban đầu sẽ được listed trong cấu trúc FREELIST, sau đó, nó vẫn sẽ còn ở đó cho đến khi không gian còn trống đạt đến ngưỡng của giá trị PCTFREE. Khi không gian trống đã đạt đến ngưỡng được xác định bởi giá trị của tham số PCTFREE, block sẽ được remove khỏi FREELIST, và nó sẽ được re-listed lại trong FREELIST khi và chỉ khi khối lượng data xuống dưới giá trị đã xác định của PCTUSED. Oracle sử dụng FREELIST để tăng hiệu năng hoạt động, với tất cả những câu lệnh Insert, thay vì tìm kiếm tất cả các block, Oracle sẽ chỉ tìm kiếm các free block trong FREELIST
PCTFREE
Hinh 1.2
Tham số PCTFREE xác định số % nhỏ nhất (không gian) của 1 data block được dành riêng cho việc update những row đã có trong block đó. Ví dụ: Nừu ta xác định 20% là giá trị của PCTFREE trong câu lệnh CREATE TABLE, thì có nghĩa, 20% của từng data block trong table segment sẽ được dành riêng cho việc update các row đã có bên trong từng block. Những row mới sẽ được thêm vào vùng row data, các thông tin tương ứng của chúng cũng được add vào row-overhead.
PCTUSED
Hinh 1.3
Tham số PCTUSED số % nhỏ nhất của 1 block có thể được sử dụng, cộng với phần overhead của các new row khi thêm vào block. Sau khi 1 data block đã đầy đến ngưỡng của PCTFREE, Oracle sẽ tìm kiếm các block hiện hữu chưa được sử dụng để insert row mới (xem phần FREELIST). Giả sử, ta xác định giá trị của tham số PCTUSED là 40% trong câu lệnh CREATE TABLE, thì trong trường hợp này, 1 data block được xác định là chưa khả dụng nếu như tổng không gian trong block này chưa giảm xuống 39% hoặc thấp hơn (giả sử rằng không gian trong block này trước đó đã đạt tới ngưỡng của PCTFREE).
PCTFREE và PCTUSED được sử dụng cùng nhau như thế nào?
2 tham số này được sử dụng cùng nhau để tối ưu hóa việc sử dụng không gian trong data block.
Trong 1 data block mới được cấp phát, thì không gian khả dụng cho việc insert chính là block size trừ đi phần block overhead và PCTFREE. Việc update có thể sử dụng bất kỳ không gian còn trống khả dụng nào trong block. Với mỗi một data và index segment, Oracle maitain một hoặc nhiều free list (xem ở trên), là danh sách các data block đã được cấp phát và có không gian lớn hơn tham số xác định của PCTFREE. Khi ta đưa ra 1 câu lệnh Insert, Oracle sẽ kiểm tra trong FREELIST để xác định block đầu tiên nào khả dụng cho việc insert này (tính khả dụng của data block trong FreeList đã nói ở trên).
Row Migration:
Trường hợp này, 1 row đã được lưu vào trong 1 data block, tuy nhiên, khi insert tiếp, free space đã đầy, và vì thế, Oracle sẽ migrate (dịch chuyển) data của toàn bộ row này sang 1 data block mới, với data block cũ, Oracle sẽ giữ lại 1 row piece – cũng chính là rowID để trỏ tới block mới.
Hinh 1.4
Đối với trường hợp Row Migration, việc Full Table Scan không bị ảnh hưởng (I/O increase), là bởi vì Forward address sẽ bị bỏ qua, tuy nhiên, Row Migration lại làm ảnh hưởng đến việc đọc Index. Bởi vì, Index sẽ nói rằng : “Đến file X, block Y, slot Z…để tìm row này”, và vì thế, khi nhận được thông điệp trên, ta lại mất thêm 1 I/O physical hoặc logical để tìm row này. (Physical I/O, Logical I/O đề cập ở phần khác).
Row Chaining:
Trong nhiều trường hợp, data cho 1 row quá lớn để lưu trong 1 single data block, do vậy, Oracle sẽ lưu data của row này vào trong 1 hoặc nhiều chained data block (các data block móc nối). Lờy ví dụ, nếu ta sử dụng 1 data block size 4KB cho Database, và cần insert 1 row với size 8KB, Oracle sẽ sử dụng 3 blocks để lưu lại data trong row. Row chaining xảy ra với các trường hợp
– Rowsize vượt quá data block size
– Table có LONG và LONGRAW columns
– Table có trên 255 column
Với trường hợp này, sẽ không có Forward Address trên 1 data block, mà ta sẽ có data trên ít nhất 2 block. Chained row có ảnh hưởng (tác động) rất khác nhau. Lờy ví dụ, chúng có có 1 row với 2 column trên 2 block. Query:
SQL> select column1 from tableA
Với column1 trên block1, sẽ không có “table fetch continued row”, tuy nhiên, nếu cũng với query:
SQL> select column2 from tableA
Thì ta sẽ nhận được kết quả với giá trị trả về trong “table fetch continued row” bởi vì block2 chính là chained row.
Xét ví dụ với cả 2 trường hợp Row Migration và Row Chaining:
SQL> show parameter db_block_size
SQL> show parameter db_block_size
NAME TYPE VALUE