Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

TỔNG QUÁ TRÌNH NHẬN (LƯU TRỮ DỮ LIỆU FLASHBACK)

Kho lưu trữ dữ liệu hồi tưởng cung cấp khả năng tự động theo dõi và lưu trữ các thay đổi dữ liệu giao dịch cho các đối tượng cơ sở dữ liệu được chỉ định.

Mô tả

Một kho lưu trữ dữ liệu hồi tưởng bao gồm nhiều không gian bảng và lưu trữ dữ liệu lịch sử từ tất cả các giao dịch dựa trên các bảng được theo dõi. Dữ liệu được lưu trữ trên các bảng lịch sử nội bộ. Nó cung cấp khả năng lưu trữ lâu dài đối với dữ liệu hoàn tác, cho phép thực hiện các hoạt động hồi tưởng dựa trên hoàn tác trong một thời gian dài. và trong thời gian dài, Lưu trữ dữ liệu Flash là một tùy chọn giúp nhớ lại mà không cần khôi phục bản sao lưu lịch sử.

Các đặc quyền bắt buộc để thực thi

  • Lược đồ với đặc quyền hệ thống FLASHBACK ARCHIVE ADMINISTER có thể thực thi việc tách và liên kết lại các thủ tục PL / SQL.
  • Sau khi một bảng được tách ra, người dùng bình thường có thể thực hiện các câu lệnh DDL và DML nếu họ có các đặc quyền cần thiết trên bảng.
  • FLASHBACK ARCHIVE ADMINISTER yêu cầu đặc quyền hệ thống tạo một kho lưu trữ dữ liệu hồi tưởng.
  • Một người phải có đặc quyền hệ thống CREATE TABLESPACE để tạo kho lưu trữ dữ liệu hồi tưởng
  • Đảm bảo bạn có đủ hạn ngạch trên vùng bảng chứa thông tin lịch sử.

Thông tin ngữ cảnh được lưu trữ cùng với dữ liệu giao dịch, bạn cần sử dụng thủ tục DBMS_FLASHBACK_ARCHIVE.SET_CONTEXT_LEVEL, chuyển một trong các giá trị tham số sau.

  • TIÊU BIỂU:Chỉ các thuộc tính kiểm tra cơ bản từ ngữ cảnh USERENV mới được lưu trữ.
  • TẤT CẢ:Tất cả các ngữ cảnh có sẵn cho người dùng thông qua chức năng SYS_CONTEXT đều được lưu trữ.
  • KHÔNG CÓ:Không có thông tin ngữ cảnh nào được lưu trữ.

Trong trường hợp này, hãy sử dụng TẤT CẢ, để nắm bắt USERENV và các giá trị ngữ cảnh tùy chỉnh.

CONN sys@surya AS SYSDBA

EXEC DBMS_FLASHBACK_ARCHIVE.set_context_level('ALL');

Kiểm tra và Triển khai

Trong ví dụ sau, tôi đang kích hoạt FDA ở cấp không gian bảng và đặt lưu giữ trong khoảng thời gian cụ thể cho nhiều không gian bảng. Đồng thời truy xuất dữ liệu từ kho lưu trữ dữ liệu hồi tưởng đã bị xóa giữa khoảng thời gian lưu giữ. Mục đích là để lấy dữ liệu lịch sử một cách dễ dàng với FAD. Nếu không bật tính năng này, chúng tôi phải khôi phục toàn bộ cơ sở dữ liệu để lấy dữ liệu lịch sử. Điều gì đó làm tăng thêm sự phức tạp là trường hợp của một hệ thống cơ sở dữ liệu lớn.

Ví dụ:

• Lệnh tạo vùng bảng

SQL> CREATE TABLESPACE FBA DATAFILE size 500m autoextend on next 100m ;

Đã tạo vùng bảng.

• Chạy lệnh sau để tạo kho lưu trữ dữ liệu hồi tưởng mặc định (FDA)

SQL> CREATE FLASHBACK ARCHIVE DEFAULT FLA1 TABLESPACE FBA QUOTA 500M RETENTION 1 YEAR;

Đã tạo lưu trữ hồi tưởng.

• Hoàn thành bước sau để tạo FDA không mặc định

SQL> CREATE FLASHBACK ARCHIVE FLA2 TABLESPACE users QUOTA 400M RETENTION 6 MONTH;

Đã tạo lưu trữ hồi tưởng.

• Lấy danh sách các FDA đã tạo

CHỌN owner_name, flashback_archive_name,

   flashback_archive#,
   
   retention_in_days,
   
   TO_CHAR(create_time, 'DD-MON-YYYY HH24:MI:SS') AS create_time,
   
   TO_CHAR(last_purge_time, 'DD-MON-YYYY HH24:MI:SS') AS last_purge_time,
   status

FROM dba_flashback_archive

ĐẶT HÀNG THEO tên_chính_hàng, flashback_archive_name;

OWNER_NAME FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE # RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME STATUS

SYS FLA1 1 365 16-DEC-2021 19:28:53 16-DEC-2021 19:28:53 DEFAULTSYS FLA2 180 16-DEC-2021 19:29:14 16-DEC-2021 19:29:14

• Đặt FDA Mặc định và nhận thông tin chi tiết

SQL> ALTER FLASHBACK ARCHIVE FLA1 SET DEFAULT ;

Đã thay đổi kho lưu trữ hồi tưởng.

SELECT flashback_archive_name, flashback_archive#, tablespace_name, quota_in_mb TỪ dba_flashback_archive_ts ĐẶT HÀNG THEO flashback_archive_name;

FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE # TABLESPACE_NAME QUOTA_IN_MB

FLA1 1 FBA 500

FLA2 2 NGƯỜI DÙNG 400

SQL> SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLEs WHERE TABLE_NAME='EMPLOYEES' AND OWNER_NAME='HR' ;

TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME TÌNH TRẠNG

NHÂN VIÊN HR FLA1 SYS_FBA_HIST_92593 ĐÃ ĐƯỢC BỔ SUNG

Thực hiện kiểm tra sau và để xem nó hoạt động như thế nào

SQL> ALTER SESSION SET NLS_DATE_FORMAT =‘YYYY / MM / DD HH24:MI:SS’;

Đã thay đổi phiên.

SQL> SQL> CHỌN TỔNG HỢP TỪ DUA;

SYSDATE

2021/12/16 19:39:31

SQL> CHỌN DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

GET_SYSTEM_CHANGE_NUMBER

             1964623

Hãy để chúng tôi cố gắng xóa bản ghi và cập nhật trên bảng nhân viên.

SQL> DELETE FROM HR.EMPLOYEES WHERE EMPLOYEE_ID=192;

Đã xóa 1 hàng.

SQL> cam kết;

Cam kết hoàn tất.

SQL> SQL> SQL> SQL> UPDATE HR.EMPLOYEES SET SALARY=12000 WHERE EMPLOYEE_ID=168;

CAM KẾT;

UPDATE HR.EMPLOYEES SET SALARY=12500 WHERE EMPLOYEE_ID=168;

CAM KẾT;

UPDATE HR.EMPLOYEES SET SALARY=12550 WHERE EMPLOYEE_ID=168;

COMMIT; Đã cập nhật 1 hàng.

SQL> SQL> Hoàn tất cam kết.

SQL> SQL> 1 hàng được cập nhật.

SQL> SQL> Hoàn tất cam kết.

SQL> SQL> 1 hàng được cập nhật.

SQL> SQL>

Cam kết hoàn tất.

  • Làm theo các bước để so sánh dữ liệu bằng FDA

SQL> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME FROM HR.EMPLOYEES AS OF TIMESTAMP TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS') MINUS SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME FROM HR.EMPLOYEES;

EMPLOYEE_ID FIRST_NAME LAST_NAME

    192 Sarah                Bell

Tại đây bạn có thể thấy hàng đã bị xóa khỏi FDA. Bạn cũng có thể lấy dữ liệu bằng VERSION_STARTSCN giả cặp.

• Dữ liệu với SCN đã cho

SQL> COL VERSIONS_STARTTIME FORMAT A40 SELECT VERSIONS_STARTTIME, VERSIONS_STARTSCN, FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2021/12/16 19:39:31','YYYY/MM/DD HH24:MI:SS') AND SYSTIMESTAMP

WHERE

EMPLOYEE_ID=168;

VERSIONS_STARTTIME VERSIONS_STARTSCN FIRST_NAME LAST_NAME SALARY

16-DEC-21 07.40.08.000000000 PM 1964648 Lisa Ozer 1250016-DEC-21 07.40.08.000000000 PM 1964646 Lisa Ozer 12000Lisa Ozer 1150016-DEC-21 07.40.08.000000000 PM 1964650 Lisa Ozer 12550

Bạn có thể thấy hàng có phiên bản khác cho cùng một dữ liệu trong cột lương như chúng tôi đã thực hiện cập nhật bảng sao kê trên cột lương với giá trị chênh lệch 500.

Hạn chế và Giải pháp cho câu lệnh DDL (nắm bắt diễn biến của một bản ghi)

Disassociate / Associate

Đối với các DDL phức tạp hơn - nâng cấp, chia bảng, v.v. - có thể sử dụng thủ tục Disassociate và Associate PL / SQL để tạm thời vô hiệu hóa Lưu trữ dữ liệu Flashback trên các bảng được chỉ định. Thủ tục liên kết thực thi tính toàn vẹn của lược đồ sau khi liên kết:lược đồ bảng cơ sở và bảng lịch sử phải giống nhau. Thủ tục Disassociate và Associate yêu cầu đặc quyền QUẢN TRỊ VIÊN LƯU TRỮ SẮP XẾP.

o Thêm, Xóa, Đổi tên hoặc Chỉnh sửa một cộtXóa hoặc cắt bớt một phân vùng

o Đổi tên hoặc cắt bớt bảng (bảng có FBA Delete không thành công với lỗi ORA- 55610)

o Một số thay đổi (ví dụ:MOVE / SPLIT / CHANGE PARTITIONS) các phương thức yêu cầu gói DBMS_FLASHBACK_ARCHIVE thực hiện.

Trong ví dụ sau, bạn có thể thấy cách chúng tôi có thể thực hiện hoạt động DDL trên các bảng của FDA để có dữ liệu lịch sử. Tạo bảng demo EMPLOYEES_FBA thêm các ràng buộc.

SQL> CREATE TABLE HR.EMPLOYEES_FBA AS SELECT * FROM HR.EMPLOYEES;

Đã tạo bảng.

SQL> ALTER TABLE HR.EMPLOYEES_FBA ADD CONSTRAINT employee_pk PRIMARY KEY (employee_id);

Bảng đã thay đổi.

Bật FDA trên các bảng demo và cập nhật một số bản ghi.

SQL> ALTER TABLE HR.EMPLOYEES_FBA FLASHBACK ARCHIVE;

Bảng đã thay đổi.

SQL> UPDATE HR.EMPLOYEES_FBA SET SALARY=10000 WHERE EMPLOYEE_ID=203;

Đã cập nhật 1 hàng.

COMMIT;

Cam kết hoàn tất.

Khi tắt và bật các ràng buộc bảng, Lời nhắc ORA-55610 ngăn bảng dữ liệu theo dõi lịch sử

SQL> ALTER TABLE HR.EMPLOYEES_FBA DISABLE CONSTRAINT EMPLOYEE_PK;

Bảng đã thay đổi.

SQL> SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK; ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK * LỖI ở dòng 1:ORA-55610:Câu lệnh DDL không hợp lệ trên bảng theo dõi lịch sử

Bây giờ làm cách nào để tiếp tục khi chúng tôi nhận được những hạn chế này

* Lưu ý:Việc bổ sung bất kỳ ràng buộc nào trên bảng (Khóa chính, Khóa duy nhất, Khóa ngoại hoặc Ràng buộc kiểm tra) sẽ khiến bạn không thể tự động đọc dữ liệu lịch sử mà không cần truy cập trực tiếp vào các bảng lưu trữ SYS_FBA_ được gạch dưới. ** Bạn cần rất cẩn thận với quản lý ràng buộc và theo dõi lịch sử của các bảng *

SQL> SELECT * FROM DBA_FLASHBACK_ARCHIVE_TABLES WHERE TABLE_NAME='EMPLOYEES_FBA';

TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME TÌNH TRẠNG

EMPLOYEES_FBA HR FLA1 SYS_FBA_HIST_93946 ĐÃ BẬT

Với sự trợ giúp của DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA, chúng tôi có thể đạt được điều này.

SQL> EXEC DBMS_FLASHBACK_ARCHIVE.DISASSOCIATE_FBA('HR','EMPLOYEES_FBA');

Thủ tục PL / SQL đã hoàn tất thành công.

Bây giờ, hãy thử bật lại các ràng buộc

một lần nữa

SQL> ALTER TABLE HR.EMPLOYEES_FBA ENABLE CONSTRAINT EMPLOYEE_PK;

Bảng đã thay đổi.

Bây giờ bật lại giới hạn với sự trợ giúp của DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA

SQL> EXEC DBMS_FLASHBACK_ARCHIVE.REASSOCIATE_FBA('HR','EMPLOYEES_FBA');

Thủ tục PL / SQL đã hoàn tất thành công.

Xóa dữ liệu lịch sử trong một thời gian cụ thể. SQL> ALTER FLASHBACK ARCHIVE FLA1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

Đã thay đổi kho lưu trữ hồi tưởng.

Tắt FDA

SQL> ALTER TABLE HR.EMPLOYEES NO FLASHBACK ARCHIVE;

SQL> ALTER TABLE HR.EMPLOYEES_FBA NO FLASHBACK ARCHIVE;

Bỏ FDA

SQL> DROP FLASHBACK ARCHIVE FLA1;

Kết luận

Tính năng Lưu trữ dữ liệu Flashback cung cấp một giao diện tập trung và tích hợp để quản lý và lưu giữ lịch sử dữ liệu cũng như quản lý dựa trên chính sách, tự động, cung cấp giải pháp ấn tượng để quản trị cơ sở dữ liệu trong đó việc theo dõi dữ liệu lịch sử này để tuân thủ các quy định mới hoặc thích ứng với nhu cầu kinh doanh thay đổi.

Hãy để các chuyên gia của chúng tôi hướng dẫn bạn trong hành trình cơ sở dữ liệu của bạn.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào. Bạn cũng có thể bắt đầu cuộc trò chuyện với chúng tôi.