Shanghai Tongfu Technology Blog - Part 2

利用VirtualBox在Oracle Linux 7安装Oracle 19c RAC Part1-安装虚拟机

起因

Oracle于9月份举办了针对合作伙伴的Oracle数据库19c新功能培训,并号召ISV进行国内第一轮的应用系统数据库认证。请郭老板着手准备认证所需的资料,没想到郭同学一再跳票,问了原因才知道是没有RAC环境导致,自告奋勇在公司服务器上帮他搭建环境。想着装RAC无非是举手之劳,没想到凭着以前的经验安装Oracle RAC,还是踩了不少的坑,是为之记。

所需软件

在安装前,准备好搭建环境所需的软件。

安装VirtualBox

我是在Ubuntu 19.10下安装VirtualBox软件,使用以下命令完成安装,如果是其他Linux发行版或者Windows请运行相应命令。

$ sudo dpkg -i virtualbox-6.0_6.0.14-133895~Ubuntu~bionic_amd64.deb

创建虚机 我们计划部署两节点的RAC,所以先创建一个虚机,配置好RAC所需的环境参数,然后复制虚机得到第二个节点。 启动VirtualBox,点击工具栏的New按钮,名称设置为ol7-19-rac1,操作系统类型为Linux,版本为Oracle(64-bit),点击Next 设置“16384”做为内存大小,点击Next。 Memory Size 硬盘页面接受默认的创建新虚拟硬盘,点击Create。 Hard Disk 进入硬盘创建向导,接受默认的VDI硬盘类型,点击Next Hard disk file type 存储方式接受默认的“Dynamically allocated”,点Next Storage on physical hard disk 接受默位置,设置硬盘尺寸为100G,点击Create完成虚拟机的创建。 File location and size 新建名称为“ol17-19-rac1”的虚拟机将在窗口左边列出(忘了截图,用最后的图代替:)),右边窗口点Network链接。 VM List 确认Adapter 1已启用,并设置为Bridged Adapter(因为安装RAC环境要在公司内部网络测试,所以设置为Bridged,如果本机如果本机测试可设置为NAT)。点击Adapter 2页 Adapter 1 确认Adapter 2已启用,并且设置为“Internal Network”。 Adapter 2 点击左侧页面的System,把Boot Order列表中的Floppy去掉。完成虚机的设置。

在虚机安装Oracle Linux

在新创建虚机把光驱映射到下载好的Oracle Linux 7.5的光盘映像文件V975367-01.iso,点击Start启动虚机。 利用光盘启动系统,按I进入Oracle Linux 7.5的安装。 选择以下包进行Oracle Linux的安装
  • Server with GUI
  • Hardware Monitoring Utilities
  • Large Systems Performance
  • Network file system client
  • Performance Tools
  • Compatibility Libraries
  • Development Tools
并对主机名及IP地址进行以下设置: 主机名:ol7-19-rac1 enp0s3: IP=10.0.1.101 Netmask=255.255.255.0 enp0s8: IP=192.168.1.101 Netmask=255.255.255.0 完成虚机Oracle Linux 7.5的安装,重启进入系统。 刚装完系统可能存在虚拟机系统中鼠标移位或者鼠标不工作等情况,可点击VirtualBox的Devices菜单,选择Insert Guest Additions CD images…,装载虚机工具光盘。 在虚拟机Oracle Linux系统里点击Run完成虚机驱动程序的安装(如果出错可通过yum upgrade升级Linux内核解决)。 下一步我们将在虚机系统里进行安装的准备配置,并生成第二台虚拟机。  

UiPath流程中输入点号

做UiPath Level 3 – Advanced Training的Generate Yearly Report任务,设计完Upload Year Report工作流后按常规做单元测试,手动设定了输入参数。

但当跑测试流程里,发现到了输入文件路径活动时,到了扩展名的点字符时流程就卡住了。

开始时以为是字符转义问题,在输入参数的文件名字符串里加上了转义符,但是还是卡在输入文件名环节。折腾了老半天,百思不得其解。

后来无意中发现自己的输入语言是中文,但是输入法是转到了英文输入。难道是这个问题导致的,于是把语言改到中文,重新测试,一次就跑通了。

把Generate Yearly Report整个工作流打包上传到UiPath网站,隔了几分钟就邮件通过说评估通过了。登上网站,很Happy的下载了完成任务的证书。

从这次培训学习中得到的几个经验教训:
1. 注意在开发及测试环境在英文环境;
2. 使用IE浏览器会少很多麻烦;
3.有时候电脑速度太快会使流程捕捉不到页面元素,可以在活动中设置Delay。

解决UiPath REFramework的Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.Data.DataRow’问题

在UiPath Academy做Level 3 – Advanced Training的指定练习Calculate Client Security Hash,使用UiPath的Robotic Enterprise Framework(REFramework)框架,照着向导资料设计好所有工作流,兴冲冲的运行时却抛出了Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.Data.DataRow’ in Assign activity ‘End Process’.错误,流程直接退出。

重复检查,确认自己已经把所有的变量与参数类型均正确设置,但是死活就跑不过去。反复折腾,后来用一个非常诡异的方法解决。

在Main流程下打开End Process,把End Process活动下的赋值TransactionItem=Nothing的Nothing去掉,保存流程。重新设置一次TransactionItem=Nothing,然后保存。

再试试运行流程,神奇地能够正常工作。

BTW:此设置对Cannot assign from type ‘UiPath.Core.QueueItem’ to type ‘System.String’ in Assign activity ‘End Process’.错误同样有效。

安装Oracle JET Core Extension for VSCode

2019年5月20日,Oracle发布了JET 7.0.1版本,同时释出了JET Core Extension for VSCode Beta版。作为VS Code重度用户的俺来说,当然是第一时间下来尝鲜了。

因为是Beta版,该扩展并没有正式发布在VS Code Marketplace,需要在OTN下载手动安装。俺在MAC下用Chrome下载后,发现扩展程序安装文件扩展名为zip,VS Code并没不能辨认,尝试把文件扩展名手工改为VSIX,但在MAC下VS Code还是没能认出是扩展程序(ps:大概是文件权限的问题,但是找到了新方法,就没有去试)。

无意中发现使用Safari在OTN下载文件是正常的VSIX扩展名,后来在Oracle社区发现有人在讨论此问题,说Chrome会自动把文件扩展改为zip,换成Firefox或Edge下载就正常。

打开VS Code,点开左边扩展图标,点右上角的 “…” 打开更多操作菜单,选择“从VSIX安装…”。

 

选择下载的oracle-jet-core-0.5.0.vsix文件,安装JET Core Extension for VSCode。好了,现在可以体验JET的智能提醒和自动完成功能了。

解决Jdeveloper 12C(12.2.1.3.0) CreateProcess error=206问题

已经有阵子没用Jdev写东西了,因一个客户项目,周末打开Jdeveloper写了个Web Service客户端的Java示例程序。驾轻就熟从WSDL生成客户端代码,写了Impl实现,运行测试却碰到了问题,系统提示了以下文件名或扩展名过长的错误信息:

The target .jpr cannot be started because an exception was thrown: java.io.IOException: Cannot run program “C:\Java\jdk1.8.0_121\bin\javaw.exe” (in directory “C:\\src\”): CreateProcess error=206, The filename or extension is too long

仔细看了下错误信息,大概是因为库文件的原因,以下列方式解决:

打开项目属性窗口,把自动引用的JAX-WS Client和JAX-WS Web Service删除掉。

菜单Tools—–>Manage Libraries…

点击New,新建一个名为“ My JAX-WS Client ”用户库,点击“Add Entry”,选择
<JDev安装目录>\wlserver\server\lib\weblogic.jar
<JDev安装目录>\oracle_common\modules\internal\features\jrf_wlsFmw_oracle.jrf.wls.classpath.jar
点OK确认。

重复上面操作,新建立名为“ My JAX-WS Web Service ”的用户库,加入
<JDev安装目录> \wlserver\server\lib\weblogic.jar
点击OK确认。

回到项目属性窗口,加入刚创建的两个用户库,再次Run JAVA代码,成功运行。

后来空了查了下Oracle Support,发现这个问题是Jdeveloper 12.2.1.3.0的一个bug,官方已经有补丁程序释出,具体可以参考Running a Java Class Fails With “CREATEPROCESS ERROR=206” (Doc ID 2330982.1)。

设置Ubuntu Server 18.04自动更新

厌倦了登录服务器经常提示有N个补丁需要更新,需要重新启动之类的,可以通过服务器自动更新解决。

1.安装自动更新支持包

安装unattended-upgrades包。

sudo apt install unattended-upgrades

2.配置自动更新

编辑配置文件

sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

该文件前半段长这样子:

最重要的是把“updates”这一行注释去掉。

“${distro_id}:${distro_codename}-updates”;

建议把自动清理不用内核文件的行也同时打开。

Unattended-Upgrade::Remove-Unused-Kernel-Packages “true”;
Unattended-Upgrade::Remove-Unused-Dependencies “true”;

自动重启及时间看个人喜好打开。

3.启用自动更新

sudo vi /etc/apt/apt.conf.d/20auto-upgrades

按需要修改内容

APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Download-Upgradeable-Packages “1”;
APT::Periodic::AutocleanInterval “3”;
APT::Periodic::Unattended-Upgrade “1”;

4.确认是配置是否起作用

用dry run方式看自动更新配置是否起作用

sudo unattended-upgrades –dry-run –debug

如何从Oracle Container Registry下载Docker镜像

习惯于从Oracle的github站点下载dockerfile,修改后生成自己所需的镜像。但是最近有个项目,自己生成镜像文件后发现磁盘居然满了,连容器都没法跑起来。查了一下镜像占用的磁盘空间,一下子被数字吓到了。


$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE


1c98d8816e19 About an hour ago 3.57GB


localhost/oracle/soasuite 12.2.1.3 078faf1a877d 7 days ago 13.5GB


oracle/fmw-infrastructure 12.2.1.3 d37d67bf7981 8 days ago 5.56GB


oracle/database 18.3.0-ee d9b807a62d9b 2 weeks ago 18GB

被动辄10几个G镜像,这容器怎么跑。但是为了项目可以快速测试,也只能想办法减少镜像的尺寸。看到github上有人吐槽这个问题,O记的工程师建议是去Oracle Container Registry上pull镜像。

去https://container-registry.oracle.com看了一眼,发现同样的image确实要小很多。于是从善如流,决定pull镜像下来用。

先login到站点


docker login container-registry.oracle.com

输入用户名密码后,运行pull镜像命令,连续试了几次都是报了镜像not found: does not exist or no pull access的错。

查了老半天原因,最后发现原来坑爹的O记是需要在Oracle Container Registry的页面上接受协议,才能有下载到镜像。

登录网站,在你需要下载的镜像页面点击协议,在弹出窗口接受协议,然后页面会显示当前用户协议的有效时间。再到系统里用命令pull镜像,正常下载。

Yum Update Error after upgrade CentOS from 6 to 7

一无聊又搞事情,把一台CentOS机器直接从6升级到7,结果升级后要安装东西时,用yum update出现了错误,显示python(abi) = 2.6 is needed by (installed) python-argparse-1.2.1-2.el6.centos.noarch。

放狗搜了半天,试了几种方法还是搞不好。仔细分析具体信息,应该是系统残留的CentOS6包导致的,删除所有的el6包解决问题。

rpm --erase --nodeps $(for pkg in $(rpm -qa | grep '\.el[56]\.' | grep -v kmod | grep -v kernel); do rpm -q $pkg --qf '%{NAME} ' ; done)

解决MacOS xcrun: error: invalid active developer path, missing xcrun的问题

最近开始把VS Code做为主力代码编辑器,结果在MAC上每次打开总提示

Git installation not found.

没有就装呗,打开Console,Git显示

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

重装Xcode command line tool解决

xcode-select  --install

Oracle 12C静默删除CDB

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。

在安装或者维护数据库的过程中,可以通过DBCA对CDB进行静默删除(别问我为什么知道:))。步骤如下:

#dbca -silent -deleteDatabase -sourceDB CDB数据库名

耐心等待至命令完成,正常情况下会出现以下提示:

 
Connecting to database
4% complete
9% complete
14% complete
19% complete
23% complete
28% complete
47% complete
Updating network configuration files
52% complete
Deleting instance and datafiles
76% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/condb0.log" for further details.