• 案例:Oracle非常规恢复ODU恢复PACKAGE/VIEW/DBLINK等数据脚本操作


    Oracle非常规恢复,通过ODU工具恢复包,过程,函数,视图,触发器等数据

    当数据库不能拉起来时候,我们可以通过odu找回丢失的数据,今天客户出要求,需要我帮忙找回不能起来库中的包,过程,函数,视图,触发器等之类东西。这些东西都是存在system空间中,存在一些系统的基表中,我们如果能够拿到这些基表的数据然后进行处理,原则上就可以得到客户需要的东西

    一、恢复PROCEDURE/FUNCTION/PACKAGE/PACKAGE BODY/TRIGGER/TYPE/TYPE BODY中的数据

    1. 查看这些数据存储在什么基表中

    select u.name, o.name,
    decode(o.type#, 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
                   11, 'PACKAGE BODY', 12, 'TRIGGER', 13, 'TYPE', 14, 'TYPE BODY',
                   'UNDEFINED'),
    s.line, s.source
    from sys.obj$ o, sys.source$ s, sys.user$ u
    where o.obj# = s.obj#
      and o.owner# = u.user#
      and ( o.type# in (7, 8, 9, 11, 12, 14) OR
           ( o.type# = 13 AND o.subname is null))
    union all
    select u.name, o.name, 'JAVA SOURCE', s.joxftlno, s.joxftsrc
    from sys.obj$ o, x$joxfs s, sys.user$ u
    where o.obj# = s.joxftobn
      and o.owner# = u.user#
      and o.type# = 28;

    通过这个sql知道主要存储在sys.obj$ o, sys.source$ s, sys.user$中(至于x$joxfs表,我暂时在数据库中未找到,不能使用odu提取数据,也就是说我这里不能恢复出来JAVA SOURCE)

    2. 使用odu导出数据(注意output_format设置为dmp,防止出现意外)
    使用类此unload table sys.obj$ 下面语句导出数据

    3. 加载这些数据到新库中(切记不要使用sys schema)
    使用类此imp chf/oracleplus file=d:/SYS_OBJ$.dmp fromuser=sys touser=chf导入数据

    4. 在查询出需要对象

       SELECT u.name USER_NAME,
             o.name OBJECT_nAME,
             DECODE (o.type#,
                     7, 'PROCEDURE',
                     8, 'FUNCTION',
                     9, 'PACKAGE',
                     11, 'PACKAGE BODY',
                     12, 'TRIGGER',
                     13, 'TYPE',
                     14, 'TYPE BODY',
                     'UNDEFINED')
                OBJECT_tYPE,
             s.line,
             s.source
        FROM chf.obj$ o, chf.source$ s, chf.user$ u
       WHERE o.obj# = s.obj# AND o.owner# = u.user#
             AND (o.type# IN (7, 8, 9, 11, 12, 14)
                  OR (o.type# = 13 AND o.subname IS NULL))
    --过来条件选择出需要对象
    -- AND U.name='BSSADMIN'
    ORDER BY U.NAME,
             O.NAME,
             O.TYPE#,
             S.LINE;

    5. 使用说明
    在line=1的source前面加上create or replace ,使用合适的用户创建需要对象

    二、恢复Oracle 视图VIEW中的数据

    1. 找出视图存储基表
    sys.obj$,sys.view$,sys.user$
    2. 使用odu导出需要表
    3. 使用imp导入数据库
    4. 查询语句

        SELECT u.name username, o.name viewname, v.text
      FROM chf.obj$ o, chf.view$ v, chf.user$ u
     WHERE o.obj# = v.obj# AND o.owner# = u.user# 
     --过滤条件,挑选需要视图
     AND u.name = 'MAS_ADMIN';

    5. 使用说明
    create VIEW OR REPLACE username.viewname AS+TEXT中内容

    三、恢复Oracle dblink内的数据

    1. 找出关联基表
    Sys.link$和sys.user$
    2. odu导出相关表
    3. imp导入数据
    4. 查询语句

    SELECT U.NAME   USERNAME,
           L.NAME   DBLINK_NAME,
           L.USERID LOGIN_USER,
           L.HOST   TNS,
           L.CTIME
      FROM CHF.LINK$ L, CHF.USER$ U
     WHERE L.OWNER# = U.USER#
      --过滤条件
       AND U.NAME = 'PUBLIC'

    5. 使用说明
    根据查询出来信息,自己创建DBLINK
     

    --------------------------------------ORACLE-DBA----------------------------------------

    最权威、专业的Oracle案例资源汇总之案例:Oracle非常规恢复ODU恢复PACKAGE/VIEW/DBLINK等数据脚本操作

    原文唯一网址:http://www.oracleplus.net/arch/oracle-20160606-292.html

    Oracle研究中心

    关键词:

    Oracle非常规恢复

    ODU工具恢复PACKAGE/VIEW/DBLINK等数据的方法

  • 相关阅读:
    Linux系统信息查看
    批处理Dos命令
    python语法31[函数]
    python基础31[数据结构list+tuple+set+dictionary]
    nmake使用
    linux间文件拷贝
    linux文件同步工具Unison的使用
    python语法31[基本数据类型和流程控制]
    远程桌面管理工具比较
    WindowsBatch与LinuxShell比较[batchfile之for命令详解]
  • 原文地址:https://www.cnblogs.com/piguanjia/p/5608255.html
Copyright © 2020-2023  润新知