介绍

在Oracle BPM中如何动态指定审批人,你可能觉得这问题很简单,在UserTask前面加上获取人员的Service就行了,这个也是一般做法,如图

在Service里可以调用第三方接口也可以调用存储过程,但如果这里想调用java代码该如何实现?有两个方案

  • 把代码发布成webservice或者rest接口,通过service进行调用
  • 借助script组件,script可以执行java代码,如图

把代码发布成webservice,增加了工作量,也增加了系统的复杂度,动态获取审批人问题变成了第三方系统集成问题,script组件的引入污染了流程图,试想如果每个节点都需要同样的计算逻辑,那么在每个节点前面都需要加上script组件,不仅不利于后期维护,而且也会影响最终给用户的流程图,影响流程图的美观。那有办法两者兼得吗,最近在看老外做的一个bpm项目,发现了一个解决方案。

Read the rest of this entry

背景

之前发表过一篇Oracle 12c RAC到单机数据迁移的文章,介绍了Oracle 12c从RAC到单机的数据迁移过程,本文在此基础上继续介绍从单机到RAC的迁移过程。

阅读本文之前建议先阅读Oracle 12c RAC到单机数据迁移了解相关知识点

实现

下文远程数据库指的是需要迁移的远程数据库,本地数据库指的是迁入的目标数据库

背景

某项目数据库磁盘告警,磁盘使用率接近100%

$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda1      ext4       99G   60G   35G  64% /
devtmpfs       devtmpfs   32G     0   32G   0% /dev
tmpfs          tmpfs      32G   69M   32G   1% /dev/shm
tmpfs          tmpfs      32G  7.8M   32G   1% /run
tmpfs          tmpfs      32G     0   32G   0% /sys/fs/cgroup
/dev/vdc1      ext4       99G   94G   52M 100% /u01/oracle
/dev/vdb4      ext3       99G   30G   64G  32% /soa
tmpfs          tmpfs     6.3G     0  6.3G   0% /run/user/1002
tmpfs          tmpfs     6.3G   52K  6.3G   1% /run/user/1003
tmpfs          tmpfs     6.3G     0  6.3G   0% /run/user/1005

可以看到/dev/vdc1使用率已经100%

Read the rest of this entry

背景

某项目需要对生产环境数据库进行数据迁移,需要迁移的数据库版本为12.2.0.1.0RAC双节点,目标数据库为单实例数据库,版本一样。简单一句话就是,需要将数据从rac迁移到单机。

方案

本次尝试过以下三种方案

  • 通过rman进行备份迁移,但因为rac数据库和单机数据库控制文件spfile存在差异,需要手动修改的地方较多,在迁移过程中并不顺利,考虑到数据的一致性,最后放弃该方案。方案可以参考Steps to restore from RAC to Single Instance (RMAN)
  • 通过expdp和impdp数据泵方式进行迁移,方案可以参考Oracle 12c pdb使用expdp/impdp导入导出,impdp导入时出现较多错误,错误都集中其中一个schema上,最后单独对该schema进行导入,但因为错误太多不排除其他schema出现错误,也是考虑到数据的完整性,最后虽然成功导入但还是放弃该方案。
  • 通过oracle 12c新特性克隆远程数据库的方案对数据进行迁移,cdb和pdb是oracle 12c的一个新特性,允许oracle数据库以多租户多实例方式运行,每个用户可以分配一个cdb(相当于一台数据库主机),每个cdb可以创建多个pdb(pluggable database,可插拔数据库),不同数据库之间pdb可以克隆。

Read the rest of this entry

,

背景

最近需要给一个项目做数据备份,由于数据量较小(一百多兆)就没考虑用rman之类的工具进行备份,直接用数据泵(expdp)进行导出,然后将数据本地存储。脚本写好后,通过crontab进行定时调用即可,问题就出在crontab上,手动执行脚本是可以正常运行,通过crontab就不行。

expdb

同步脚本逻辑比较简单,脚本如下:

#!/bin/bash
file=DB_$(date +%Y%m%d).dmp
echo "dump file ==>"$file
expdp system/password schemas=FND,FUSION directory=DB_DUMP_DIR dumpfile=$file
cd /u01/dump
zip $file.zip $file
find /u01/dump/ -name "*.zip" -mtime +5 -exec rm {} \;
find /u01/dump/ -name "*.dmp" -exec rm {} \;
scp $file.zip oracle@172.10.10.1:/home/oracle/db_db_backup
ssh oracle@172.10.10.1 find /home/oracle/db_db_backup -name "*.zip" -mtime +30 -exec rm {} \;

Read the rest of this entry

DB Time

物理CPU和逻辑CPU

首先得理解物理cpu和逻辑cpu的区别

物理cpu比较好理解,就是主板上有几个cpu就有多少个物理CPU,没颗物理cpu有1个或者多个物理内核,每个内核都可以作为单独cpu使用,为了和物理cpu区分开,内核的cpu成为逻辑cpu,因此
逻辑cpu = 物理cpu * cpu核数

在开启超线程后,逻辑cpu计算如下:

逻辑cpu = 物理cpu * cpu核数 * 2

Read the rest of this entry