Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Oracle database - Using flashback to rollback a truncate table

ƠS : RHEL4.7
ORACLE database 10.2.0.1.0
1.Requirements for Enabling Flashback Database

Your database must be running in ARCHIVELOG mode, because archived logs are used in the Flashback Database operation.
You must have a flash recovery area enabled, because flashback logs can only be stored in the flash recovery area.
For Real Application Clusters databases, the flash recovery area must be stored in a clustered file system or in ASM.

2.Enabling Logging for Flashback Database
code : 
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440;
System altered.
SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ARCHIVE LOG LIST;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     13
Next log sequence to archive   15
Current log sequence           15

3.TEST CASE
Code :
SQL> create table scott.sampleobject as select * from all_objects;
Table created.
SQL> select count(*) from scott.sampleobject;
  COUNT(*)
----------
     49317

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     609189
SQL> truncate table scott.sampleobject;
Table truncated.
SQL> select count(*) from scott.sampleobject;
  COUNT(*)
----------
         0
SQL> create table scott.sample as select * from user_objects;

Table created.

SQL> select count(*) from scott.sample;

  COUNT(*)
----------
     22905

Determining the earliest SCN in the flashback database window can be determined
SQL> select oldest_flashback_scn from v$flashback_database_log;

OLDEST_FLASHBACK_SCN
--------------------
              608303

flashback và open database read only
Code :
SQL> shutdow immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  1218316 bytes
Variable Size              88082676 bytes
Database Buffers           75497472 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> flashback database to scn [color=#FF0000]609189[/color];
Flashback complete.
SQL> alter database open read only;
Database altered.
SQL> select count(*) from scott.sampleobject;
  COUNT(*)
----------
     49317

export table that was truncated
Code :
[oracle@Linux1 ~]$ cd /u02
[oracle@Linux1 u02]$ ls
oradata  sqlnet.log
[oracle@Linux1 u02]$ exp file=/u02/scott.dmp tables=sampleobject;

Export: Release 10.2.0.1.0 - Production on Thu May 27 20:42:47 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Username: scott
Password:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in UTF8 character set and UTF8 NCHAR character set

About to export specified tables via Conventional Path ...
. . exporting table                   SAMPLEOBJECT      49317 rows exported
Export terminated successfully without warnings.

Recover database
Code :
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                  1218316 bytes
Variable Size              88082676 bytes
Database Buffers           75497472 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select count(*) from scott.sample;
  COUNT(*)
----------
     22905
SQL> select count(*) from scott.sampleobject;
  COUNT(*)
----------
         0

drop table that was truncated and import data;
Code : 

[oracle@Linux1 u02]$ imp file=/u02/scott.dmp tables=sampleobject

Import: Release 10.2.0.1.0 - Production on Thu May 27 20:58:32 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Username: scott
Password:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.02.01 via conventional path
import done in UTF8 character set and UTF8 NCHAR character set
. importing SCOTT's objects into SCOTT
. importing SCOTT's objects into SCOTT
. . importing table                 "SAMPLEOBJECT"      49317 rows imported
Import terminated successfully without warnings.
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Bài viết này hay tuyệt. Trước nay, không biết nên cứ nghĩ rằng Truncate không thể FLASH_BACK được.
Bác Sơn có thể chỉ giáo cái nguyên lý của những thao tác trên để những "con gà" như em được mở mang tư duy không? Được thế em cảm ơn bác vạn phần.
0 Lượt thích

Cái này là FLASHBACK DATABASE nên có khả năng Flashback lại table đã Truncate, 
phân biệt với FLASHBACK TABLE !
0 Lượt thích

Chỉ có từ 10g trở lên
Và cái bạn nói đến, "Truncate không thể FLASH_BACK được", đó là Flashback Query (có từ 9i trở lên).
0 Lượt thích

flashback thì đọc qua bài viết này thì chỉ thấy có flashback table, ở 9i thì query còn flashback database chưa thấy bài viết nào mô tả trường hợp này cả.
Anh tác nghiệp thử một cái flashback database chia sẻ cho cácđi.
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng