เราสามารถกู้ความผิดพลาดในการ 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 กลับคืนมาแล้ว
ไม่มีความคิดเห็น:
แสดงความคิดเห็น