找数据恢复工具
一般删除了什么东西,只要不重启就有希望拯救
通过现存的Oracle进程还可以恢复
首先,检查程序是否在回收站,如果在,恢复就好了,如果不在,前往甲骨文官网查询就可以
删库 跑路
只要电脑不重启,数据就应该还在电脑上一段时间,找数据恢复工具试试,或者去社区交流一下
花几十块钱,买个数据恢复工具
1.按原来的方式重新安装oracle
2.重新创建pfile
3.创建好pfile 之后,利用pfile把数据库启动到nomount状态
SQL> startup nomount pfile='/u01/xxxxx/dbs/initorcl.ora';
ORA-32006: SQL_TRACE initialization parameter has been deprecated
ORACLE instance started.
4.重新打开
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
oracle数据库有类似回收站的功能,所以平时如果误删数据是有很大可能可以进行恢复的,前提是没有使用 truncate 方式来删除表以及没有使用 purge(drop table table_name purge)
1、误删单条数据时进行数据恢复:
首先通过历史命令目录查询执行删除数据语句的时间 可以通过快捷键(ctrl+e)或者v$sql表来查看具体的详细信息
确认时间之后可以通过执行
select * from 表名 as of timestamp to_timestamp(‘确认删除的时间’,‘yyyy-mm-dd hh24:mi:ss’);
查看被删除的数据是否存在,如果存在则可以进行数据恢复,如果没有可以把时间向前提一下。
然后恢复数据的方法就看自己喜欢那种方法了,可以复制出来,也可以使用语句进行恢复,例如我要恢复已经删除的id为 1 的语句为:
insert into 表名 (select * from 表名 as of timestamp to_timestamp(‘2021-10-16 10:35:51’,‘yyyy-mm-dd hh24:mi:ss’) where id = 1);
2、使用drop命令把整张表删除时,进行表恢复:
flashback table 表名 to before drop 执行该条语句就可以对表进行恢复了。
1、回收站看能不能回复
2、用磁盘数据还原工具🛠️恢复数据
可以选择一些数据恢复软件
也i可以尝试以下方法(参考:https://www.cndba.cn/cndba/Marvinn/article/2876)
1.GRID处理:
1、执行所有操作前,可让存储工程师,对OCR物理盘进行dd备份下
备份命令如下(自行采用):
[root@server ~]# dd if=/dev/sda of=/dev/sdb => 备份整个磁盘到另外一个磁盘
[root@server ~]# dd if=/dev/sdb of=sda.bak => 备份整个磁盘为某个文件
[root@server ~]# dd if=/dev/sda | gzip > sda.bak.gz => 备份并且压缩
[root@server ~]# dd if=/dev/sdaof=dbt.bak count=1 bs=512 skip=446
=> 跳过前446字节备份磁盘第一扇区的后66字节DPT信息到指定文件
=================================================================================================
恢复:
[root@server ~]# dd if=/dev/sdb of=/dev/sda
[root@server ~]# dd if=/dev/sda.bak of=/dev/sdb
[root@server ~]# gzip -dc sda.bak.gz | dd of=/dev/sda
[root@server ~]# dd if=/path/to/image of=/dev/hdx count=1 bs=512 seek=446
2、清理机器注册信息
要不然重装软件报错:[INS-40404] The installer has detected a configured instance of oracle grid infrastructure software on the server!
[root@server ~]# cd /etc/oracle/
[root@server oracle]# ll
total 2216
drwxrwx---. 2 root oinstall 56 Dec 1 2017 lastgasp
-rw-r--r--. 1 root oinstall 40 Dec 1 2017 ocr.loc
-rw-r--r--. 1 root root 0 Dec 1 2017 ocr.loc.orig
-rw-r--r--. 1 root oinstall 80 Dec 1 2017 olr.loc
-rw-r--r--. 1 root root 0 Dec 1 2017 olr.loc.orig
drwxrwxr-x. 5 root oinstall 44 Dec 1 2017 oprocd
drwxr-xr-x. 3 root oinstall 18 Dec 1 2017 scls_scr
-rws--x--- 1 root oinstall 2260760 May 23 14:02 setasmgid
为确保安全,采用MV命令备份
mv ocr.loc ocr.loc.bak
mv ocr.loc.orig ocr.loc.orig.bak
mv olr.loc olr.loc.bak
mv olr.loc.orig olr.loc.orig.bak
3、重装软件
注意:
1、安装软件前,oracle用户属组注意,需要具备asmadmin属组(也可以不用,但是要跟ASM磁盘同样属组就好),要不然后面oracle用户无法访问ASM磁盘
2、oracle 用户属组需要dba,要不然系统验证sqlplus / as sysdba 报错ORA-01017: 用户名/口令无效; 登录被拒绝
上面今天处理过程中就出现该问题...一笔提出带过
3.1、由于之前清理过注册信息,重装软件,安装之前的安装步骤安装就好....相当于重装软件,重新节点信息注册到OCR
./runInstall
Standalone Server:选择 Install and Configure Grid Infrastructure for a Standalone Server 命令安装
(顺带提一下 RAC: 选择 Install and Configure Grid Infrastructure for a Cluster)
后面注意的就是OCR磁盘组:
1、OCR磁盘组名跟之前OCR磁盘组命名需一致
2、OCR磁盘组中的物理ASM磁盘也需要一致不能选错...
其他正常选择安装即可....
3.2、GI软件重装完毕,最后报错:INS-20802,选择忽略,无关紧要......root用户执行脚本并且重启has服务
本来以为直接MOUNT 数据盘DATA就好了,使用asmca mount数据盘DATA,结果发现,ASM实例启动不起来,于是,尝试手动起ASM报错如下:
[grid@server]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.1.0 Production on Sun Oct 25 10:16:21 2009
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-01078: failure in processing system parameters
ORA-29701: unable to connect to Cluster Synchronization Service --发现CSS服务没启动
无法连接到CSS服务上.到操作系统上检查一下看看
[grid@server]$ crsctl check css
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
[grid@server]$
[grid@server]$ ps -ef|grep cssd
果然没有CSS的服务daemon进程,再看一下HAS(High Availability Service)的状态
[grid@server]$ crsctl check has
CRS-4638: Oracle High Availability Services is online
[grid@server]$ ps -ef|grep d.bin
grid 5886 1 0 10:06 ? 00:00:01 /u01/app/grid/product/11.2/grid/bin/ohasd.bin reboot
[grid@server]$
发现HAS的服务确实启动了的,而ora.cssd和ora.diskmon这2个服务是依赖于HAS维护的.
进一步查看各资源的状态,发现当前资源并没有ora.asm资源,并且ora.cssd资源是offline.
(由于当前我只处理了ora.cssd资源,并没有添加ora.asm资源,只是手动sqlplus / as sysasm 内启动了asm实例,导致后续,DB数据库无法Mount报错,请继续往下看...)
[grid@server]$ crs_stat -t
Name Type Target State Host
--------------------------------------------------------------
ora....ER.lsnr ora....er.type ONLINE ONLINE server
ora.ons ora.ons.type ONLINE ONLINE server
ora.evmd ora.evmd.type ONLINE ONLINE server
ora.cssd ora.cssd.type OFFLINE OFFLINE server
ora.diskmon ora.diskmon.type OFFLINE OFFLINE server
[grid@server]$
再看一下ora.cssd和ora.diskmon的属性
[grid@server]$ crs_stat -p ora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never --nerver无法跟随has服务自启动
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
[grid@server]$ crs_stat -p ora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never --nerver无法跟随has服务自启动
CHECK_INTERVAL=20
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=60
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
[grid@server]$
到这里基本就找到了原因了,可以看到这两个资源的AUTO_START属性默认都设置为never,也就是说他们不会随着HAS服务的启动而自动启动的,
尽管默认情况下HAS服务是开机自动启动的.好了,那我们就手动启动一下吧:
[grid@server]$ crsctl start resource ora.cssd
CRS-2672: Attempting to start 'ora.cssd' on 'server'
CRS-2679: Attempting to clean 'ora.diskmon' on 'server'
CRS-2681: Clean of 'ora.diskmon' on 'server' succeeded
CRS-2672: Attempting to start 'ora.diskmon' on 'server'
CRS-2676: Start of 'ora.diskmon' on 'server' succeeded
CRS-2676: Start of 'ora.cssd' on 'server' succeeded
注:ora.cssd和ora.diskmon这两个服务是有依赖关系的,启动哪个都会把两个都起来.
[grid@server]$ crs_stat -t
Name Type Target State Host
--------------------------------------------------------------
发现该两个资源已经被启动
ora.cssd ora.cssd.type ONLINE ONLINE server
ora.diskmon ora.diskmon.type ONLINE ONLINE server
[grid@server]$
=====================================================================================================
tips
1)默认情况下HAS(High Availability Service)是自动启动的.通过如下命令可以取消和启用自动启动
crsctl disable has
crsctl enable has
2)HAS手动启动和停止
crsctl start has
crsctl stop has
3)查看HAS的状态
crsctl check has
4)如果想让ora.css和ora.diskmon服务随着HAS的启动而自动启动,那么你可以这两个服务的AUTO_START属性
crsctl modify resource "ora.cssd" -attr "AUTO_START=1"
or
crsctl modify resource "ora.diskmon" -attr "AUTO_START=1"
5)如果想取消ora.css和ora.diskmon的Auto start
crsctl modify resource "ora.cssd" -attr "AUTO_START=never"
crsctl modify resource "ora.diskmon" -attr "AUTO_START=never"
===========================================================================================================
CSS服务起来了,重启动asm instance,发现ASM启动,但是仍然有报错
[grid@server]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.1.0 Production on Sun Oct 25 10:30:03 2009
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-00099: warning: no parameter filespecified for ASM instance
ASM instance started
Total System Global Area 284565504 bytes
Fixed Size 1336036 bytes
Variable Size 258063644 bytes
ASM Cache 25165824 bytes
ORA-15110: no diskgroups mounted
事后回想:这里是不是可以直接添加ora.asm资源,因为ASM参数文件位于DATA磁盘组,然后在启动即可? 而不是通过我得方式处理,可能是不行的,因为当前DATA磁盘组并没有MOUNT上....根本无法获取到ASM参数文件
grid用户添加命令如下:
$srvctl add asm -l LISTENER (-l listener name)
$srvctl start asm -n server -o open
当前处理方式:
ORA-00099: warning: no parameter filespecified for ASM instance
pfile 参数文件的路径$ORACLE_HOME/dbs/init$ORACLE_SID.ora 例如 ORACLE_SID=+ASM
pfile $ORACLE_HOME/dbs/init+ASM.ora
内容如下:
*.asm_diskstring='/dev/sda2' --DATA磁盘组物理盘路径
*.asm_diskgroups='DATA' --DATA数据磁盘组名称
*.asm_power_limit=1
*.diagnostic_dest='/opt/app/oracle' --GRID用户下ORACLE_BASE目录
*.instance_type='asm'
*.large_pool_size=12M
*.remote_login_passwordfile='EXCLUSIVE' --其他配置不变
解释:
*.asm_diskgroups='DGASM1' 的作用是在启动asm实例的时候自动加载的磁盘组,如果不设置这个参数,那么只能启动asm实例,但是不能加载asm磁盘组,只能后来手动挂载asm磁盘组了。
如果 asm实例的启动没有用spfile文件,但是也没有用pfile文件,而是用了默认的文件,那我我们可以手动创建pfile文件,然后在create出spfile文件即可。spfile文件是位于asm磁盘组上
[grid@server]$ sqlplus "/as sysasm"
SQL> shutdown immediate
SQL> startup --ASM实例启动成功,并且数据磁盘组DATA也自动挂载mount
SQL> create spfile ='+DATA/orcl/asm/spfile+ASM.ora' from pfile='/u01/oracle/11.2.0/dbs/init+ASM.ora' --该步骤可以后期处理...再重新init+ASM.ora指定位置重新启动ASM,或者mv $ORACLE_HOME/dbs/init+ASM.ora文件重新启动....当前处理方法,没有采用...采用的本地pfile
==================================================================================================================
额外说明:
由于当前并没有,添加ora.asm资源,导致后面mount数据报错:
(处理方法步骤清往下看 第二章节DB处理)
ORA-00205: error in identifying control file, check alert log for more info
查看数据库ALERT告警日志:发现一大推类似错误,权限不足
ORA-15025:could not open disk "/dev/asma"
ORA-27041:unable to open file
Linux-x86_64Error: 13: Permission denied
Additionalinformation: 9
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
====================================================================================================================
2.DB处理
1、重装DB软件,注册数据库信息
1.1、重装DB软件过程省略.
注册数据库:(ORACLE用户)
srvctl add database -d orcl -o $ORACLE_HOME -p +data/stdby/spfilestdby.ora -p参数:填写位于磁盘组DATA下的spfile参数文件(可grid用户下asmcmd查看)
srvctl add instance -d orcl -i orcl -n server
1.2、启动数据库nomount,发现报错不能创建Audit审计目录,因为我们已经Mount 数据磁盘组,可以grid用户 asmcmd内cp 出数据库参数文件,并且vi 打开,查看adump目录创建位置,并且创建,然后重新nomount数据库即可...
1.3、因为之前说过,即使手动启动了ASM实例,但GI online资源没有ora.asm资源,数据库安装完毕,mount数据库会报错
ORA-00205: error in identifying control file, check alert log for more info
查看数据库ALERT告警日志:发现一大推类似错误,权限不足
ORA-15025:could not open disk "/dev/asma"
ORA-27041:unable to open file
Linux-x86_64Error: 13: Permission denied
Additionalinformation: 9
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
ORA-15040:diskgroup is incomplete
解决:
1、检查ASM磁盘权限660,属主grid,属组asmadmin正常....
2、检查oracle用户属组,发生没有在属组asmadmin
id oracle
usermod -G asmadmin,asmoper,dba oracle
修改ORACLE用户属组后,再次mount数据库仍然是报错ORA-00205,alert告警仍然是这些....但是发现其他特别的报错:GRID资源 "ora.asm not register"以及"ora.crsd not register" 因为has高可用封装了crs,这个可以不管,只要处理ora.asm资源即可...
解决方法:
grid用户添加命令如下:
$srvctl add asm -l LISTENER (-l listener name)
$srvctl start asm -n server -o open
1.4、再次mount数据库,mount成功,
1.5、open数据库,报错本地文件缺失,因为当前环境有些本地数据文件,所以直接offline drop丢失的本地数据文件即可
如:
alter database datafile '/u01/oralce/db.dbf' offline drop;
1.6、重新Open数据库,open成功
问题总结
恢复流程:
1、清OCR注册信息
2、重装GI软件,重配置注册OCR
3、添加CSSD资源并启动
4、编辑ASM参数文件,并MOUNT数据磁盘组DATA
5、重装DB软件
6、srvctl 命令添加数据库
7、open数据库
可以尝试使用硬盘数据恢复工具,看能否把删除的数据找回来。
看看是不是在回收站,如果在回收站,直接回收站还原即可
如果回收站没有,你用删除文件恢复工具恢复,
可以下载数据恢复工具试试
https://www.onlinedown.net/soft/612276.htm
工具安装到U盘,在没恢复文件之前,不要存取任何文件到被删除的盘
解决方法
1、使用的linux的服务版本还是桌面版本
2、如果是后者,直接从回收站恢复,
如果是前者,需要知道是什么操作系统
恢复错误删除文件夹是可能的,但有许多因素会限制您可以执行的操作,包括文件系统类型、删除时间等
下面这两种恢复方法或许可以尝试下:
另一种方法是使用debugfs. Linux debugfs Hack:取消删除文件
具体步骤可参考:https://www.cyberciti.biz/tips/linux-ext3-ext4-deleted-files-recovery-howto.html
上面两种都是或许可行的恢复方案,你可以试下
当然,如果之前你这边提前有备份的话,那就直接用备份恢复
如果时间来得及,并且上述操作都没生效,
这个方法或许也可以试下:
如有问题及时沟通
处理思路:
1、要么在原机器清理,重装软件、注册
2、要么新开一台机器,安装软件,ASM磁盘可见访问,注册ASM磁盘即可(添加节点方式)
可参考如下链接ORACLE 删除软件安装目录恢复处理 -- cnDBA.cn_中国DBA社区
1,找工具恢复删除的文件,花点钱恢复的效果还是不错的
https://huifu.wondershare.cn/undelete-freewares.html
2,如果业务部分数据有,加上你之前有备份数据或者,主要数据都有,可以重装数据库,然后恢复已有表结构和数据