Micro Focus Server Express 5.1 J
Red Hat Enterprise Linux 6.1 (64-Bit x86_64 日立強化版)
動作検証 検証結果報告書
2011 年 10 月 24 日
株式会社 日立製作所
マイクロフォーカス株式会社
1. 検証概要、目的及びテスト方法
1.1 検証概要
既に Red Hat Enterprise Linux 5.5 for x86-64 で動作保証されている Micro Focus Server
Express 5.1 J を Red Hat Enterprise Linux Server 6.1 (64-Bit x86_64 日立強化版) 上で動作
検証しました。
1.2 目的及びテスト方法
Micro Focus Server Express 5.1 J は、現在 Red Hat Enterprise Linux 5.5 for x86-64
で動作保証済みです。また、Red Hat Enterprise Linux Server 6.1 x86_64 上の動作に
ついては別途検証が完了し、
「http://www.microfocus.co.jp/resources/whitepaper/pdf/white_paper_042.pdf」
にて報告がなされています。
Red Hat Enterprise Linux Server 6.1 (64-Bit x86_64 日立強化版) は、Red Hat
Enterprise Linux Server 6.1 x86_64 の標準ディストリビューションとのバイナリ互
換性を保証しているため、この環境でもそのまま動作するはずです。今回、COBOL 言語
の機能を網羅的に実行するテストスートを実行することによって、このことを実際に検
証しました。
テストスートは、ANSI85 COBOL 構文を網羅的にテストするものを使用しました。これ
によって、COBOL コンパイラが使用するすべての CPU 命令とシステムコールを網羅で
きるので、OS バージョン独自のアーキテクチャの非互換があった場合にでも検出できま
す。
また、Oracle データベースにアクセスする Pro*COBOL プリコンパイラの併用テストも
Oracle 提供サンプルを使用し実行しました。
2. 検証環境
ハードウェア
機種:BladeSymphony BS320
CPU:Intel Xeon X5675 3.06GHz×2 (12core)
Memory:48GB
HDD:600GB×2(RAID1)
ソフトウェア
AP サーバ:
OS:Red Hat Enterprise Linux 6.1 (64-Bit x86_64 日立強化版)
*下記パッケージ追加
libstdc++-4.4.5-6.el6.x86_64
libstdc++-4.4.5-6.el6.i686
glibc-devel-2.12-1.25
DB:Oracle Database 11g Release 2 Client (11.2.0.1.0) for Linux x86-64
Oracle Database 11g Release 2 Client (11.2.0.1.0) for Linux x86 (別途インストール)
COBOL アプリケーションサーバ:
Micro Focus Server Express 5.1 J WrapPack 5
DB サーバ:
OS:Oracle Linux Release 6 Update 1 (64-Bit x86_64)
DB:Oracle Database 11g Release 2 (11.2.0.1.0) Enterprise Edition
システム構成
物理環境 Red Hat Enterprise Linux 6.1 (64bit版) (日立強化版) KVM Red Hat Enterprise Linux 6.1 (64bit版) (日立強化版) Oracle Database 11g Release 2 Client (11.2.0.1.0) for Linux x86 Micro Focus Server Express 5.1J for x64/x86 Linux APサーバ(仮想環境) DBサーバ(物理環境) Oracle Linux Release 6 Update 1 for x86_64 (64 Bit) Oracle Database 11g Release 2 (11.2.0.1.0) Enterprise Edition ホストOS ゲストOS3. テスト内容
(1) ANSI85 規格 COBOL の言語機能の網羅テスト
以下の試験項目を、32-Bit モードおよび 64-Bit モードの.int コード、.gnt コード、および
実行形式でシフト JIS ロケールにて実行し検証しました:
中核 94 本、順編成ファイル 85 本、相対編成ファイル 35 本、索引編成ファイル 42 本、ソ ートマージ 40 本、プログラム間通信 47 本、組み込み関数 42 本
(2) Pro*COBOL プリコンパイラの併用テスト
Oracle Database 11g R2 で提供されているサンプルソースおよび MAKE ファイルにより、
32-Bit モードおよび 64-Bit モードでのプリコンパイルおよびコンパイル実行し検証しま
した。
4. 結果
4.1 検証環境の準備
Red Hat Enterprise Linux 6.1 (64-Bit x86_64 日立強化版)がインストールされた AP サーバ
環境に Oracle Database 11g Release 2 Client (11.2.0.1.0) for Linux x86-64、Oracle Database 11g
Release 2 Client (11.2.0.1.0) for Linux x86 がインストールされた後、以下の作業を行いまし
た:
(1) 以下によって ShiftJIS ロケールを追加
localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
レッドハット様の FAQ 記事参考
http://www.jp.redhat.com/FAQ/index_support_2.html#19
4.2 インストール
Server Express 5.1 J の製品 CD-ROM から標準の方法でインストールすることができま
した。
4.3 デフォルト構成の変更
上記の方法でインストールした結果、ANSI85 規格 COBOL の言語機能の網羅テストスー
トの.int コード、.gnt コード、および実行形式の実行について問題なく行うことができま
した。なお、Server Express がリンク時に参照する GLIBC のパスが、デフォルトで RHEL
5.5 のものになっていますので、Server Express のインストール後に構成ファイルを以下
のように変更する必要があります:
32-Bit モード用構成ファイル:$COBDIR/etc/cobopt
-C nolist
set GCC_LIB=/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32
64-Bit モード用構成ファイル:$COBDIR/etc/cobopt64
-C nolist
set GCC_LIB=/usr/lib/gcc/x86_64-redhat-linux/4.4.4
4.4 テストプログラム実行結果
上記のテスト内容のすべてを実行し、問題は検出されませんでした。
参考:
Oracle Database 11g R2 提供サンプルによるプリコンパイルおよびコンパイル実行
* コンパイル時に「
* 無視 - NESTCALL」というメッセージが表示されますが、これは
Oracle Database 11g R2 提供サンプルの MAKE ファイルによるコンパイラ指令に基づ
くものです。使用できない指令のためにメッセージが表示されますが特に処理に影響
しません。
変更前:
COBFLAGS=-C IBMCOMP -C NESTCALL -t -x
変更後:
COBFLAGS=-C IBMCOMP -t -x
UTF-8 & 64-Bit モード
[orcl64]$ cat t11 # client11 export ORACLE_BASE=/opt/oracle/app export ORACLE_SID=orcl export COBDIR=/opt/microfocus/cobol export COBCPY=$COBDIR/cpylib:$COBCPY export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/client_1 export PATH=$ORACLE_HOME/bin:$COBDIR/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$COBDIR/lib:$LD_LIBRARY_PATH export NLS_LANG=JAPANESE_JAPAN.AL32UTF8 export TNS_ADMIN=/opt/oracle/app/product/11.2.0/client_1/network/admin export LANG=ja_JP.UTF-8 export COBMODE=64 rm sample1 rm sample1.cob locale cobmode
make sample1 -f demo_procob.mk ./sample1 [orcl64]$ . ./t11 LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
Effective Default Working Mode: 64 bit
make -f /opt/oracle/app/product/11.2.0/client_1/precomp/demo/procob2/demo_procob.mk build COBS=sample1.cob EXE=sample1
make[1]: ディレクトリ `/home/oracle/orcl64' に入ります procob iname=sample1.pco
Pro*COBOL: Release 11.2.0.1.0 - Production on 水 10 月 19 01:47:19 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. システムのデフォルト・オプション値:
/opt/oracle/app/product/11.2.0/client_1/precomp/admin/pcbcfg.cfg cob -C IBMCOMP -C NESTCALL -x -t -o sample1 sample1.cob
-L/opt/oracle/app/product/11.2.0/client_1/lib/ /opt/oracle/app/product/11.2.0/client_1/precomp/lib/cobsqlintf.o -lclntsh `cat /opt/oracle/app/product/11.2.0/client_1/lib/ldflags` `cat /opt/oracle/app/product/11.2.0/client_1/lib/sysliblist` -ldl -lm * 無視 - NESTCALL make[1]: ディレクトリ `/home/oracle/orcl64' から出ます
CONNECTED TO ORACLE AS USER: scott
ENTER EMP NUMBER (0 TO QUIT): 7900
EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL
ENTER EMP NUMBER (0 TO QUIT):
TOTAL NUMBER QUERIED WAS 0001.
HAVE A GOOD DAY.
[orcl64]$ cob -z -e "" -o orainst.so $ORACLE_HOME/precomp/lib/cobsqlintf.o -L$ORACLE_HOME/lib -lclntsh `cat $ORACLE_HOME/lib/ldflags` `cat
$ORACLE_HOME/lib/sysliblist` -ldl -lm
[orcl64]$ cob -u sample1.cbl -C "INITCALL(orainst.so)" [orcl64]$ cobrun sample1.int
CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001.
HAVE A GOOD DAY.
[orcl64]$ cobrun sample1.gnt CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
UTF-8 & 32-Bit モード
[orcl32]$ cat t12 # client12 export ORACLE_BASE=/opt/oracle/app export ORACLE_SID=orcl export COBDIR=/opt/microfocus/cobol export COBCPY=$COBDIR/cpylib:$COBCPY export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/client_2 export PATH=$ORACLE_HOME/bin:$COBDIR/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$COBDIR/lib:$LD_LIBRARY_PATH export NLS_LANG=JAPANESE_JAPAN.AL32UTF8 export TNS_ADMIN=/opt/oracle/app/product/11.2.0/client_1/network/admin export LANG=ja_JP.UTF-8 export COBMODE=32 rm sample1 rm sample1.cob locale cobmode
make sample1 -f demo_procob.mk ./sample1 [orcl32]$ . ./t12 LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
Effective Default Working Mode: 32 bit
make -f /opt/oracle/app/product/11.2.0/client_2/precomp/demo/procob2/demo_procob.mk build COBS=sample1.cob EXE=sample1
make[1]: ディレクトリ `/home/oracle/orcl32' に入ります procob iname=sample1.pco
Pro*COBOL: Release 11.2.0.1.0 - Production on 水 10 月 19 01:47:52 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. システムのデフォルト・オプション値:
/opt/oracle/app/product/11.2.0/client_2/precomp/admin/pcbcfg.cfg cob -C IBMCOMP -C NESTCALL -t -x -o sample1 sample1.cob
-L/opt/oracle/app/product/11.2.0/client_2/lib/ /opt/oracle/app/product/11.2.0/client_2/precomp/lib/cobsqlintf.o -lclntsh `cat /opt/oracle/app/product/11.2.0/client_2/lib/ldflags` `cat /opt/oracle/app/product/11.2.0/client_2/lib/sysliblist` -lm * 無視 - NESTCALL make[1]: ディレクトリ `/home/oracle/orcl32' から出ます
CONNECTED TO ORACLE AS USER: scott
ENTER EMP NUMBER (0 TO QUIT): 7900
EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL
ENTER EMP NUMBER (0 TO QUIT):
TOTAL NUMBER QUERIED WAS 0001.
HAVE A GOOD DAY.
[orcl32]$ cob -z -e "" -o orainst.so $ORACLE_HOME/precomp/lib/cobsqlintf.o -L$ORACLE_HOME/lib -lclntsh `cat $ORACLE_HOME/lib/ldflags` `cat
$ORACLE_HOME/lib/sysliblist` -ldl -lm
[orcl32]$ cobrun sample1.int CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
[orcl32]$ cobrun sample1.gnt CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
SJIS & 64-Bit モード
[prod64]$ cat t21 # client21 export ORACLE_BASE=/opt/oracle/app export ORACLE_SID=prod export COBDIR=/opt/microfocus/cobol export COBCPY=$COBDIR/cpylib:$COBCPY export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/client_1 export PATH=$ORACLE_HOME/bin:$COBDIR/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$COBDIR/lib:$LD_LIBRARY_PATH export NLS_LANG=JAPANESE_JAPAN.JA16SJIS export TNS_ADMIN=/opt/oracle/app/product/11.2.0/client_2/network/admin export LANG=ja_JP.SJIS export COBMODE=64 rm sample1 rm sample1.cob locale
cobmode
make sample1 -f demo_procob.mk ./sample1 [prod64]$ . ./t21 LANG=ja_JP.SJIS LC_CTYPE="ja_JP.SJIS" LC_NUMERIC="ja_JP.SJIS" LC_TIME="ja_JP.SJIS" LC_COLLATE="ja_JP.SJIS" LC_MONETARY="ja_JP.SJIS" LC_MESSAGES="ja_JP.SJIS" LC_PAPER="ja_JP.SJIS" LC_NAME="ja_JP.SJIS" LC_ADDRESS="ja_JP.SJIS" LC_TELEPHONE="ja_JP.SJIS" LC_MEASUREMENT="ja_JP.SJIS" LC_IDENTIFICATION="ja_JP.SJIS" LC_ALL=
Effective Default Working Mode: 64 bit
make -f /opt/oracle/app/product/11.2.0/client_1/precomp/demo/procob2/demo_procob.mk build COBS=sample1.cob EXE=sample1
make[1]: ディレクトリ `/home/oracle/prod64' に入ります procob iname=sample1.pco
Pro*COBOL: Release 11.2.0.1.0 - Production on 水 10 月 19 01:48:22 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. システムのデフォルト・オプション値:
/opt/oracle/app/product/11.2.0/client_1/precomp/admin/pcbcfg.cfg cob -C IBMCOMP -C NESTCALL -x -t -o sample1 sample1.cob
-L/opt/oracle/app/product/11.2.0/client_1/lib/ /opt/oracle/app/product/11.2.0/client_1/precomp/lib/cobsqlintf.o -lclntsh `cat /opt/oracle/app/product/11.2.0/client_1/lib/ldflags` `cat /opt/oracle/app/product/11.2.0/client_1/lib/sysliblist` -ldl -lm * 無視 - NESTCALL make[1]: ディレクトリ `/home/oracle/prod64' から出ます
CONNECTED TO ORACLE AS USER: scott
ENTER EMP NUMBER (0 TO QUIT): 7900
--- --- --- JAMES 950.00 NULL
ENTER EMP NUMBER (0 TO QUIT):
TOTAL NUMBER QUERIED WAS 0001.
HAVE A GOOD DAY.
[prod64]$ cob -z -e "" -o orainst.so $ORACLE_HOME/precomp/lib/cobsqlintf.o -L$ORACLE_HOME/lib -lclntsh `cat $ORACLE_HOME/lib/ldflags` `cat
$ORACLE_HOME/lib/sysliblist` -ldl -lm
[prod64]$ cob -u sample1.cbl -C "INITCALL(orainst.so)" [prod64]$ cobrun sample1.int
CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
[prod64]$ cobrun sample1.gnt CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
SJIS & 32-Bit モード
[prod32]$ cat t22 # client22
export ORACLE_SID=prod export COBDIR=/opt/microfocus/cobol export COBCPY=$COBDIR/cpylib:$COBCPY export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/client_2 export PATH=$ORACLE_HOME/bin:$COBDIR/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$COBDIR/lib:$LD_LIBRARY_PATH export NLS_LANG=JAPANESE_JAPAN.JA16SJIS export TNS_ADMIN=/opt/oracle/app/product/11.2.0/client_2/network/admin export LANG=ja_JP.SJIS export COBMODE=32 rm sample1 rm sample1.cob locale cobmode
make sample1 -f demo_procob.mk ./sample1 [prod32]$ . ./t22 LANG=ja_JP.SJIS LC_CTYPE="ja_JP.SJIS" LC_NUMERIC="ja_JP.SJIS" LC_TIME="ja_JP.SJIS" LC_COLLATE="ja_JP.SJIS" LC_MONETARY="ja_JP.SJIS" LC_MESSAGES="ja_JP.SJIS" LC_PAPER="ja_JP.SJIS" LC_NAME="ja_JP.SJIS" LC_ADDRESS="ja_JP.SJIS" LC_TELEPHONE="ja_JP.SJIS" LC_MEASUREMENT="ja_JP.SJIS" LC_IDENTIFICATION="ja_JP.SJIS" LC_ALL=
Effective Default Working Mode: 32 bit
make -f /opt/oracle/app/product/11.2.0/client_2/precomp/demo/procob2/demo_procob.mk build COBS=sample1.cob EXE=sample1
make[1]: ディレクトリ `/home/oracle/prod32' に入ります procob iname=sample1.pco
Pro*COBOL: Release 11.2.0.1.0 - Production on 水 10 月 19 01:48:43 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. システムのデフォルト・オプション値:
cob -C IBMCOMP -C NESTCALL -t -x -o sample1 sample1.cob -L/opt/oracle/app/product/11.2.0/client_2/lib/ /opt/oracle/app/product/11.2.0/client_2/precomp/lib/cobsqlintf.o -lclntsh `cat /opt/oracle/app/product/11.2.0/client_2/lib/ldflags` `cat /opt/oracle/app/product/11.2.0/client_2/lib/sysliblist` -lm * 無視 - NESTCALL make[1]: ディレクトリ `/home/oracle/prod32' から出ます
CONNECTED TO ORACLE AS USER: scott
ENTER EMP NUMBER (0 TO QUIT): 7900
EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL
ENTER EMP NUMBER (0 TO QUIT):
TOTAL NUMBER QUERIED WAS 0001.
HAVE A GOOD DAY.
[prod32]$ cob -z -e "" -o orainst.so $ORACLE_HOME/precomp/lib/cobsqlintf.o -L$ORACLE_HOME/lib -lclntsh `cat $ORACLE_HOME/lib/ldflags` `cat
$ORACLE_HOME/lib/sysliblist` -ldl -lm
[prod32]$ cob -u sample1.cbl -C "INITCALL(orainst.so)" [prod32]$ cobrun sample1.int
CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION --- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.
[prod32]$ cobrun sample1.gnt CONNECTED TO ORACLE AS USER: SCOTT ENTER EMP NUMBER (0 TO QUIT): 7900 EMPLOYEE SALARY COMMISSION
--- --- --- JAMES 950.00 NULL ENTER EMP NUMBER (0 TO QUIT): TOTAL NUMBER QUERIED WAS 0001. HAVE A GOOD DAY.