• Oracle表被truncate(截断),该如何恢复?


    服务器上的Oracle数据库表被你截断、drop、delete了,是不是突然感觉到背后凉飕飕的,一股寒意从脚底板直冲发梢,特别上头?反正我就是这样的感觉

    如果不赶紧恢复,轻则卷被子走人,重则就很严重!跑路是不可能跑路成功了

    俗话说:“代码和人只能跑一个”,没了数据库,代码就跑不起来!为了让代码跑,而不是自己跑,就只能寄出神器(ParnassusData Recovery Manager)了

    有了ParnassusData Recovery Manager,你再也不用提心吊胆的(而且是拖家带口的)连夜买出国的机票了

    PRM概述:

    ParnassusData Recovery Manager(以下PRM)是企业级 ORACLE 数据灾恢复软 件,可直接从 Oracle 9i,10g,11g,12c 的数据数据文件(datafile)中抽取原数据表上的数据, 而不需要通过 ORACLE 数据库实例上SQL 来拯救数据。ParnassusData Recovery Manager 是一款基于 JAVA 绿件,无需安装,下后便可直接使用。

    它能做什么:

    prm dul恢复oracle数据库最简模式
    prm dul使用数据搭桥传输Oracle表数据
    prm dul在损坏数据库使用exportddl导出建表语句、索引、存储过程、函数等代码
    prm dul恢复oracle中被delete的数据
    prm dul恢复oracle中被truncate的数据
    prm dul用户级别的数据搭桥
    prm dul在ASM存储情况下的最简模式
    prm dul恢复oracle中被drop掉的表
    prm dul恢复oracle 12c以后可拔插数据库PDB/CDB中的数据
    prm dul恢复被恶意加密的Oracle数据文件
    prmscan oracle数据块重组恢复解决方案  

    准备:

    操作系统上必须已经安装JAVA JDK 1.8或以上版本才能运行PRM-DUL 5.1,请确保LINUX/UNIX上/bin/java已加入到PATH中。
    这是一个GUI程序,当在Linux上使用时,确保能启动远程图形化桌面,例如至少你应当能启动xclock或gnome-terminal。
    在确保图形化界面可用的情况下:
    在Windows上直接点击prm.bat
    在LINUX/UNIX上执行命令行: sh prm.sh

    下载PRM:https://www.parnassusdata.com/zh-hans/node/1343

    使用:

    1、启动PRM,并选择开始-->恢复向导

    2、直接下一步

     3、此情况中并未采用ASM存储,所以仅需要选择 字典模式 即可:

    4、根据你的环境系统选择Endian,我的是Windows,所以我选择小端(Little)

    tips:如果你的数据文件是在AIX(即Big Endian的)上生成的,你为了方便而将这些数据文件拷贝到Windows服务器上并使用PRM来恢复数据,那么你仍应当选择其原生的Big Endian格式。

    Solaris[tm] OE (32-bit)

    Big

    Solaris[tm] OE (64-bit)

    Big

    Microsoft Windows IA (32-bit)

    Little

    Linux IA (32-bit)

    Little

    AIX-Based Systems (64-bit)

    Big

    HP-UX (64-bit)

    Big

    HP Tru64 UNIX

    Little

    HP-UX IA (64-bit)

    Big

    Linux IA (64-bit)

    Little

    HP Open VMS

    Little

    Microsoft Windows IA (64-bit)

    Little

    IBM zSeries Based Linux

    Big

    Linux x86 64-bit

    Little

    Apple Mac OS

    Big

    Microsoft Windows x86 64-bit

    Little

    Solaris Operating System (x86)

    Little

    IBM Power Based Linux

    Big

    HP IA Open VMS

    Little

    Solaris Operating System (x86-64)

    Little

    Apple Mac OS (x86-64)

    Little

    Block Size和偏移量可到后面修改

    5、点击Choose Files, 一般我们推荐 如果数据库不大,那么将该库所有的数据文件都选择进来; 如果你的数据库很大,且你了解你的数据表位于哪些数据文件上,则你可以仅仅选择SYSTEM表空间的数据文件(必须!)以及数据库表所在表空间的数据文件

    tips:注意Choose界面支持Ctrl + A 和Shift等键盘操作

    查看表空间位置:

    Select * FROM DBA_DATA_FILES;

    6、需要为指定的数据文件指定其Block Size即ORACLE数据块的大小,这里根据实际情况修改即可, 例如你的DB_BLOCK_SIZE是8K,但是部分表空间指定16K作为数据块大小的,仅仅需要为那些不是8k的数据文件修改BLOCK_SIZE即可;

    这里的OFFSET(偏移量) 参数主要是为了那些采用裸设备存放数据文件的场景,例如在AIX上基于普通VG的LV作为数据文件,则存在4k的OFFSET,需要在此处指定

    Load(加载)阶段PRM会从SYSTEM表空间中读取ORACLE数据字典信息,并在自带的Derby中自建一个数据字典,这让PRM有能力操作ORACLE数据库中的各种数据

    ?

    Load完成后会在后台输出数据库 字符集和国家字符集等信息

    注意PRM是支持 多语言和ORACLE数据库的多字符集的, 但是前提是实施PRM数据恢复的操作系统要求已经安装了对应的语言包; 例如在Windows操作系统上没有安装中文语言包,但是由于ORACLE数据库字符集是独立于操作系统语言的,即ORACLE数据库的字符集可以为ZHS16GBK字符集,但是操作系统并不支持中文,此场景中不在本服务器上部署的ORACLE客户端并不受影响,可以正确显示数据库中的中文数据。

    但是使用PRM则要求实施PRM数据恢复的操作系统已经安装了对应的语言包,例如用户要恢复ZHS16GBK的中文字符集数据库,则需要操作系统上已经安装了中文语言包才可以

    类似的 在Linux上需要安装fonts-chinese 中文字体包。

    7、Load完成后 PRM界面左侧出现按照数据库用户分组的树形图

    点开用户,可以看到多个用户名。然后选择被截断表所在用户名,我需要恢复ACT_RU_VARIABLE表,因为已经被我截断,所以双击表名,右边没有数据;如果是表中有数据,则由数据显示

    8、右键表名,选择Unload truncated data

    PRM将尝试扫描该表所在表空间并将已经truncated掉的数据抽取出来。

    下图显示抽取成功,共93条数据,然后就去可以打开该路径了

    9、本地打开上面的路径,就可以看到有这么两个文件

    pwjhjs.act_ru_variable.ctl:将文本数据导入到数据库中使用的SQLLDR 控制文件

    pwjhjs.act_ru_variable.dat.truncated:文本数据

    Windows下数据导入(数据恢复):

    ①打开pwjhjs.act_ru_variable.ctl sqlldr控制文件,将infile后面改为pwjhjs.act_ru_variable.dat.truncated 的绝对路径

    tips:将数据导入到源表中(注意 ParnassusData强烈建议你修改该SQLLDR控制文件中导入的表名字为一个临时表,这样不会覆盖原环境)。

    win + r ,输入 cmd回车,然后输入命令

    数据导入本地库:

    1、sqlldr control=xxx.ctl direct=y

    示例:

    sqlldr control=E:\test\c##root.act_ru_variable.ctl direct=y

    回车之后输入用户名和密码就可以了

    结果:

    2、sqlldr 用户名/密码@服务名 control=xxx.ctl

    示例:

    sqlldr c##root/root@ORCL control=E:\test\c##root.act_ru_variable.ctl

     结果:

     数据导入到服务器:

    命令:sqlldr 用户名/密码@ip:port/服务名 control=xxx.ctl

    示例:

    1. sqlldr pwjhjs/123456@192.168.1.999:1521/ORCL control=
    2. E:\test\pwjhjs.act_ru_identitylink.ctl

    结果:

    最后该方法为Truncate表的常规恢复。该环境中 所有数据库文件均是可用且健康的,用户仅需要 字典模式下加载SYSTEM表空间的数据文件以及被TRUNCATED表的数据文件即可

    参考:

    https://www.parnassusdata.com/zh-hans/node/52

    http://zcdn.parnassusdata.com/prm03.pdf

  • 相关阅读:
    品牌媒介工作流程是什么,媒体投放目标怎么做?
    Javaweb项目创建
    MongoShake数据灾备与迁移
    知识增广的预训练语言模型K-BERT:将知识图谱作为训练语料
    Arm64 linux Virtual memory分析
    安防视频监控EasyCVR平台修改默认数据为MySQL,但忘记登录密码该如何解决?
    【前端开发】-- 基于nvm快速搭建项目与都项目同时开发
    C# Thread.Sleep(0)有什么用?
    150.逆波兰表达式求值
    【Linux】第五篇——Linux环境下的工具(三)(make/Makefile+进度条小程序)
  • 原文地址:https://blog.csdn.net/weixin_46007404/article/details/125514361