ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KINH TẾ- LUẬT
KHOA 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:
Mục lục
Mục lục 2
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.2.Oracle Flashback Query 4
3.2.1.Mục đích 4
3.3.2. Đặc điểm 7
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.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
Phầ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á quan
trọ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ông
tin 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ưu
trữ 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ác
biệ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ác
lỗ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 khi
Flashback, 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ới
Flashback, 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ục
hồ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ủa
Oracle. 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ệu
trự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ững
tí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 ứng
dụng thực tiện của nó nhóm đã quyết định chọn đề tài “ Kĩ Thuật Flashback Trong Oracle”.
1
Phầ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úp
ngườ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 đổi
gâ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ị ảnh
hưở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
2
Phầ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ột
hoặ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ồn
tạ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 khi
các phiên bản dòng được tạo ra. Cột này xác định thời
gian 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 Table
hoặ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_ENDSCN
VERSIONS_ENDTIME
SCN hoặc TIMESTAMP khi các phiên bản dòng kết
thúc.
Nếu giá trị cột này là NULL, thì phiên bản dòng hiện
tại đang ở thời điểm truy vấn hoặc dòng đã bị
DELETE.
VERSIONS_XID Định danh của giao dịch đã tạo ra phiên bản hàng.
VERSIONS_OPERATIO
N
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 đã được
INSERT,DELETE, hoặc UPDATE, có nghĩa là dòng
3
sau 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, Oracle
Flashback Version Query có thể ghi một hoạt động
UPDATE 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ột
VERSIONS_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úc
VERSIONS_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.
4
Cá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ằng
cá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ôm
trướ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ằng
cá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ửa
chữ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ảng
Employees, 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 9h30
sá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')
5
WHERE 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 nhau
cho 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ảng
nà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 definition
language – 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ác
câ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ên
cạ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 trong
câ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 va
MINUS, để 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 EMPLOYEES
INSERT INTO employees
(SELECT * FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE)
)
6
MINUS SELECT * FROM employees);
3.3.Oracle Flashback Transaction Query
3.3.1. Mục đích
Thông qua Flashback Transaction query chúng ta có thể lấy được thông tin về transaction, kể
cả code sql
3.3.2. Đặc điểm
FLASHBACK_TRANSACTION_QUERY
Chúng ta nhận được những thông tin sau từ Flashback Transaction Query
1. XID
2.STAR_SCN
3.START_TIMESTAMP
4.COMMIT_SCN
5.COMMIT_TIMESTAMP
6.LOGON_USER
7.UNDO_CHANGE#
8.OPERATION
9.TABLE_NAME
10.TABLE_OWNER
11.ROW_ID
12. UNDO_SQL
XID là ID của Transaction, ta có thể nhận XID từ FLASBACK VERSION QUERY
Ví dụ:
Do nhầm lẫn mà user Scott xóa một dòng từ bảng TAJ và bây giờ người sử dụng hệ thống
muốn biết chính xác Transaction cho dòng đã được xóa.
Đầu tiên kiểm tra TRANSACTION_ID của dòng đã xóa thông qua FLASHBACK VERSION
QUERY
select versions_xid
from scott.taj
versions between timestamp
to_timestamp ( '2008-05-17 09:18:00','YYYY-MM-DD HH24:MI:SS') and
7
to_timestamp ( '2008-05-17 09:22:00','YYYY-MM-DD HH24:MI:SS');
VERSIONS_XID
050017007C070000
SQL> select logon_user,operation,undo_sql
from flashback_transaction_query
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;
SCN_TO_TIMESTAMP('2407151')
17-MAY-08 09.18.20.000000000 AM
Commit cuối cùng thì được thực hiện vào lúc 17-may-08 09:18 AM.
8
select undo_sql
from flashback_transaction_query
where
COMMIT_TIMESTAMP >= to_timestamp('17-MAY-05 09:18:00','DD-MON-RR HH:MI:SS')
and TABLE_NAME = 'TAJ';
UNDO_SQL
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
9
Phầ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ôi
phụ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.
*Lưu ý:
Oracle khuyến cáo rằng bạn chạy cơ sở dữ liệu của bạn ở chế độ tự động hoàn tác bằng cách để lại
AUTO UNDO_MANAGEMENT tham số khởi tạo thiết lập mặc định.Ngoài ra, thiết lập các tham
số khởi tạo UNDO_RETENTION một khoảng thời gian đủ lớn để bao gồm các dữ liệu cũ nhất mà
bạn dự kiến cần.
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
10
4.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.
4.1.5. Đặc điểm
Table
Chỉ định tên của một hoặc nhiều bảng có chứa dữ liệu bạn muốn trở lại một phiên bản cũ.
Hạn chế trong Flashback Tables là tùy thuộc vào các hạn chế sau đây:
Flashback table là không hợp lệ cho các đối tượng loại sau đây: bảng là một phần của một
cụm, materialized views, Advanced Queuing (AQ) tables, từ điển dữ liệu bảng tĩnh, các bảng hệ
thống, bảng điều khiển từ xa, bảng đối tượng, các bảng lồng nhau, hoặc bảng cá nhân phân vùng
hoặc subpartitions.
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 SCN
hoặ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, di
chuyể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
11
cluster, 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ân
vùng phạm vi).
4.1.6.Sử dụng một số mệnh đề trong Flashback table
Mệnh đề TO SCN
Chỉ số thay đổi hệ thống (SCN) tương ứng với các điểm trong thời gian mà bạn muốn trả lại
bảng.Expr phải đánh giá một số đại diện cho một SCN hợp lệ.
Mệnh đề TO TIMESTAMP
Chỉ định một giá trị Timestamp tương ứng với điểm trong thời gian mà bạn muốn trả lại
bảng.Expr phải đánh giá một Timestamp hợp lệ trong quá khứ.Bảng sẽ được quay trở lại trong
vòng khoảng 3 giây của các Timestamp quy định.
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ên
bảng trong hoạt động Bảng Flashback và sau đó reenables chúng sau khi hoạt động Bảng
Flashback đã 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 đề ENABLE
TRIGGERS.
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 đối
tượ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 SYSTEM
tablespace.
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ống
tạ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;
12
SELECT * 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ếu
bạ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ấy
cá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
từ thùng rác.
Ghi chú Flashing Back Dropped Tables các ghi chú sau đây áp dụng cho Flashing back
dropped tables:
Cơ sở dữ liệu Oracle lấy tất cả các chỉ số được xác định trên bảng lấy ra từ thùng rác, ngoại
trừ cho bitmap tham gia, chỉ số chỉ mục miền. (Bitmap tham gia chỉ số và chỉ số miền không
được đặt trong thùng rác trong một DROP TABLE hoạt động, do đó không thể được lấy ra).
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ác
rà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ện
FLASHBACK 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ảm
như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ôi
phụ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ếu
phá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.
13
Ví 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ủa
mẫ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:
SELECT salary
FROM employees_test
WHERE salary < 2500;
SALARY
2400
2200
2100
2400
2200
Lưu ý:
Để cho phép thời gian cho SCN để truyền cho bảng vẽ bản đồ được sử dụng bởi
FLASHBACK TABLE câu lệnh, chờ tối thiểu là 5 phút trước khi thực hiện báo cáo sau đây.
Chờ đợi này sẽ không cần thiết nếu một bảng đã tồn tại trước đó đã được sử dụng trong ví dụ
này.
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
14
UPDATE employees_test
SET salary = salary * 1.1
WHERE salary < 2500;
5 rows updated.
COMMIT;.
Như một điểm chuẩn thứ hai, danh sách những tiền lương vẫn còn dưới 2500 sau khi tăng 10%:
SELECT salary
FROM employees_test
WHERE salary < 2500;
SALARY
2420
2310
2420
Khôi phục lại trạng thái các bảng employees_test trước thời gian hệ thống hiện tại.Được sử
dụng thực tế trong thời gian 1 phút để bạn có thể kiểm tra điều này qua một loạt các ví dụ một
cách nhanh chóng.Trong những trường hợp bình thường, một khoảng thời gian lớn hơn nhiều đã
trôi qua.
FLASHBACK 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ách
này phải phù hợp với danh sách trong chuẩn đầu tiên.
SELECT salary
FROM employees_test
WHERE salary < 2500;
SALARY
2400
2200
2100
2400
15
2200
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ệu
củ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';
OBJECT_NAME DROPTIME
RB$$45703$TABLE$0 2003-06-03:15:26:39
RB$$45704$TABLE$0 2003-06-12:12:27:27
RB$$45705$TABLE$0 2003-07-08:09:28:01
4.2. Flashback Drop
Phần này giải thích làm thế nào để khôi phục lại các đối tượng từ thùng rác với lệnh
FLASHBACK TABLE TO BEFORE DROP.
4.2.1. Mục đích
Flashback Drop đảo ngược những ảnh hưởng của thao tác DROP TABLE.Flashback Drop
nhanh hơn so với cơ chế phục hồi khác có thể được sử dụng, chẳng hạn như point- in-time
recovery, và không dẫn đến thời gian chết hoặc mất các giao dịch mới.
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ập
tứ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ùng
rá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.
16
Khi 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ào
thù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 được
phụ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ới
index, 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 tham
chiế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. Trong
nhữ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 đến
Flashback 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ùng
rá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ền
DROP 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 đối
tượ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ùng
rá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
17
đối tượng phụ thuộc vào segment trong từ điển quản lý tablespace, sau đó các đối tượng được
bả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ồi cá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;
18
RECYCLE_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.
Phục hồi bảng bị xoá
Sử dụng lệnh FLASHBACK TABLE TO BEFORE DROP. Ví dụ sau đây khôi phục bảng BIN $
gk3lsj/3akk5hg3j2lkl5j3d == $ 0, thay đổi tên của nó thành hr.employee_demo.
FLASHBACK TABLE "BIN$gk3lsj/3akk5hg3j2lkl5j3d==$0" TO BEFORE
DROP;
Tên bảng được kèm theo trong ngoặc kép vì khả năng trong các ký tự đặc biệt xuất hiện trong tên
thùng rác của đối tượng
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
SELECT INDEX_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'EMPLOYEE_DEMO';
INDEX_NAME
19
BIN$JKS983293M1dsab4gsz/I249==$0
Phục hồi lại tên các index thành tên ban đầu của chúng.
Lệnh sau đây đặt lại tên các index thành tên gốc của i_emp_demo:
ALTER INDEX "BIN$JKS983293M1dsab4gsz/I249==$0" RENAME TO I_EMP_DEMO;
Nếu bảng được phục hồi có ràng buộc tham chiếu trước khi nó bị đưa vào thùng rác, sau đó tạo lại
chúng.
Bước này phải tự thực hiện bởi vì thùng rác không bảo toàn ràng buộc tham chiếu trên một
bảng.
Retrieving Objects When Multiple Objects Share the Same Original Name
Bạn có thể tạo ra, và sau đó xóa, đối tượng với cùng tên gốc.Tất cả các đối tượng bị xóa được lưu
trữ vào thùng rác.Ví dụ, hãy xem xét các câu lệnh SQL trong ví dụ sau đây.
Ví dụ: Dropping Multiple Objects with the Same Name
CREATE TABLE temp_employees ( columns ); # temp_employees version 1
DROP TABLE temp_employees;
CREATE TABLE temp_employees ( columns ); # temp_employees version 2
DROP TABLE temp_employees;
CREATE TABLE temp_employees ( columns ); # temp_employees version 3
DROP TABLE temp_employees;
Trong ví dụ trên, mỗi bảng temp_employees được gán một tên duy nhất trong thùng rác khi nó bị
xóa. Bạn có thể sử dụng lệnh FLASHBACK TABLE TO BEFORE DROP với tên gọi ban đầu
của bảng, như thể hiện trong ví dụ này:
FLASHBACK TABLE temp_employees TO BEFORE DROP;
Bảng gần nhất bị xóa với tên ban đầu được khôi phục từ thùng rác, với tên ban đầu của nó.Ví dụ 2
cho thấy việc khôi phục từ thùng rác của cả ba bảng từ các ví dụ trước bị xóa temp_employees, với
mỗi bảng chỉ định một tên mới.
Ví dụ 2:
FLASHBACK TABLE temp_employees TO BEFORE DROP
RENAME TO temp_employees_VERSION_3;
FLASHBACK TABLE temp_employees TO BEFORE DROP
RENAME TO temp_employees_VERSION_2;
20
FLASHBACK TABLE temp_employees TO BEFORE DROP
RENAME TO temp_employees_VERSION_1;
Bởi vì tên gốc trong FLASHBACK TABLE đề cập đến bảng bị xóa gần nhất với tên này, bảng cuối
cùng bị xóa được phục hồi đầu tiên.
Bạn cũng có thể khôi phục một số bảng từ thùng rác, bất kể xung đột nào giữa các tên gốc, bằng
cách sử dụng tên thùng rác duy nhất của bảng. Ví dụ, giả sử rằng bạn truy vấn thùng rác như sau (ví
dụ đầu ra):
SELECT object_name, original_name, createtime
FROM recyclebin;
OBJECT_NAME ORIGINAL_NAME CREATETIME
BIN$yrMKlZaLMhfgNAgAIMenRA==$0 TEMP_EMPLOYEES 2007-02-05:21:05:52
BIN$yrMKlZaVMhfgNAgAIMenRA==$0 TEMP_EMPLOYEES 2007-02-05:21:25:13
BIN$yrMKlZaQMhfgNAgAIMenRA==$0 TEMP_EMPLOYEES 2007-02-05:22:05:53
Bạn có thể sử dụng lệnh sau đây để phục hồi lại bảng:
FLASHBACK TABLE BIN$yrMKlZaVMhfgNAgAIMenRA==$0 TO BEFORE DROP;
4.3. Flashback Database
4.3.1. Mục đích
Sử dụng FLASHBACK DATABASE để khôi phục lại cơ sở dữ liệu tại một thời gian, SCN, hoặc số
thứ tự đăng nhập.
tập tin dữ liệu tồn tại khi bạn chạy lệnh. Flashback có thể sửa chữa thất bại logic, nhưng không phải
là thất bại về vật lý. Vì vậy, bạn không thể sử dụng các lệnh để phục hồi từ thất bại đĩa hoặc vô tình
xóa các tập tin dữ liệu.
FLASHBACK DATABASE thường là nhanh hơn một RESTORE hoạt động tiếp theo point-in-
time , vì thời gian cần thiết để thực hiệnFLASHBACK DATABASE phụ thuộc vào số lượng các
thay đổi được thực hiện vào cơ sở dữ liệu kể từ thời gian hồi tưởng mong muốn. Mặt khác, thời gian
cần thiết để làm một điểm phục hồi trong thời gian truyền thống từ các bản sao lưu phục hồi phụ
thuộc vào kích thước của cơ sở dữ liệu.
Flashback Cơ sở dữ liệu cũng có một số sử dụng trong một môi trường Data Guard.
4.3.2. Điều kiện tiên quyết
Bạn có thể chạy lệnh này từ dấu nhắc RMAN hoặc từ trong một lệnh RUN.
21
RMAN phải được kết nối như là TARGET vào một cơ sở dữ liệu và từ phiên bản 10g và các phiên
bản sau. Cơ sở dữ liệu mục tiêu phải được gắn kết với một tập tin điều khiển hiện tại, nghĩa là, các
tập tin điều khiển không thể là một bản sao lưu hoặc tái tạo. Cơ sở dữ liệu phải chạy trong chế độ
ARCHIVELOG.
Bạn không thể sử dụng FLASHBACK DATABASE để quay trở lại một điểm trong thời gian trước
khi khôi phục hoặc tái tạo của một tập tin điều khiển. Nếu các tập tin cơ sở dữ liệu kiểm soát được
khôi phục từ bản sao lưu hoặc tái tạo, khi đó tất cả các thông tin đăng nhập hiện tại bị loại bỏ.
Khu vực phục hồi nhanh chóng phải được cấu hình để cho phép thực hiện khôi phục. Bản ghi
Flashback được lưu trữ trong Oracle để quản lý các tập tin trong khu vực phục hồi nhanh chóng và
không thể được tạo ra nếu không có khu vực phục hồi nhanh chóng được cấu hình. Bạn phải cho
phép khôi phục đăng nhập trước thời gian mục tiêu để hồi tưởng bằng cách sử dụng câu lệnh
SQL ALTER DATABASE FLASHBACK ON . QueryV $ DATABASE.FLASHBACK_ON để
xem thực hiện khôi phục đã được kích hoạt.
Cơ sở dữ liệu phải chứa tablespaces không trực tuyến vì chức năng phục hồi đã được vô hiệu hóa
với các câu lệnh SQL ALTER TABLESPACE FLASHBACK OFF .
4.3.3.Ghi chú
Một hoạt động Flashback cơ sở dữ liệu áp dụng cho toàn bộ cơ sở dữ liệu. Bạn không thể khôi phục
lại tablespaces cá nhân. Một hoạt động Flashback cơ sở dữ liệu là tương tự như phục hồi một điểm
trong thời gian cơ sở dữ liệu (DBPITR) thực hiện với Recocover , nhưng RMAN sử dụng flashback
log lùi lại thay đổi đến một điểm trước thời gian mục tiêu hoặc SCN. RMAN tự động khôi phục lại
từ bản sao lưu bất kỳ tập tin redo log, lưu trữ là cần thiết và phục hồi cơ sở dữ liệu để làm cho nó
phù hợp. RMAN không bao giờ khôi phục lại dữ liệu cho các tablespaces tạm thời.
SCN sớm nhất có thể được sử dụng cho một hoạt động cơ sở dữ liệu Flashback phụ thuộc vào các
thiết lập của DB_FLASHBACK_RETENTION_TARGET khởi tạo tham số, và trên thực tế việc lưu
giữ các bản ghi hồi tưởng đĩa đã được cho phép. Xem SCN cơ sở dữ liệu hiện tại trongV $
DATABASE.CURRENT_SCN .
Ảnh hưởng của hoạt động NOLOGGING trên cơ sở dữ liệu Flashback
FLASHBACK DATABASE với một thời gian mục tiêu nào đó một NOLOGGING hoạt động đã
được tiến hành, ngăn chặn hư hỏng có khả năng trong các đối tượng cơ sở dữ liệu và các file dữ liệu
bị ảnh hưởng bởi các hoạt động NOLOGGING . Ví dụ, giả sử rằng bạn INSERT trên đường dẫn
trực tiếp hoạt động trong chế độ NOLOGGING và hoạt động chạy 9:00-09:15 ngày 03 tháng
tư. Nếu sau đó bạn sử dụng Flashback cơ sở dữ liệu để trở lại 09:07 trong ngày này, khi đó các đối
22
tượng và tập tin dữ liệu được cập nhật bởi các đường dẫn trực tiếp INSERT có thể bị để lại với hư
hỏng khối sau khi Flashback Cơ sở dữ liệu hoàn tất.
Nếu có thể, tránh sử dụng FLASHBACK DATABASE với một thời gian mục tiêu hoặc SCN trùng
với một NOLOGGING hoạt động. Ngoài ra, thực hiện một sao lưu đầy đủ hoặc tăng dần của các tập
tin dữ liệu bị ảnh hưởng ngay lập tức sau khi bất kỳ NOLOGGING hoạt động để đảm bảo khả năng
thu hồi point-in-time khi hoạt động. Nếu bạn muốn sử dụng FLASHBACK DATABASE để quay
trở lại một điểm trong thời gian trong quá trình hoạt động như một đường dẫn trực tiếp INSERT ,khi
đó xem xét việc thực hiện các hoạt động trong chế độ LOGGING.
Ảnh hưởng của thay đổi trạng thái dữ liệu tập tin trên cơ sở dữ liệu Flashback
Lệnh FLASHBACK DATABASE không bắt đầu sửa đổi các cơ sở dữ liệu cho đến khi nó đã chắc
chắn rằng nó có tất cả các tập tin và tài nguyên mà nó cần. Một hoạt động Flashback cơ sở dữ liệu
không bao giờ thất bại do thiếu các tập tin dữ liệu, làm lại các tập tin đăng nhập, hoặc các bản ghi
hồi tưởng.
Nếu một tập tin dữ liệu đã thay đổi trạng thái giữa các SCN hiện tại và SCN mục tiêu của hồi tưởng,
khi đó lệnh FLASHBACK DATABASE hoạt động khác nhau tùy thuộc vào bản chất của sự thay
đổi trạng thái. Tham khảo Bảng 2-8 để biết thêm chi tiết.
Bảng 2-8 FLASHBACK DATABASE Phản ứng để thay đổi tình trạng tập tin dữ liệu
Nếu hoạt động này
tập tin dữ liệu xảy ra
trong cửa sổ hồi
tưởng Sau khi FLASHBACK DATABASE
Thêm Loại bỏ các bản ghi tập tin dữ liệu từ các tập tin điều khiển.
Giảm Thêm các tập tin dữ liệu để kiểm soát các tập tin, nhưng đánh dấu nó như
offline và không phục hồi nó trở lại. Khi đó, bạn có thể khôi phục và phục
hồi các tập tin dữ liệu cùng một lúc hoặc SCN.
Đổi tên Bỏ qua việc đổi tên. Các tập tin dữ liệu vẫn giữ tên hiện tại.
Thay đổi kích thước Có thể thất bại. Bạn có thể lấy các tập tin dữ liệu offline và sau đó chạy
lại lệnh FLASHBACK DATABASE . Các tập tin dữ liệu không quay trở
lại. Khi đó, bạn có thể khôi phục và phục hồi các tập tin dữ liệu cùng một
lúc hoặc SCN.
Thực hiện offline Bỏ qua các hoạt động. Các tập tin dữ liệu vẫn giữ được tình trạng hiện tại
23