Oracle通过JOB定时执行存储过程实现两表数据比对
需求:
第三方云平台管理的虚拟机会进行关机、资源扩展等操作,因此开关机状态、CPU、内存、磁盘大小等数据需要进行同步。这里第三方云平台是BMC CLM云平台,底层虚拟化平台是Vcenter。进行同步的内容包括:PowerState,MemoryMB,NumCPU,HDNAME,CapacityKB,唯一键是Cluster,VMName,HDNAME
解决思路:
1 首先通过VMware vSphere PowerCLI工具每天抓取这些需要同步的数据
2 通过sqlload将数据放入BMC Cloud Lifecycle Management平台的oracle数据库中
3 在oracle数据库中建立存储过程,通过minus函数比对插入数据和已有数据的差异,并将差异结果放入一个表中。创建一个Oracle JOB每天执行这个存储过程。
4 差异结果已经找出,调用BMC内部接口只同步这几台机器即可,大大减少了数据量和工作负载
具体实现:
1 VMware vSphere PowerCLI每天抓取虚拟机配置信息
#脚本和上篇文章类似 Get-VM | %{$_.HardDisks | Select @{N="Cluster";E={$_.Parent.VMHost.Parent}},@{N="VMName";E={$_.Parent.Name}},@{N="PowerState";E={$_.Parent.PowerState}},` @{N="MemoryMB";E={$_.Parent.MemoryMB}},@{N="NumCPU";E={$_.Parent.NumCPU}},@{N="HDNAME";E={$_.Name}},CapacityKB}` | Export-Csv -NoTypeInformation -encoding utf8 c:\VMInfo\"Export67VMConfig$(Get-Date -Format 'yyyyMMdd').csv"
2 通过sqlload将数据放入BMC Cloud Lifecycle Management平台的oracle数据库中
具体sqlload方法参看前面文章
3 Oracle定期比对
这里注意minus函数的使用,这个函数比对全部字段,任意一个字段不同,都会视为差异
说明:下面sql语句中 表VM_Config_Dayly是每天插入的全部数据的表,表VM_Config_Update_Dayly是差异数据存放的表
3.1 首先创建比对作业的存储过程
create or replace procedure sp_update_vmdata as BEGIN delete from VM_Config_Update_Dayly; --插入前清空历史数据 commit; insert into VM_Config_Update_Dayly --插入下面查询出的数据 (uuid, CLUSTER1, VMNAME, POWERSTATE, MEMORYMB, NUMCPU, HDNAME, CAPACITYKB) select con.uuid, --查询差异数据的准确值 con.CLUSTER1, con.VMNAME, con.POWERSTATE, con.MEMORYMB, con.NUMCPU, con.HDNAME, con.CAPACITYKB from VM_Config_Dayly con, (select cl.shortdescription CLUSTER1, --把差异数据取出来 co.name VMNAME, (case co.state when 'Running' then 'PoweredOn' else 'PoweredOff' end) as POWERSTATE, co.totalphysicalmemory MEMORYMB, co.cloudtotalcpu NUMCPU, lo.name HDNAME, lo.blocksize CapacitiyKB from BMC_CORE_BMC_COMPUTERSYSTEM co, BMC_CORE_BMC_DEPENDENCY de, BMC_CORE_BMC_CLUSTER cl, BMC_CORE_BMC_LOGICALDISK lo, BMC_CORE_BMC_COMPONENT cp where co.instanceid = de.destination_instanceid and de.source_instanceid = cl.instanceid and de.source_classid = 'BMC_CLUSTER' and co.instanceid = cp.source_instanceid and cp.destination_instanceid = lo.instanceid and cp.destination_classid = 'BMC_LOGICALDISK' and co.cloudclass = 'virtualguest' MINUS select CLUSTER1, VMNAME, POWERSTATE, MEMORYMB, NUMCPU, HDNAME, CAPACITYKB from VM_Config_Dayly t) diff where con.CLUSTER1 = diff.CLUSTER1 and con.vmname = diff.vmname and con.hdname = diff.hdname; commit; end sp_update_vmdata;
3.2 创建JOB定期执行存储上面的存储过程
declare job_update_vmdata number; begin 用户.dbms_job.submit(job_update_vmdata,),'trunc(sysdate+1)+9/24'); commit; end; --注意上面的用户默认是sys,但不写也可以,我老是报错就栽倒在这了
4 差异结果同步
目前BMC还不支持同步功能的自动调用,但可以手动触发同步功能,如下图点击
oracle 构造列和默认列值 可以如下
select sysdate,1 t from dual
select sysdate,'value' Header from dual
参考
Oracle通过JOB定时执行存储过程实现两表数据比对的更多相关文章
- 创建JOB定时执行存储过程
创建JOB定时执行存储过程有两种方式 方式1:通过plsql手动配置job,如下图: 方式2:通过sql语句,如下sql declare job_OpAutoDta pls_integer;--声明一 ...
- Oracle定时执行存储过程(转)
定时执行存储过程在平时开发中经常会用到,年前的时候自己也做了一个,由于时间关系一直没能记录,现记录下来. 首先用一个完整的例子来实现定时执行存储过程. 任务目标:每小时向test表中插入一 ...
- oracle job 定时执行 存储过程
oracle job 定时执行 存储过程 一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a ...
- [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...
- oracle job有定时执行功能
oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的 ...
- 0327定时执行--存储过程--dbms_job--dbms_scheduler.create_job
--oracle job 定时执行 存储过程 --建一张测试表 create table Person( name ), sex ) ); / --创建测试的存储过程 create or replac ...
- ORACLE 定时执行存储过程
推荐用dbms_scheduler方式更好 (2012-11-19注) /* 查询: select job,broken,what,interval,t.* from user_jobs t; job ...
- oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
来源于:http://www.cnblogs.com/wangfg/p/5110831.html 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; s ...
- Oracle定时执行存储过程
首先查看 SQL> show parameter job NAME TYPE VALUE-------------- ...
随机推荐
- 记一次使用Node.js electron打包网站的记录
具体步骤请参考:http://blog.csdn.net/a727911438/article/details/70834467 打包时出现了不少问题,逐一记录下来以供其他人参考. package.j ...
- OLEDB数据源
title: OLEDB数据源 date: 2018-01-12 21:42:37 tags: [OLEDB, 数据库编程, VC++, 数据库] categories: windows 数据库编程 ...
- 表迁移工具的选型-xtrabackup的使用
1.1. 场景 有的时候test人员可能需要在测试库上比较新的数据,这时候只能是从生产库上面去那了.如果是小表还好实用mysqldump/mysqlpump就可以轻松的解决.但是,如果遇到了大表这将是 ...
- 【转载】LINUX上MYSQL优化三板斧
现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简单的策略.这些方法都有助于改进MySQL的性能. 闲话少说,进入正题. 一. ...
- Python 之 基础知识(一)
首先,对于初学者在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试 对于商业项目而言,通常在一个项目中,只有一个可以执行的Python程序 一.注释 为了提高可读性,注释 ...
- 2017 ICPC区域赛(西安站)--- J题 LOL(DP)
题目链接 problem description 5 friends play LOL together . Every one should BAN one character and PICK o ...
- Machine Learning - week 3
Classification 使用线性回归来分类,会很不准确.并且,它的范围也会超出 {0, 1}.所以使用下面的逻辑回归模型. Hypothesis representation 线性回归中 hθ( ...
- 【Java学习笔记之十八】Javadoc注释的用法
Javadoc注释的用法 Java 文档 // 注释一行/* ...... */ 注释若干行/** ...... */ 注释若干行,并写入 javadoc 文档 通常这种注释的多行写法如下: /*** ...
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...
- NYoj289苹果(0-1背包)
苹果 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. 输 ...