Oracle Flashback Table: phục hồi một hoặc nhiều bảng trở lại một thời điểm trước mà không ảnh hưởng đến các đối tượng khác trong cơ sở dữ liệu.. Oracle Flashback Drop: Đảo ngược sự ảnh h
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KINH TẾ- LUẬTKHOA TIN HOC QUẢN LÝ
BÁO CÁO MÔN AN TOÀN VÀ BẢO MẬT
HỆ THỐNG THÔNG TIN
AN TOÀN THÔNG TIN VỚI KỸ THUẬT
FLASHBACK TRONG ORACLE
Đề tài:
Trang 2Mục lục
Phần 1: Lý do lựa chọn đề tài 1
Phần 2: Tổng quan 2
Phần 3 Các tính năng phân tích lỗi 3
3.1 Oracle Flashback Version Query 3
3.1.1 Mục đích 3
3.1.1 Cú pháp 3
3.1.2 Đặc điểm 3
3.2 Oracle Flashback Query 4
3.2.1 Mục đích 4
3.2.2 Đặc điểm 5
3.2.3 Hướng dẫn cho Oracle Flashback Query 6
3.3.Oracle Flashback Transaction Query 7
3.3.1 Mục đích 7
3.3.2 Đặc điểm 7
Phần 4 Các tính năng khôi phục lỗi sai 10 4.1 Flashback Table 10
4.1.1 Mục đích 10
4.1.2 Điều kiện tiên quyết 10
4.1.3 Cú pháp 10
4.1.4 Ngữ nghĩa 11
4.1.5 Đặc điểm 11
4.1.6.Sử dụng một số mệnh đề trong Flashback table 12
4.2 Flashback Drop 16
4.2.1 Mục đích 16
4.2.2 Điều kiện tiên quyết 17
4.2.3 Lưu ý 19
4.3 Flashback Database 21
4.3.1 Mục đích 21
4.3.2 Điều kiện tiên quyết 21
Trang 34.3.4 Tablespaces với Logging Flashback Disabled 24
4.3.5 Trạng thái của các cơ sở dữ liệu Sau khi Flashback cơ sở dữ liệu 24
4.3.6 Cú pháp 25
Phần 5 Các tính năng theo dõi và đánh dấu 30 5.1.Flashback Data Archive (Oracle Total Recall) 30
5.1.1 CREATE FLASHBACK ARCHIVE 30
5.1.1.1 Mục đích 30
5.1.1.3 Cú pháp: 30
5.1.1.4 Ngữ nghĩa 31
5.1.2 ALTER FLASHBACK ARCHIVE 33
5.1.2.1 Mục đích 33
5.1.2.2 Điều kiện tiên quyết 33
5.1.2.3 Cú pháp 33
5.1.2.4 Ngữ nghĩa: 34
5.1.3 DROP FLASHBACK ARCHIVE 35
5.1.3.1 Mục tiêu ( PURPOSE ) 35
5.1.3.2 Điều kiện tiên quyết 35
5.1.3.3 Cú pháp 35
5.2 Flashback restore point 35
5.2.1 CREATE RESTORE POINT 36
5.2.1.1 Mục đích 36
5.2.1.2.Điều kiện tiên quyết 37
5.2.1.3 Cú pháp 37
5.2.1.4 Ngữ nghĩa 37
5.2.2 DROP RESTORE POINT 39
5.2.2.1 Mục đích 39
5.2.2.2.Điều kiện tiên quyết 40
5.2.2.3 Cú pháp 40
5.2.2.4 Ngữ nghĩa 40 Tài liệu tham khảo 41
Trang 4Phần 1: Lý do lựa chọn đề tài
Bên cạnh việc bảo mật thông tin thì việc an toàn thông tin cũng là một vấn đề khá quantrọng Oracle database là một hệ quản trị cơ sở dữ liệu, được tích hợp để cho phép quản lý thôngtin một cách toàn diện.Hiện nay, Oracle database là một trong những cơ sở dữ liệu mạnh nhấtđược sử dụng nhiều trong các ngân hàng, doanh nghiệp, tổ chức lớn
Trong thời đại công nghệ thông tin ngày càng có nhiều công nghệ mới ra đời thì ngoài việc lưutrữ thông tin an toàn chắc chắn truy cập dễ dàng và chính xác, ta còn quan tâm một số vấn đềkhác như: làm thế nào khôi phục lại dữ liệu đã mất ở một thời điểm trong quá khứ?, làm thế nào
để khôi phục một tiến trình đã bị lỗi mà không mất nhiều thời gian? và nếu như một trong số đó
bị lỗi, tiến trình cập nhập sẽ bị ngưng lại và phải bắt đầu lại từ đầu thì phải giải quyết ra sao?Oracle Flashback làm giảm thời gian phục hồi dữ liệu từ vài giờ xuống vài phút Mặc dù có cácbiện pháp phòng ngừa, lỗi do con người vẫn có thể xảy ra Công nghệ Flashback trong Oracle làmột tập hợp độc đáo và phong phú của các giải pháp phục hồi dữ liệu cho phép đảo ngược cáclỗi của con người có chọn lọc và hiệu quả do ảnh hưởng của một lỗi nào đó Trước khiFlashback, CSDL có thể bị hỏng trong vài phút nhưng để phục hồi nó phải mất vài tiếng VớiFlashback, việc sửa một lỗi như việc tạo ra chính nó vậy Ngoài ra, thời gian cần thiết để phụchồi từ lỗi này không phụ thuộc vào kích thước cơ sở dữ liệu, một khả năng đặc trưng củaOracle Flashback hỗ trợ phục hồi tại tất cả các cấp bao gồm dòng, transaction, bảng, và toàn bộ
cơ sở dữ liệu Flashback cung cấp một tập ngày càng nhiều các tính năng để xem và quay lại dữ
liệu trong quá khứ, cụ thể là: Flashback database, Flashback Table, Flashback Drop,…
Các tính năng Flashback cung cấp khả năng truy vấn dữ liệu lịch sử, thực hiện phân tích sự thayđổi, và thực hiện các dịch vụ sửa chữa tự để phục hồi từ những sai lầm trong khi cơ sở dữ liệutrực tuyến Với Công nghệ Flashback Oracle, bạn thực sự có thể lùi lại quá khứ
Tất cả những vấn đề trên sẽ được giải quyết bằng Oracle Flashback.Đây là một trong nhữngtính năng mới nổi bật của phiên bản Oracle Để hiểu rõ hơn về công nghệ Flashback và các ứngdụng thực tiện của nó nhóm đã quyết định chọn đề tài “ Kĩ Thuật Flashback Trong Oracle”
Trang 5Phần 2: Tổng quan
Cơ sở dữ liệu Oracle cung cấp kỹ thuật Oracle flashback: là một nhóm các tính năng hỗ trợ
để xem trạng thái dữ liệu quá khứ và phục hồi dữ liệu về thời điểm trước Với kỹ thuật này, giúpngười dùng phân tích các lỗi và phục hồi dữ liệu sai Các user thực hiện commit những thay đổigây ra lỗi,
Sử dụng các tính năng sau để phân tích lỗi:
Oracle Flashback Query: Xem những dữ liệu đã commit, các trạng thái dữ liệu trong 1 số điểm
trong quá khứ Sử dụng câu lệnh SELECT với mệnh đề AS OF để chỉ ra thời điểm trong quá khứthông qua 1 time stamp hoặc SCN
Oracle Flashback Versions Querry: Xem lịch sử của các dữ liệu đã commit cho 1 mốc thời
gian cụ thể Sử dụng mệnh đề VERSIONS BETWEEN trong câu lệnh SELECT ()
Oracle Flashback Transaction Query: xem tất cả các thay đổi của cơ sở dữ liệu ở mức
transaction
Hỗ trợ giải pháp để phục hồi từ các lỗi người dùng:
Oracle Flashback Transaction Backout: Rollback một transaction cụ thể và các transaction
phụ thuộc
Oracle Flashback Table: phục hồi một hoặc nhiều bảng trở lại một thời điểm trước mà không
ảnh hưởng đến các đối tượng khác trong cơ sở dữ liệu
Oracle Flashback Drop: Đảo ngược sự ảnh hưởng của câu lệnh drop đến các bảng bằng cách
khôi phục các bảng bị drop từ thùng rác cho đến cơ sở dữ liệu cùng với các đối tượng bị ảnhhưởng như là các index và các trigger
Oracle Flashback Database: Khôi phục cơ sở dữ liệu đến 1 thời điểm trong quá khứ hoặc SCN
Trang 6Phần 3 Các tính năng phân tích lỗi
3.1 Oracle Flashback Version Query
3.1.1 Mục đích
Oracle Flashback Version Query được đùng để truy vấn lại các phiên bản đã thay đổi của mộthoặc 1 số dòng được chỉ định nào đó trong 1 khoảng thời gian nhất định
3.1.1 Cú pháp
VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end}
Start và end trong câu truy vấn là khoảng thời gian muốn thực hiện truy vấn
3.1.2 Đặc điểm
Oracle Flashback Version Query trả ra một bảng mà mỗi dòng là một phiên bản của dòng tồntại trong suốt khoảng thời gian đã chỉ định Thông tin này có thể cho thấy thời gian và sự thayđổi xảy ra với Database (có thể có sai lệch) Mỗi dòng trong bảng bao gồm các cột giả chứa dữliệu về các phiên bản của dòng Các cột:
VERSIONS_STARTSCN
VERSIONS_STARTTIME
Số thay đổi hệ thống (SCN) hoặc thời gian bắt đầu khicác phiên bản dòng được tạo ra Cột này xác định thờigian khi các dữ liệu lần đầu tiên có giá trị được phảnánh trong các phiên bản dòng Sử dụng cột này để xácđịnh thời gian quá khứ cho Oracle Flashback Tablehoặc Oracle Flashback Query
Nếu cột này là NULL thì phiên bản dòng đã được tạo
ra trước thời điểm bắt đầu
VERSIONS_XID Định danh của giao dịch đã tạo ra phiên bản hàng
VERSIONS_OPERATION Nỗi dung thực hiện transaction: I để chèn, D để xóa,
hoặc U để cập nhật Phiên bản này là dòng đã đượcINSERT,DELETE, hoặc UPDATE, có nghĩa là dòng
Trang 7sau khi một thao tác INSERT, dòng trước khi một hoạtđộng DELETE, hoặc dòng bị ảnh hưởng bởi một hoạtđộng UPDATE.
Đối với người sử dụng cập nhật chỉ số khóa, OracleFlashback Version Query có thể ghi một hoạt độngUPDATE là hai hoạt động, DELETE cộng INSERT,biểu diễn như là hai dòng với một D theo sau bởi mộtVERSIONS_OPERATION I
Một phiên bản dòng có hiệu lực bắt đầu vào ngày VERSIONS_START trở đi, thời gian kết thúcVERSIONS_END Như vậy có nghĩa là dòng này có giá trị cho bất kỳ thời điểm t màVERSIONS_START<= t < VERSIONS_END Ví dụ, dòng dưới chỉ ra mức lương 10.243 từngày 9/9/2002 đến ngày 25/11/2003 (không bao gồm ngày 25/11/2003)
VERSIONS_START_TIME VERSIONS_END_TIME SALARY
- -
-09-SEP-2003 25-NOV-2003 10243
Dưới đây là 1 trường hợp sử dụng điển hình của Oracle Flashback Version Query
SELECT versions_startscn, versions_starttime,
versions_endscn, versions_endtime,
versions_xid, versions_operation,
last_name, salary
FROM employees
VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2008-12-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_TIMESTAMP('2008-12-18 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE first_name = 'John';
3.2 Oracle Flashback Query
3.2.1 Mục đích
Oracle Flashback Query cung cấp khả năng xem các dữ liệu tồn tại trong quá khứ bằng cách sử dụng hệ thống Automatic Undo Management để có được siêu dữ liệu và dữ liệu lịch sử cho các Transaction Undo data là liên tục và tồn tại ngay cả khi có một sự cố cơ sở dữ liệu hoặc tắt máy
Trang 8Các tính năng độc đáo của Flashback Query không chỉ cung cấp khả năng truy vấn các phiên bản trước của bảng mà còn cung cấp một cơ chế mạnh để phục hồi từ các hoạt động sai lầm.
3.2.2 Đặc điểm
Sử dụng Flashback Query bao gồm:
■ Phục hồi dữ liệu bị mất hoặc hoàn tác dữ liệu sai, thay đổi khi đã commit Ví dụ, hàng đã bịxóa hoặc cập nhật có thể được sửa chữa ngay lập tức, ngay cả khi đã commit
■ So sánh dữ liệu hiện tại với dữ liệu tương ứng tại một thời điểm trong quá khứ Ví dụ, bằngcách sử dụng một báo cáo hàng ngày cho thấy những thay đổi trong dữ liệu so với ngày hômtrước, nó có thể so sánh các hàng riêng biệt hoặc tìm các giao điểm, hợp của các hàng
■ Kiểm tra trạng thái của dữ liệu giao dịch tại một thời điểm cụ thể, chẳng hạn như kiểm tra số
dư tài khoản vào một ngày nhất định
■ Đơn giản hóa thiết kế ứng dụng bằng cách loại bỏ một số loại dữ liệu lưu trữ tạm thời Bằngcách sử dụng Flashback Query, có thể lấy lại dữ liệu trong quá khứ trực tiếp từ cơ sở dữ liệu
■ Áp dụng các gói ứng dụng, chẳng hạn như các công cụ tạo lập báo cáo từ dữ liệu quá khứ
■ Cung cấp chức năng tự sửa lỗi cho một ứng dụng, cho phép người dùng phục hồi lại và sửachữa những lỗi sai của mình
Ví dụ để xem và phục hồi dữ liệu quá khứ
Giả sử rằng bạn nhận ra lúc 12:30 chiều, dòng dữ liệu về nhân viên Chung bị xóa khỏi bảngEmployees, và bạn biết vào lúc 9:30 sáng dữ liệu đúng của Chung đã được lưu trữ trong cơ sở
dữ liệu Bạn có thể sử dụng Oracle Flashback Query để xem lại nội dung của bảng vào lúc 9h30sáng để tìm lại những dữ liệu đã mất Nếu phù hợp, bạn có thể lưu lại các dữ liệu đã bị mất.Truy vấn lại dữ liệu bị mất với Flashback Query
SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
WHERE last_name = 'Chung';
Khôi phục 1 dòng dữ liệu
INSERT INTO employees (
SELECT * FROM employees
AS OF TIMESTAMP
TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
Trang 9WHERE last_name = 'Chung'
);
3.2.3 Hướng dẫn cho Oracle Flashback Query
Bạn có thể chỉ ra hoặc bỏ qua mệnh đề AS OF cho mỗi bảng và chỉ ra thời gian khác nhaucho các bảng khác nhau
Lưu ý: Nếu 1 bảng là Flashback Data Archive và bạn chỉ ra thời gian sớm hơn thời gian bảngnày được tạo ra, truy vấn sẽ trả về kết quả 0 dòng, hơn nữa đó có thể là nguyên nhân gây ra lỗi
Sử dụng mệnh đề AS OF trong các truy vấn để thực thi các lệnh DDL (data definitionlanguage – như là CREATE và TRUNCATE) hoặc các lệnh DML (Data Manipulation Language
- như là INSERT hoặc DELETE)
Để sử dụng kết quả của Oracle Flashback Query trong các câu lệnh DDL hoặc DML mà cáccâu lệnh này tác động đến trạng thái hiện tại của cơ sở dữ liệu, thì sử dụng mệnh đề AS OF bêncạnh các câu lệnh INSERT hoặc CREATE TABLE AS SELECT
Có thể tạo 1 View liên quan đến dữ liệu quá khứ bằng cách sử dụng mệnh đề AS OF trongcâu lệnh SELECT đễ định nghĩa View này
Nếu chỉ định 1 thời gian tương đối bằng cách trừ từ thời gian hiện tại trên máy chủ của cơ sở
dữ liệu thì thời gian quá khứ sẽ được tính toán lại cho mổi truy vấn Ví dụ:
CREATE VIEW hour_ago AS
SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);
SYSTIMESTAMP chỉ thời gian múi giờ của máy chủ
Có thể sử dụng AS OF để tự Join hoặc để thiết lập các phép toán tập hợp như INTERSECT vaMINUS, để truy xuất hoặc so sánh dữ liệu từ 2 thời điểm khác nhau
Bạn có thể lưu kết quả theo thứ tự với câu lệnh
CREATE TABLE AS SELECT or INSERT INTO TABLE SELECT
Ví dụ dưới đây INSERT lại những dòng đã tồn tại cách đây 1 tiếng vào bảng EMPLOYEESINSERT INTO employees
(SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE)
)
Trang 10MINUS SELECT * FROM employees);
3.3.Oracle Flashback Transaction Query
versions between timestamp
to_timestamp ( '2008-05-17 09:18:00','YYYY-MM-DD HH24:MI:SS') and
Trang 11to_timestamp ( '2008-05-17 09:22:00','YYYY-MM-DD HH24:MI:SS');
where xid = HEXTORAW ('050017007C070000');
LOGON_USER OPERATION UNDO_SQL
- -
-SCOTT DELETE insert into " -SCOTT"."TAJ"("NAME","NO") values ('TAJ','4');
Trên đây là hoạt động DELETE bởi user Scott và UNDO_SQL đã được tạo ra
Giả sử chúng ta không biết chính xác thời điểm ta có thể sử dụng SCN (system change number)khi commit cuối cùng được thực hiện
Chúng ta có thể nhận SCN từ cột ORA_ROWSCN, ORA_ROWSCN là thể hiện SCN của lần
thay đổi gần nhất của dòng, đó là hoạt động COMMIT gần nhất của dòng
Giả sử với ví dụ phía trên nếu như không biết chính xác thời điểm mà dòng đó đã bị xóa trong bảng TAJ Vậy có thể biết được từ cột ORA_ROWSCN
SQL> select ORA_ROWSCN, taj.* from scott.taj;
ORA_ROWSCN NAME NO
2407151 TAJ 1
2407151 TAJ 3
COMMIT gần nhấtđược thực hiện bởi bảng TAJ 2407151
Bây giờ thay đổi SCN thành TIMESTAMP để nhận được chính xác thời điểm COMMIT gần nhất
SQL> select scn_to_timestamp('2407151') from dual;
Trang 12-insert into "SCOTT"."TAJ"("NAME","NO") values ('TAJ','4');
XID là ID của Transaction, ta có thể nhận XID từ FLASBACK VERSION QUERY
Trang 13Phần 4 Các tính năng khôi phục lỗi sai
4.1 Flashback Table
4.1.1 Mục đích
Sử dụng câu lệnh FLASHBACK TABLE để khôi phục lại trạng thái trước đó của một bảng trong trường hợp của lỗi người dùng hay lỗi ứng dụng Thời gian trong quá khứ mà bảng có thể được khôiphục lại là phụ thuộc vào số lượng undo data trong hệ thống.Ngoài ra, cơ sở dữ liệu Oracle không thể khôi phục lại trạng thái của một bảng trước đó qua bất kỳ hoạt động DDL thay đổi cấu trúc của bảng
4.1.2 Điều kiện tiên quyết
Để phục hồi lại một bảng tại một SCN hoặc Timestamp, bạn phải có đặc quyền đối tượng trên bảng hoặc hệ thống đặc quyền Flashback any table Ngoài ra, bạn phải cần có quyền SELECT , INSERT ,DELETE , và ALTER đặc quyền đối tượng trên bảng
Rowmovement phải được kích hoạt cho tất cả các bảng trong danh sách Flashback trừ khi bạn đang khôi phục tại To Before Dropiv Hoạt động khôi phục sử dụng dữ liệu bị bỏ trong thùng rác chứ không phải lùi lại dữ liệu
Để khôi phục lại một bảng tại một điểm khôi phục, bạn phải có Select Any Dictionary hoặc
Flashback Any Table hoặc Select_Catalog_Role
Để khôi phục lại một bảng trước khi một Drop Table hoạt động, bạn chỉ cần các đặc quyền cần thiết
để Drop các bảng
4.1.3 Cú pháp
Trang 144.1.4 Ngữ nghĩa
Trong một hoạt động Oracle Flashback table, Cơ sở dữ liệu Oracle thu hồi DML khóa độc quyền trên tất cả các bảng quy định trong danh sách Flashback Các khóa ngăn chặn bất kỳ hoạt động trên các bảng trong khi chúng đang quay trở lại trạng thái trước đó của chúng
Flashback table hoạt động được thực hiện trong một transaction duy nhất, bất kể số lượng các bảng quy định trong danh sách Flashback.Hoặc là tất cả các bảng trở lại trạng thái trước đó hoặc không bảng nào được phục hồi.Nếu các hoạt động Flashback table không thành công trên bất kỳ bảng nào thì sau đó toàn bộ câu lệnh không thành công
Sau khi hoàn tất các hoạt động Flashback table, các dữ liệu trong bảng là phù hợp với bảng ở thời gian trước đó Tuy nhiên, Flashback Table To SCN hoặc TIMESTAMP không bảo quản rowids và Flashback Table To Before Drop không phục hồi ràng buộc tham chiếu
Các hoạt động DDL thay đổi cấu trúc của một bảng, nên bạn không thể sử dụng các To SCNhoặc To Timestamp để khôi phục bảng trở lại một thời gian trước các hoạt động: nâng cấp, dichuyển, hay cắt bỏ một bảng; thêm một ràng buộc đến một bảng, thêm một bảng vào một
Trang 15cluster, sửa đổi hoặc thả một cột, thay đổi một khóa mã hóa cột; thêm, giảm, sáp nhập, chia tách,hợp nhất, hoặc cắt bỏ một phân vùng hoặc subpartition (với ngoại lệ của việc thêm một phânvùng phạm vi).
4.1.6.Sử dụng một số mệnh đề trong Flashback table
Mệnh đề TO RESTORE POINT
Chỉ định một điểm khôi phục mà bạn muốn khôi phục lại bảng.Các điểm khôi phục phảiđược tạo ra
ENABLE | vô hiệu hóa kích hoạt
Theo mặc định, Oracle Database vô hiệu hóa kích hoạt tất cả các trigger được định nghĩa trênbảng trong hoạt động Bảng Flashback và sau đó reenables chúng sau khi hoạt động BảngFlashback đã hoàn tất Chỉ định ENABLE được tạo nên nếu bạn muốn ghi đè lên hoạt động này
và tiếp tục gây nên kích hoạt trong quá trình Flashback
Điều khoản này chỉ ảnh hưởng đến những cơ sở dữ liệu kích hoạt được xác định trên bảng đãđược kích hoạt.Để kích hoạt tính vô hiệu hóa gây nên chọn lọc, sử dụng ALTER TABLE enable_disable_clause trước khi bạn thực hiện FLASHBACK TABLE với mệnh đề ENABLETRIGGERS
Mệnh đề TO BEFORE DROP
Sử dụng điều khoản này để lấy từ thùng rác một bảng đã bị xóa, cùng với tất cả các đốitượng phụ thuộc có thể.Bảng phải nằm trong một tablespace cục bộ quản lý khác hơn SYSTEMtablespace
Hệ thống tạo ra thùng rác tên đối tượng là duy nhất Vì vậy, nếu bạn chỉ định tên hệ thốngtạo ra, khi đó cơ sở dữ liệu lấy theo đối tượng quy định
Để xem các nội dung của thùng rác, truy vấn dữ liệu từ điển xem xét USER_RECYCLEBIN.Bạn có thể sử dụng RecycleBin từ đồng nghĩa thay thế Hai câu sau đây trả lại 2 hàng như nhau:SELECT * FROM RECYCLEBIN;
Trang 16SELECT * FROM USER_RECYCLEBIN;
Nếu bạn chỉ định tên người dùng, và nếu thùng rác chứa nhiều hơn một đối tượng của tên đó,sau đó cơ sở dữ liệu khôi phục các đối tượng đã được di chuyển vào thùng rác gần đây nhất Nếubạn muốn lấy một phiên bản cũ của bảng, sau đó làm một trong những điều này:
Xác định hệ thống tạo ra tên thùng rác của bảng bạn muốn lấy
Thực hiện thêm FLASHBACK TABLE TO BEFORE DROP báo cáo cho đến khi bạn lấycác bảng mà bạn muốn
Cơ sở dữ liệu Oracle cố gắng để bảo vệ tên bảng ban đầu Nếu một bảng mới có cùng tên đãđược tạo ra trong cùng một lược đồ kể từ khi bảng ban đầu đã bị bỏ, sau đó cơ sở dữ liệu trả vềmột lỗi trừ khi bạn cũng xác định các mệnh đề RENAME TO
Mệnh đề RENAME TO sử dụng điều khoản này để chỉ định một tên mới cho bảng được lấy
Cơ sở dữ liệu cũng lấy tất cả các kích hoạt và ràng buộc được định nghĩa trên bảng trừ cácràng buộc toàn vẹn tham chiếu mà các bảng tham chiếu khác
Các chỉ số lấy ra, triggers, và những ràng buộc đặt trongnhững thùng rác có tên Vì vậy nókhuyến khích để truy vấn xem USER_RECYCLEBIN trước khi thực hiệnFLASHBACK TABLE TO BEFORE DROP để bạn có thể đổi tên các chỉ số lấy ra, triggers,
và những ràng buộc đối với những cái tên có thể sử dụng nhiều hơn
Khi bạn Drop một bảng, c tất cả các materialized view được định nghĩa trên bảng cũng giảmnhưng không được đặt trong thùng rác Vì vậy, tất cả các materialized view không thể được khôiphục cùng với bảng
Khi bạn Drop một bảng, bất kỳ chỉ số trên bản bị bỏ và đặt vào thùng rác cùng với bảng Nếuphát sinh các khoảng trống tiếp theo, khi đó cơ sở dữ liệu đòi không gian từ thùng rác bởi chỉ sốđầu tiên Trong trường hợp này, khi bạn flash lại bảng, bạn không thể lấy lại tất cả các chỉ số đãđược định nghĩa trên bản
Bạn không thể flash lại một bảng nếu nó đã được thanh lọc, hoặc bởi một người dùng hoặc
cơ sở dữ liệu Oracle như là kết quả của một số hoạt động cải tạo không gian
Trang 17Ví dụ
Khôi phục dữ liệu trong một trạng thái trước đó: Các ví dụ dưới đây tạo ra một bảng mới,employees_test , với việc khuyến khích hoạt các hàng , cập nhật các giá trị trong bảng mới, vàthực hiện Câu lệnh Flashback table
Tạo bảng employees_test , với hàng chuyển động được kích hoạt, từ bảng employees củamẫu hr schema:
CREATE TABLE employees_test
AS SELECT * FROM employees;
Với điểm chuẩn1, danh sách những người lương dưới 2500:
Bật row movement cho bảng:
ALTER TABLE employees_test
ENABLE ROW MOVEMENT;
Ban hành tăng lương 10% cho những nhân viên có thu nhập dưới 2500:
Cập nhật employees_test
Trang 18FLASHBACK TABLE employees_test
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' minute);
Liệt kê những mức lương dưới 2500.Sau khi FLASHBACK TABLE đưa ra ở trên, danh sáchnày phải phù hợp với danh sách trong chuẩn đầu tiên
Trang 192200
Lấy một Bảng Dropped: Ví dụ Nếu bạn vô tình drop the pm.print_media table và muốn lấy
nó, khi đó ra tuyên bố như sau:
FLASHBACK TABLE print_media TO BEFORE DROP;
Nếu print_media tableđã được tạo ra trong pm schema, khi đó sử dụng mệnh đề RENAME TO
để đổi tên bảng lấy:
FLASHBACK TABLE print_media TO BEFORE DROP RENAME TO print_media_old; Nếu bạn biết rằng bảng employees đã được drop nhiều lần, và bạn muốn lấy phiên bản lâuđời nhất, sau đó truy vấn USER_RECYLEBIN table để xác định tên hệ thống tạo ra, và sau đó
sử dụng tên đó trong câu lệnh FLASHBACK TABLE (Tên hệ thống tạo ra trong cơ sở dữ liệucủa bạn sẽ khác biệt với những gì được hiển thị ở đây.)
SELECT object_name, droptime FROM user_recyclebin
WHERE original_name = 'PRINT_MEDIA';
Khi bạn xóa một bảng, cơ sở dữ liệu không loại bỏ các không gian liên kết với bảng ngay lậptức.Thay vào đó, bảng được đổi tên cùng với các đối tượng liên quan, nằm trong thùng rác.Hệthống thùng rác tạo ra tên đối tượng là duy nhất.Bạn có thể truy vấn các đối tượng trong thùngrác, cũng giống như bạn có thể truy vấn các đối tượng khác
Hoạt động flashback phục hồi lại bảng từ thùng rác Khi phục hồi bảng bị xóa, bạn có thể chỉđịnh tên gốc của bảng do người dùng quy định ban đầu hoặc tên hệ thống tạo ra
Trang 20Khi bạn drop một bảng, bảng và tất cả các đối tượng phụ thuộc của nó cùng được đặt vàothùng rác Tương tự như vậy, khi bạn thực hiện Flashback Drop, các đối tượng thường đượcphục hồi lại toàn bộ Khi bạn khôi phục lại một bảng từ thùng rác, các đối tượng phụ thuộc nhưtên của các indexes không được phục hồi như ban đầu, nó giữ lại tên của thùng rác đã tạo ra Cơ
sở dữ liệu Oracle phục hồi tất cả các index được xác định trên bảng trừ bitmap kết hợp vớiindex, và tất cả trigger và constraint được xác định trên bảng trừ các ràng buộc toàn vẹn thamchiếu đến các bảng tham chiếu khác
Một số đối tượng phụ thuộc như các index có thể đã bị thu hồi vì áp lực không gian Trongnhững trường hợp như vậy, các đối tượng phụ thuộc bị thu hồi không thể phục hồi từ thùng rác
4.2.2 Điều kiện tiên quyết
Danh sách sau đây tóm tắt các quyền người dùng yêu cầu cho các hoạt động liên quan đếnFlashback Drop và thùng rác:
DROP
Với người sử dụng có quyền drop trên đối tượng có thể drop các đối tượng, đặt nó vào thùngrác
FLASHBACK TABLE TO BEFORE DROP
Các quyền của lệnh này được gắn liền với các quyền của drop.Đó là, người dùng nào có thểdrop đối tượng thì cũng có thể thực hiện Flashback Drop để phục hồi các đối tượng bị drop
từ thùng rác
PURGE(Loại bỏ)
Các quyền Purge của thùng rác được gắn liền với các quyền drop Người dùng nào có quyềnDROP TABLE hoặc Drop Any TABLE có thể purge các đối tượng từ thùng rác
SELECT for objects in the Recycle Bin
Người sử dụng phải có quyền SELECT và FLASHBACK trên đối tượng trong thùng rác đểtruy vấn các đối tượng trong thùng rác.Bất kỳ người dùng nào có quyền SELECT trên đốitượng trước khi nó bị xóa tiếp tục có quyền SELECT trên các đối tượng trong thùngrác.Người dùng phải có quyền FLASHBACK để truy vấn các đối tượng trong thùng rác vìđây là những đối tượng từ trạng thái quá khứ của cơ sở dữ liệu
Đối tượng phải đáp ứng các điều kiện sau đây để có đủ điều kiện để phục hồi từ thùng rác:
Thùng rác chỉ có hiệu lực cho không hệ thống, được quản lý trong phạm vi của tablespaces.Nếu một bảng không hệ thống, được quản lý trong phạm vi tablespace, nhưng một hoặc nhiều
Trang 21đối tượng phụ thuộc vào segment trong từ điển quản lý tablespace, sau đó các đối tượng đượcbảo vệ bởi thùng rác.
Bảng có FGA( Fine Grained Auditing: thực hiện lần theo vết của việc truy cập hệ thống, giám sát truy cập, giám sát người dùng truy cập và thay đổi hệ thống FGA cho phép ghi lại các lệnh sql
ma người dùng tác động vào hệ thống Ở phiên bản 10g, FGA mở rộng ra giám sát các lệnh DLL: insert, update, delete, select, execute) và Virtual Private Database (VPD: Công nghệ VPD có thể giới hạn quyền truy cập bằng cách chọn một số hàng của cột ) các quyền hạn xác định trên bảng không được bảo vệ bởi thùng rác
Phân vùng bảng index được sắp xếp không được bảo vệ bởi thùng rác
Bảng không phải đã bị purge hoặc là bởi một người dùng hay bởi Cơ sở dữ liệu oracle bởi vì hoạt động thu hồi không gian
Sử dụng lệnh FLASHBACK TABLE TO BEFORE DROP để phục hồi các đối tượng từ thùng rác Bạn có thể chỉ định tên của bảng trong thùng rác hoặc tên bảng ban đầu
Phần này giả định một kịch bản trong đó bạn xóa bảng sai.Nhiều lần bạn đã được yêu cầu xóa các bảng trong cơ sở dữ liệu thử nghiệm, nhưng trong trường hợp này, bạn kết nối với cơ sở dữ liệu sản xuất thay vì xóa hr.employee_demo.Bạn quyết định sử dụng FLASHBACK TABLE để phục hồicác đối tượng bị xóa
Phục hồi bảng đã xóa
Kết nối SQL * Plus đến cơ sở dữ liệu mục tiêu và nhận tên của bảng bị bỏ trong thùng rác
Bạn có thể sử dụng SQL * Plus RecycleBin Show lệnh như sau:
SHOW RECYCLEBIN;
ORIGINAL NAME RECYCLEBIN NAME TYPE DROP TIME
- - -
-EMPLOYEE_DEMO BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0 TABLE 2005-04-11:17:08:54
Cột Original Name cho biết tên ban đầu của đối tượng, trong khi cột RecycleBin NAME cho biết tên của đối tượng tồn tại trong thùng rác
Ngoài ra, bạn có thể truy vấn USER_RECYCLEBIN hoặc DBA_RECYCLEBIN để có được tên bảng Ví dụ sau đây truy vấn các View để xác định tên ban đầu của các đối tượng bị xóa:
SELECT object_name AS recycle_name, original_name, type
FROM recyclebin;
Trang 22RECYCLE_NAME ORIGINAL_NAME TYPE
-
-BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0 EMPLOYEE_DEMO TABLE
BIN$JKS983293M1dsab4gsz/I249==$0 I_EMP_DEMO INDEX
Nếu bạn có kế hoạch để tự khôi phục lại tên gốc cho các đối tượng phụ thuộc thì đảm bảo rằng bạn cần chú ý trong mỗi đối tượng phụ thuộc của hệ thống tạo ra tên thùng rác trước khi bạn khôi phục lại các bảng
4.2.3 Lưu ý
Nếu bạn có các đặc quyền cần thiết thì bạn cũng có thể sử dụng Flashback Query trên bảng trong thùng rác, nhưng chỉ bằng cách sử dụng tên thùng rác thay vì bảng tên ban đầu.Bạn không thể sử dụng câu lệnh DML hoặc DDL trên các đối tượng trong thùng rác
Ngoài ra, bạn có thể sử dụng tên ban đầu của bảng:
FLASHBACK TABLE HR.EMPLOYEE_DEMO TO BEFORE DROP;
Bạn cũng có thể gán tên mới cho bảng được phục hồi hồi bằng cách gán tên mới với lệnh RENAME
TO Ví dụ:
FLASHBACK TABLE "BIN$KSD8DB9L345KLA==$0" TO BEFORE DROP
RENAME TO hr.emp_demo;
Xác thực rằng mọi đối tượng phụ thuộc lưu trữ trong hệ thống tạo ra tên thùng rác.
Các truy vấn sau đây xác định tên các index được phục hồi của bảng hr.employee_demo