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-------------- ...
随机推荐
- android开发遇到的问题
1.虚拟机运行出下面的错Failed to allocate memory: 8 Failed to allocate memory: 8This application has requested ...
- Cenots更换YUM源的问题
[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...
- PHP正在进行时-字符串动态插入变量
在PHP中,一般用双引号或者单引号将字符串括起来. echo "张三李四王五叫上赵六一起去'喝酒'". 如果要动态将将数据插入到字符串中,我们除了使用.号拼接,还可以通过使用{}来 ...
- ML笔记_机器学习基石01
1 定义 机器学习 (Machine Learning):improving some performance measure with experience computed from data ...
- 通过Chocolatey软件包管理器安装.NET Core
在Linux的世界里,有了yum/apt-get百分之九十的软件都可以通过它来安装管理.但是在Windows系统上,装个软件还是挺折腾的.比如我要装个Chrome浏览器,我先得打开IE浏览器吧,我还打 ...
- Android之Bmob移动后端云服务器
源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己 ...
- 前端学习:html基础学习二
3.文档设置标记上-格式标记(主要内容标记<br><p><center><pre><li><ul><ol><d ...
- C#学习笔记-基础知识篇(不定期更新)
1.父类必须包含构造函数么? 父类必须要有一个构造函数,有参无参都可以. 构造函数是对象的基本,没有构造函数就没有对象,若父类中显示的有参数的构造函数,在子类继承就必须写一个构造函数来调用父类的构造函 ...
- 细说log4j
可能做过java项目的基本上都是用过log4j,它是用来做java日志的.比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使用log4j标记某某模块启动了. 努力的 ...
- BZOJ 3098: Hash Killer II(新生必做的水题)
3098: Hash Killer II Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1555 Solved: ...