签到成功

知道了

CNDBA社区CNDBA社区

ORACLE 删除软件安装目录恢复处理

2018-06-26 20:37 3487 0 原创 数据库恢复
作者: Marvinn

ORACLE 删除软件安装目录恢复处理

http://www.cndba.cn/Marvinn/article/2876
http://www.cndba.cn/Marvinn/article/2876

问题描述

http://www.cndba.cn/Marvinn/article/2876
http://www.cndba.cn/Marvinn/article/2876

某客户不小心把数据库服务器(Standalone Server数据库)软件目录全删掉了,所幸数据全在ASM磁盘组内,情况并没想象中的严重,

处理思路:

    1、要么在原机器清理,重装软件、注册  (当前采用的方法,处理过程并不是那么顺利,一大推问题...)

    2、要么新开一台机器,安装软件,ASM磁盘可见访问,注册ASM磁盘即可(添加节点方式) --比较耗时耗力

处理过程http://www.cndba.cn/Marvinn/article/2876

http://www.cndba.cn/Marvinn/article/2876

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成功

问题总结

恢复流程:

http://www.cndba.cn/Marvinn/article/2876
http://www.cndba.cn/Marvinn/article/2876
http://www.cndba.cn/Marvinn/article/2876

1、清OCR注册信息

2、重装GI软件,重配置注册OCR

3、添加CSSD资源并启动

4、编辑ASM参数文件,并MOUNT数据磁盘组DATA

5、重装DB软件

6、srvctl 命令添加数据库

7、open数据库

至此….数据库删除软件安装目录,恢复完成……http://www.cndba.cn/Marvinn/article/2876

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Marvinn

Marvinn

关注

路漫漫其修远兮、吾将上下而求索

  • 99
    原创
  • 0
    翻译
  • 2
    转载
  • 36
    评论
  • 访问:458429次
  • 积分:449
  • 等级:中级会员
  • 排名:第12名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ