服务器上的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
示例:
- sqlldr pwjhjs/123456@192.168.1.999:1521/ORCL control=
- E:\test\pwjhjs.act_ru_identitylink.ctl
结果:
最后:该方法为Truncate表的常规恢复。该环境中 所有数据库文件均是可用且健康的,用户仅需要 字典模式下加载SYSTEM表空间的数据文件以及被TRUNCATED表的数据文件即可
参考:
https://www.parnassusdata.com/zh-hans/node/52
http://zcdn.parnassusdata.com/prm03.pdf