ALLSTARS_ORACLE 发表于 2017-4-17 14:27:23

救火!!十万火急 - 数据库procedure抓取

本帖最后由 biotwang 于 2017-8-16 17:51 编辑

我的oracle数据库是在unix下安装的oracle10,不知怎么的sytem表空间下的数据文件块损坏,在pl/sql devloper上看不到表、存储过程和函数,但是可以用select 语句查看记录。也不能用exp对其整库备份,后来从user_all_tables下选出所有表名,通过exp 的tables选项分批备份表竟然成功(喜出望外),现在怎么将存储过程和函数导出,请高人指教,十分感谢

点击tablUBes、procedures、functions列表出现以下错误:ORA-01578: ORACLE 数据块损坏 (文件号 1, 块号 49614)
ORA-01110: 数据文件 1: '/dev/rdisk k9b'


SELECT *
FROM dba_extents
WHERE file_id =1
and 49614 between block_id AND block_id + blocks - 1
;也提示上面错误

最终解决方法:Select (Case When (instr(b.text,'FUNCTION')<>0 Or instr(b.text,'PROCEDURE')<>0 Or instr(b.text,'function')<>0 Or instr(b.text,'procedure')<>0) Then 'CREATE OR REPLACE '||b.text Else b.text End) source_code
From user_objects a,user_source b
Where a.object_name=b.Name And (object_type= 'PROCEDURE' or object_type = 'FUNCTION')
Order By b.Name,b.line可以生成所有的存储过程和函数的语法
选择source_code列拷贝到word中"CREATE OR REPLACE FUNCTION ""FUN_JSWYJ"" (
"
"    av_dfje   number, --numeric(12,2),
"
"
"
"return  number
"
"is经过整理,spool f:\imp_up.log

CREATE OR REPLACE FUNCTION UF_JSWYJ (
    av_dfje   number, --numeric(12,2),
)
return  number
is
end UF_JSWYJ
/
spool off注意在每个过程或函数的结尾加/,(在word中整理出来)另存为sql文件(即导出成功),执行该sql脚本文件即可导入




可以查的出来,但是怎样导出,再导入,有没有什么好的思路Select a.object_name,b.* From user_objects a,user_source b
Where a.object_name=b.Name And (object_type= 'PROCEDURE' or object_type = 'FUNCTION')
Order By b.Name,b.line可以查的出来,但是怎样导出,再导入,有没有什么好的思路

dbv是不是要单独安装?RMAN没用过

biotwang 发表于 2017-8-16 17:08:57

本帖最后由 biotwang 于 2017-8-16 17:50 编辑

你可以通过PRM-DUL导出数据库当时建立的存储过程procedure、函数function等信息.
实现procedure及function抓取示例:

首先对原库扫描,源数据抓取和数据库是否关闭无关,这保证了即便在数据库受损无法打开的情况下,也可以对代码进行救援:


选择对应schema(这里选HR),Export DDL,然后就开始工作了:

注意:
1. 你需要有一个新库(或目标库)来承接导出的DDL数据,这样方便你的代码检查。
2. 最好给目标库建立一个新用户(在连接中使用新用户来做连接),将procedure 或 function导入到新用户名下,这样方便区分。
3. 使用此功能需要注册企业版。



页: [1]
查看完整版本: 救火!!十万火急 - 数据库procedure抓取