วันจันทร์ที่ 20 เมษายน พ.ศ. 2558

กู้ Tablespace ที่ถูก drop ด้วย Flashback Database

เราสามารถกู้ความผิดพลาดในการ drop tablespace ได้ด้วย flashback database ตามนี้

SQL> alter database flashback on;

Database altered.

SQL> alter database open;

Database altered.

SQL> create tablespace kitti_tbs datafile '/u01/app/oracle/oradata/ORACLE/kitti01.dbf' size 10m;

Tablespace created.

SQL> create table kitti_tbl (id number) tablespace kitti_tbs;

Table created.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     471727

SQL> drop tablespace kitti_tbs including contents and datafiles;

Tablespace dropped.

SQL> shutdown immediate

SQL> startup mount

SQL> flashback database to scn 471727;

Flashback complete.

--ขั้นตอนนี้ต้องเช็ค datafile ก่อนเพราะมันจะสร้างมาให้ในชื่อแปลกๆ

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORACLE/system01.dbf
/u01/app/oracle/oradata/ORACLE/sysaux01.dbf
/u01/app/oracle/oradata/ORACLE/undotbs01.dbf
/u01/app/oracle/oradata/ORACLE/users01.dbf
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00005      <---- ชื่อแปลกๆที่มันสร้างมาให้

--สร้างใหม่ไปไว้ path เดิมโดยลอกไฟล์ที่มันสร้างมาให้

SQL> alter database create datafile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00005' as '/u01/app/oracle/oradata/ORACLE/kitti01.dbf';

Database altered.

--สั่งให้ datafile online

SQL> alter tablespace kitti_tbs datafile online;

Tablespace altered.

--Flashback ซ้ำเข้าไปอีกที

SQL> flashback database to scn 471727;


Flashback complete.

--เปิด database ด้วย resetlogs option

SQL> alter database open resetlogs;


Database altered.

--ลอง query ดู tablespace

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

KITTI_TBS   <---ได้ tablespace กลับคืนมาแล้ว

--ลอง query ดู table ของเรา

SQL> select * from kitti_tbl;


no rows selected

ได้ table กลับคืนมาแล้ว

ไม่มีความคิดเห็น:

แสดงความคิดเห็น