当前位置:网站首页>Use package FY in Oracle_ Recover_ Data. PCK to recover the table of truncate misoperation
Use package FY in Oracle_ Recover_ Data. PCK to recover the table of truncate misoperation
2022-07-06 23:53:00 【Hua Weiyun】
One 、 brief introduction
The content sorted out before :http://blog.itpub.net/26736162/viewspace-2082965/
Misoperation execution truncate There are many ways to recover after , Here again fy_recover_data package , By master Fuyunca Development . The package uses pure plsql Statement recovery is truncate Lost watch , Simple operation , For the contents of the package, please refer to the appendix at the end of this article .
Fy_Recover_Data It's using Oracle Table scanning mechanism 、 Data grafting mechanism recovery TRUNCATE Or a toolkit to corrupt data . From pure PLSQL To write , Schematic diagram is as follows :
Two 、 Introduction to the experimental environment
project | db |
---|---|
db type | Single instance |
db version | 19.3.0.0 |
db Storage | FS |
host IP Address /hosts To configure | 192.168.66.35 |
OS Version and kernel edition | CentOS 7.6 |
Archiving mode | Archive Mode |
ORACLE_SID | lhrsdb |
3、 ... and 、 Experimental code
-- Prepare the data set timing on;set serveroutput on;create table lhr.LHRTB_210702 as SELECT * FROM dba_objects;SELECT COUNT(1) FROM lhr.LHRTB_210702;INSERT INTO lhr.LHRTB_210702 SELECT * FROM lhr.LHRTB_210702;INSERT INTO lhr.LHRTB_210702 SELECT * FROM lhr.LHRTB_210702;commit;SELECT COUNT(1) FROM lhr.LHRTB_210702;SELECT d.BYTES/1024/1024 FROM dba_segments d WHERE d.segment_name ='LHRTB_210702';truncate table lhr.LHRTB_210702;SELECT COUNT(1) FROM lhr.LHRTB_210702;-- The data has been truncate It fell off , Next, let's recover @/tmp/FY_Recover_Data.pckexec fy_recover_data.recover_truncated_table('LHR','LHRTB_210702');SELECT COUNT(1) FROM lhr.LHRTB_210702$$;alter table lhr.LHRTB_210702 nologging;insert /*+append*/ into lhr.LHRTB_210702 select * from lhr.LHRTB_210702$$;commit;alter table lhr.LHRTB_210702 logging;SELECT COUNT(1) FROM lhr.LHRTB_210702;-- Clean up the data drop tablespace FY_REC_DATA including contents and datafiles;drop tablespace FY_RST_DATA including contents and datafiles;
Four 、 Experimental process
4.1、 Prepare the data
Microsoft Windows [ edition 10.0.17134.765](c) 2018 Microsoft Corporation. All rights reserved .C:\Users\lhrxxt>sqlplus sys/lhr@192.168.66.35:11521/lhrsdb as sysdbaSQL*Plus: Release 12.1.0.2.0 Production on Fri Jul 2 16:00:36 2021Copyright (c) 1982, 2014, Oracle. All rights reserved.Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - ProductionSYS@192.168.66.35:11521/lhrsdb> set timing on;SYS@192.168.66.35:11521/lhrsdb> set serveroutput on;SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> select * from v$version;BANNER BANNER_FULL BANNER_LEGACY CON_ID-------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production 0 Version 19.3.0.0.0Elapsed: 00:00:00.15SYS@192.168.66.35:11521/lhrsdb> create user lhr identified by lhr;User created.Elapsed: 00:00:00.26SYS@192.168.66.35:11521/lhrsdb> grant dba to lhr;Grant succeeded.Elapsed: 00:00:00.12SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> create table lhr.LHRTB_210702 as SELECT * FROM dba_objects;Table created.Elapsed: 00:00:01.83SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> INSERT INTO lhr.LHRTB_210702 SELECT * FROM lhr.LHRTB_210702;72690 rows created.Elapsed: 00:00:00.67SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> INSERT INTO lhr.LHRTB_210702 SELECT * FROM lhr.LHRTB_210702;145380 rows created.Elapsed: 00:00:00.91SYS@192.168.66.35:11521/lhrsdb> commit;Commit complete.Elapsed: 00:00:00.11SYS@192.168.66.35:11521/lhrsdb> SELECT COUNT(1) FROM lhr.LHRTB_210702; COUNT(1)---------- 290760Elapsed: 00:00:00.19SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> SELECT d.BYTES/1024/1024 FROM dba_segments d WHERE d.segment_name ='LHRTB_210702';D.BYTES/1024/1024----------------- 45Elapsed: 00:00:00.60
4.2、 Perform misoperation
SYS@192.168.66.35:11521/lhrsdb> truncate table lhr.LHRTB_210702;Table truncated.Elapsed: 00:00:00.59SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> SELECT COUNT(1) FROM lhr.LHRTB_210702; COUNT(1)---------- 0Elapsed: 00:00:00.18
4.3、 Start recovery
SYS@192.168.66.35:11521/lhrsdb> @D:\FY_Recover_Data.pckPackage created.Elapsed: 00:00:00.29Package body created.Elapsed: 00:00:00.67SYS@192.168.66.35:11521/lhrsdb> select * from v$tablespace; TS# NAME INC BIG FLA ENC CON_ID---------- ------------------------------ --- --- --- --- ---------- 1 SYSAUX YES NO YES 0 0 SYSTEM YES NO YES 0 2 UNDOTBS1 YES NO YES 0 4 USERS YES NO YES 0 3 TEMP NO NO YES 0Elapsed: 00:00:00.16SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> exec fy_recover_data.recover_truncated_table('LHR','LHRTB_210702');16:03:26: New Directory Name: FY_DATA_DIR16:03:26: Recover Tablespace: FY_REC_DATA; Data File: FY_REC_DATA.DAT16:03:26: Restore Tablespace: FY_RST_DATA; Data File: FY_RST_DATA.DAT16:03:27: Recover Table: LHR.LHRTB_210702$16:03:27: Restore Table: LHR.LHRTB_210702$$16:03:49: Copy file of Recover Tablespace: FY_REC_DATA_COPY.DAT16:03:49: begin to recover table LHR.LHRTB_21070216:03:50: New Directory Name: TMP_HF_DIR16:03:52: Recovering data in datafile /opt/oracle/oradata/LHRSDB/users01.dbf16:03:52: Use existing Directory Name: TMP_HF_DIR16:06:25: 5662 truncated data blocks found.16:06:25: 290760 records recovered in backup table LHR.LHRTB_210702$$16:06:25: Total: 5662 truncated data blocks found.16:06:25: Total: 290760 records recovered in backup table LHR.LHRTB_210702$$16:06:25: Recovery completed.16:06:25: Data has been recovered to LHR.LHRTB_210702$$PL/SQL procedure successfully completed.Elapsed: 00:02:59.27SYS@192.168.66.35:11521/lhrsdb> SELECT COUNT(1) FROM lhr.LHRTB_210702$$; COUNT(1)---------- 290760Elapsed: 00:00:00.52SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> alter table lhr.LHRTB_210702 nologging;Table altered.Elapsed: 00:00:00.25SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> insert /*+append*/ into lhr.LHRTB_210702 select * from lhr.LHRTB_210702$$;290760 rows created.Elapsed: 00:00:01.99SYS@192.168.66.35:11521/lhrsdb> commit;Commit complete.Elapsed: 00:00:00.91SYS@192.168.66.35:11521/lhrsdb> alter table lhr.LHRTB_210702 logging;Table altered.Elapsed: 00:00:00.11SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> SELECT COUNT(1) FROM lhr.LHRTB_210702; COUNT(1)---------- 290760Elapsed: 00:00:00.25
4.4、 Clean up temporary data
SYS@192.168.66.35:11521/lhrsdb> select * from v$tablespace; TS# NAME INC BIG FLA ENC CON_ID---------- ------------------------------ --- --- --- --- ---------- 1 SYSAUX YES NO YES 0 0 SYSTEM YES NO YES 0 2 UNDOTBS1 YES NO YES 0 4 USERS YES NO YES 0 3 TEMP NO NO YES 0 6 FY_REC_DATA YES NO YES 0 7 FY_RST_DATA YES NO YES 07 rows selected.SYS@192.168.66.35:11521/lhrsdb> set pagesize 9999 line 9999SYS@192.168.66.35:11521/lhrsdb> col TS_Name format a30SYS@192.168.66.35:11521/lhrsdb> col PDBNAME format a15SYS@192.168.66.35:11521/lhrsdb> col TS_NAME format a20SYS@192.168.66.35:11521/lhrsdb> col LOGGING format a10SYS@192.168.66.35:11521/lhrsdb> WITH wt1 AS 2 (SELECT ts.TABLESPACE_NAME, 3 df.all_bytes, 4 decode(df.TYPE, 5 'D', 6 nvl(fs.FREESIZ, 0), 7 'T', 8 df.all_bytes - nvl(fs.FREESIZ, 0)) FREESIZ, 9 df.MAXSIZ, 10 ts.BLOCK_SIZE, 11 ts.LOGGING, 12 ts.FORCE_LOGGING, 13 ts.CONTENTS, 14 ts.EXTENT_MANAGEMENT, 15 ts.SEGMENT_SPACE_MANAGEMENT, 16 ts.RETENTION, 17 ts.DEF_TAB_COMPRESSION, 18 df.ts_df_count 19 FROM dba_tablespaces ts, 20 (SELECT 'D' TYPE, 21 TABLESPACE_NAME, 22 COUNT(*) ts_df_count, 23 SUM(BYTES) all_bytes, 24 SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZ 25 FROM dba_data_files d 26 GROUP BY TABLESPACE_NAME 27 UNION ALL 28 SELECT 'T', 29 TABLESPACE_NAME, 30 COUNT(*) ts_df_count, 31 SUM(BYTES) all_bytes, 32 SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) 33 FROM dba_temp_files d 34 GROUP BY TABLESPACE_NAME) df, 35 (SELECT TABLESPACE_NAME, 36 SUM(BYTES) FREESIZ 37 FROM dba_free_space 38 GROUP BY TABLESPACE_NAME 39 UNION ALL 40 SELECT tablespace_name, 41 SUM(d.BLOCK_SIZE * a.BLOCKS) bytes 42 FROM gv$sort_usage a, 43 dba_tablespaces d 44 WHERE a.tablespace = d.tablespace_name 45 GROUP BY tablespace_name) fs 46 WHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAME 47 AND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+)) 48 SELECT (SELECT A.TS# 49 FROM V$TABLESPACE A 50 WHERE A.NAME = UPPER(t.TABLESPACE_NAME)) TS#, 51 t.TABLESPACE_NAME TS_Name, 52 round(t.all_bytes / 1024 / 1024) ts_size_M, 53 round(t.freesiz / 1024 / 1024) Free_Size_M, 54 round((t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M, 55 round((t.all_bytes - t.FREESIZ) * 100 / t.all_bytes, 3) Used_per, 56 round(MAXSIZ / 1024 / 1024/1024, 3) MAX_Size_g, 57 round(decode(MAXSIZ, 0, to_number(NULL), (t.all_bytes - FREESIZ)) * 100 / 58 MAXSIZ, 59 3) USED_per_MAX, 60 round(t.BLOCK_SIZE) BLOCK_SIZE, 61 t.LOGGING, 62 t.ts_df_count 63 FROM wt1 t 64 UNION ALL 65 SELECT to_number('') TS#, 66 'ALL TS:' TS_Name, 67 round(SUM(t.all_bytes) / 1024 / 1024, 3) ts_size_M, 68 round(SUM(t.freesiz) / 1024 / 1024) Free_Size_m, 69 round(SUM(t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M, 70 round(SUM(t.all_bytes - t.FREESIZ) * 100 / SUM(t.all_bytes), 3) Used_per, 71 round(SUM(MAXSIZ) / 1024 / 1024/1024) MAX_Size, 72 to_number('') "USED,% of MAX Size", 73 to_number('') BLOCK_SIZE, 74 '' LOGGING, 75 to_number('') ts_df_count 76 FROM wt1 t 77 order by TS# 78 ; TS# TS_NAME TS_SIZE_M FREE_SIZE_M USED_SIZE_M USED_PER MAX_SIZE_G USED_PER_MAX BLOCK_SIZE LOGGING TS_DF_COUNT---------- -------------------- ---------- ----------- ----------- ---------- ---------- ------------ ---------- ---------- ----------- 0 SYSTEM 910 4 906 99.54 32 2.764 8192 LOGGING 1 1 SYSAUX 670 30 640 95.476 32 1.952 8192 LOGGING 1 2 UNDOTBS1 345 271 74 21.413 32 .225 8192 LOGGING 1 3 TEMP 33 27 6 18.182 32 .018 8192 NOLOGGING 1 4 USERS 344 2 341 99.291 32 1.042 8192 LOGGING 1 6 FY_REC_DATA 0 0 0 100 0 100 8192 LOGGING 1 7 FY_RST_DATA 57 3 54 95.154 32 .165 8192 LOGGING 1 ALL TS: 2358.625 338 2021 85.678 1928 rows selected.Elapsed: 00:00:00.59SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> drop tablespace FY_REC_DATA including contents and datafiles;Tablespace dropped.Elapsed: 00:00:12.01SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb>SYS@192.168.66.35:11521/lhrsdb> drop tablespace FY_RST_DATA including contents and datafiles;Tablespace dropped.Elapsed: 00:00:11.43SYS@192.168.66.35:11521/lhrsdb> drop table lhr.LHRTB_210702$$;drop table lhr.LHRTB_210702$$ *ERROR at line 1:ORA-00942: table or view does not existElapsed: 00:00:00.15SYS@192.168.66.35:11521/lhrsdb>
On the whole, with fy_recover_data The bag is very good ,fy_recover_data Can recover truncate The data of , But it can't recover drop The data of .
边栏推荐
- 短链的设计
- 基础图表解读“东方甄选”爆火出圈数据
- 专为决策树打造,新加坡国立大学&清华大学联合提出快速安全的联邦学习新系统
- 亚朵三顾 IPO
- okcc呼叫中心的订单管理时怎么样的
- 氢创未来 产业加速 | 2022氢能专精特新创业大赛报名通道开启!
- After 3 years of testing bytecan software, I was ruthlessly dismissed in February, trying to wake up my brother who was paddling
- 【OFDM通信】基于深度学习的OFDM系统信号检测附matlab代码
- If the request URL contains jsessionid, the solution
- Eureka Client启动后就关闭 Unregistering application xxx with eureka with status DOWN
猜你喜欢
Why is bat still addicted to 996 when the four-day working system is being tried out in Britain?
I've been laid off, and I'll lose money for everything. The days when I once made a monthly salary of 20000 are not coming back
专为决策树打造,新加坡国立大学&清华大学联合提出快速安全的联邦学习新系统
每年 2000 亿投资进入芯片领域,「中国芯」创投正蓬勃
Yaduo Sangu IPO
Wind chime card issuing network source code latest version - commercially available
Penetration test --- database security: detailed explanation of SQL injection into database principle
Can online reload system software be used safely? Test use experience to share with you
MATLIB从excel表中读取数据并画出函数图像
Gradle知識概括
随机推荐
Daily question brushing record (XV)
【无人机】多无人协同任务分配程序平台含Matlab代码
【系统分析师之路】第七章 复盘系统设计(面向服务开发方法)
MySQL主从之多源复制(3主1从)搭建及同步测试
(LeetCode)两数之和
leetcode:236. 二叉树的最近公共祖先
Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
吴恩达2022机器学习课程评测来了!
Compile logisim
How rider uses nuget package offline
[system analyst's road] Chapter 7 double disk system design (service-oriented development method)
How does crmeb mall system help marketing?
Matplotlib draws a histogram and adds values to the graph
专为决策树打造,新加坡国立大学&清华大学联合提出快速安全的联邦学习新系统
The best sister won the big factory offer of 8 test posts at one go, which made me very proud
The intranet penetrates the zerotier extranet (mobile phone, computer, etc.) to access intranet devices (raspberry pie, NAS, computer, etc.)
After 3 years of testing bytecan software, I was ruthlessly dismissed in February, trying to wake up my brother who was paddling
[OFDM communication] OFDM system signal detection based on deep learning with matlab code
Rider离线使用Nuget包的方法
SQL的一种写法,匹配就更新,否则就是插入