oracle job的迁移
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,因为JOB的内容是写死的,如果使用remap导入到别的用户下,其log_user等还是原来的,再加上job的id是固定的,很可能和当前库有冲突,所以建议取出job的ddl。dbms_metadata.
千家信息网最后更新 2025年11月07日oracle job的迁移
因为JOB的内容是写死的,如果使用remap导入到别的用户下,其log_user等还是原来的,再加上job的id是固定的,很可能和当前库有冲突,所以建议取出job的ddl。
dbms_metadata.get_ddl是不可以的。不行你们试试就知道了。
所以我写了个plsql
set serveroutput on size 100000set termout onset feedback offclear screenspool /opt/soft/bak/make_jobs.sqlprompt -- exporting jobsbegin<< export_jobs >>declare subtype job_type is user_jobs.JOB%type ; subtype max_text_type is varchar2( 8191 char ) ; type job_tab_type is table of job_type index by pls_integer ; type sql_tab_type is table of max_text_type index by pls_integer ; job_tab job_tab_type ; sql_tab sql_tab_type ; job pls_integer ; what pls_integer ; next_date pls_integer ; interval pls_integer ; no_parse pls_integer ; procedure get_jobs is begin select j.JOB bulk collect into job_tab from user_jobs j order by 1 ; end get_jobs ; procedure format( x pls_integer ) is sqlx max_text_type := null ; begin sqlx := 'begin' || chr(10); job := instr( sql_tab(x), '(job=>' ) ; sqlx := sqlx || substr( sql_tab(x), 1, job-1 ) || chr(10) ; what := instr( sql_tab(x),',what=>' ) ; sqlx := sqlx || substr( sql_tab(x), job, what-job ) || chr(10) ; next_date := instr( sql_tab(x),',next_date=>' ) ; sqlx := sqlx || substr( sql_tab(x), what, next_date-what ) || chr(10) ; interval := instr( sql_tab(x),',interval=>' ) ; -- sqlx := sqlx || substr( sql_tab(x), next_date, interval-next_date ) || chr(10) ; sqlx := sqlx || q'|,next_date=>'01-JAN-3000'|' || chr(10) ; no_parse := instr( sql_tab(x),',no_parse=>' ) ; sqlx := sqlx || substr( sql_tab(x), interval, no_parse-interval ) || chr(10) ; sqlx := sqlx || ',no_parse=>TRUE' || chr(10) || ');' || chr(10) ; sqlx := sqlx || 'commit;' || chr(10) || chr(10) ; sqlx := sqlx || 'end;' || chr(10) || '/' || chr(10) ; sql_tab(x) := sqlx; end format ; begin get_jobs; if job_tab.count > 0 then for i in 1 .. job_tab.count loop sql_tab(i) := ' '; sys.dbms_job.user_export ( job => job_tab(i) , mycall => sql_tab(i) ); format(i) ; dbms_output.put_line( sql_tab(i) ) ; end loop ; else dbms_output.put_line( '-- Nothing to do.' ) ; end if ;end export_jobs;end;/spool off
然后呢,用这个得到输出重建job。如果你遇到
ORA-00001: unique constraint (SYS.I_JOB_JOB) violated
就说明job列重复了,这时候你有两种方法,一个是重置job,改个没人用的。
另一种就是删了现在的job重建。
删除语法是
exec dbms_job.remove(25);
如果删除时遇到如下:
ORA-23421: job number 387 is not a job in the job queue
很有可能是因为你的用户不是job的owner。
select job,log_user,priv_user,schema from dba_jobs where job=25;
然后切换过去再删除,同理,建立也必须使用当前用户。
用户
不行
内容
就是
建议
方法
语法
还是
冲突
切换
输出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发酒店管理系统
怎么样开发游戏软件开发
ado.连接数据库
服务器挂在华为存储
杨浦区参考网络技术服务怎么样
软件开发中测试盒是什么
上海云谷网络技术有限公司
软件开发面试问你项目
软件开发适合什么笔记本电脑
最厉害的服务器
社交软件开发难点
wince 访问数据库
网络安全中的拖库
小米查找定位服务器出错
梁羽生小说软件开发
如何切换显示屏服务器
霞浦民宿软件开发
文明重启孤狼服务器配置
计算机网络技术基本了解知识
软件开发技术评级
承德创巨网络技术服务可靠吗
pc软件开发公司
5g网络技术设备
access数据库专用于
网络技术专业的专业术语
我的世界服务器违规去哪举报
mysql数据库前台工具
北京时间 服务器
山西手机软件开发优选企业
电视剧网络安全比赛