Oracle8i Pentium 4プロセッサマシンでインストール中にエラー

Oracle8iインストールエラーがらみの情報。
Pentium 4搭載マシンにOracle8i(8.1.XX)をインストールしようとすると、Oracle Universal Installer(OUI)が起動しない。これはJAVA JITライブラリの不具合によるものらしい。

環境

  • Oracle8i(8.1.XX)
  • Pentium 4プロセッサ搭載マシン

Oracle(8.0.X)製品では発生しない。
※Oracle9i以降の製品(OUI:2.0.1.6.0〜)でも発生しない。

対処法

JITライブラリを無効化してインストールを行う。

  1. Oracle RDBMS Server CD の内容をローカルディスクにコピーする。
  2. コピーしたフォルダにある「symcjit.dll」を適当にリネームする(無効化)。
    symcjit.dll→symcjit.old
  3. コピーしたフォルダ\install\win32\setup.exeをクリックし、Oracle8iをインストールする。

補足

本現象はPentium 4ベースCPUにて発生することが確認されている。マシンに搭載しているCPUのFamilyCodeを確認する手順を以下に示す。

  1. 「スタートメニュー」→「ファイル名を指定して実行」にて「winmsd」と入力し、Exterキーを押す。
  2. システム情報→「システムの概要」よりプロセッサの値を確認する。
x86 Family 15 Model 2 Stepping 9 GenuineIntel ~2992 Mhz


FamilyCodeが"F"または"15"と表示されている場合は、Pentium4ベースのCPUであると判断でき、本現象が発生する可能性がある。

参考

Oracle8i Xeonプロセッサマシンでインストール中にエラー

3,4年ほど前、Oracle8iの開発がまだ多かった頃はよくハマっていた現象。古い情報だけど埋もれると困るのでメモしておく。
Oracle8i(8.1.X)を DUAL CPUマシンへインストールしようとすると、途中でOUI(ORACLE UNIVERSAL INSTALLER)がハングしてしまいインストールが完了出来ない。原因はOUIが利用しているJRE1.1.7らしい。

環境

  • Oracle8i(8.1.XX)
  • Windows2000/XP/2003Server
  • DUAL CPUマシン

Oracle(8.0.X)製品では発生しない。
※Oracle9i以降の製品(OUI:2.0.1.6.0〜,JRE1.1.8.10.0〜)でも発生しない。
※物理的には1つのCPUであっても、結果的に2つのCPUとしてみなされる場合は本現象が発生する。
※WindowsVistaでは試していないが、JREが原因ということは同様なのかな?

対処法

boot.iniを編集して、Oracle8iをインストールする間だけシングルCPUで動作させる。
例)

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn

↓1行コピーして、末尾に"/onecpu"を付記する。

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn /onecpu
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn
方法1 テキストエディタで編集
  1. エクスプローラの「ツール」→「フォルダオプション」を選択する。
    「表示」タブ → "保護されたオペレーティングシステムファイルを表示しない"のチェックを外す。
  2. boot.ini(通常はC:\boot.iniに配置されている)ファイルをメモ帳や秀丸で編集する。
  3. Windowsを再起動後、Oracle8iをインストールする。
方法2 システムプロパティ〜WindowsXPまたは2003Server〜
  1. マイコンピュータ」→右クリック→「プロパティ」でシステムのプロパティを開く。
  2. 「詳細設定」タブを選択し、「起動と回復」ボタンを押す。
  3. 「編集」ボタンを押すと、boot.iniファイルがテキストエディタで開かれるので編集する。
  4. Windowsを再起動後、Oracle8iをインストールする。


Oracle8iインストール後は、boot.iniの設定を元に戻し、DUAL CPUで動作しているか確認する。

補足

本現象は英語版では発生しないので、一時的に使用言語を英語(US)に変更してもインストールは出来る。

  1. 「スタート」→「設定」→「コントロールパネル」→「地域のオプション」
    英語を選択する。
  2. Oracle8iをインストールする。
  3. [Instllation Type]画面では、"Custom"を選択する。
  4. [Available Product Component]画面では、[Product Languages...]ボタンを選択し、
    [Language Selection] ダイアログから、Select Languages:、"Japanese"を追加する。(日本語メッセージファイルを登録するため)
  5. 「スタート」→「設定」→「コントロールパネル」→「地域のオプション」
    日本語に戻す。

ただしこの場合、Oracleアプリケーション自体が英語モードで実行される。

参考

VirtualPCにWindowsVistaをインストールすると英語キーボードになる

VirtualPCにWindowsVistaをインストールすると、再起動後になぜか英語キーボードになってしまう。
ログイン後にキーボードの設定を手動で変更しよう。
※ログインパスワードに"_"を使っていてログインできなくなった私のような方は、shift+"ほ"キーを使いましょう。

キーボード設定の変更

  • 「コントロールパネル」→「時計、言語、および地域」より「キーボードまたは入力方法の変更」をクリックする。

  • 「地域と言語のオプション」→「キーボードと言語」タブを選択する。
  • 「キーボードの変更」ボタンを押す。
  • 「テキストサービスと入力言語」→「全般」タブを選択する。
  • 「追加」ボタンを押す。
  • 「入力言語の追加」より「日本語」を選択し、「OK」ボタンを押す。
  • 既存の英語キーボード設定を選択し、「削除」ボタンを押す。


これで日本語キーボード設定は完了。

Windows2003Server サービスを登録する

Windowsサービスにアプリケーションを手動で登録する手順を以下に記述する。

サンプルパラメータ

今回は例として以下の値を使う。

リソースキットツールインストール先 C:\win2003rkt
登録するサービス名 ServiceTest
登録するEXEファイルディレクトリ E:\work
登録するEXEファイルパス E:\work\ServiceTest.exe

リソースキットツールのインストール

登録にはinstsrv.exeとsrvany.exeというコマンドを使う。これらはWindowsのリソースキットに含まれる。

  • Windows2003Server リソースキットツール
  • ダウンロードしたファイルを実行し、インストールする。
  • インストールしたフォルダ下、「Tools」にinstsrv.exesrvany.exeがあることを確認する。

レジストリへの登録

C:\> "C:\win2003rkt\Tools\instsrv.exe" ServiceTest "C:\win2003rkt\Tools\srvany.exe"

レジストリの編集

※編集前に必ずバックアップを取りましょう!

  • レジストリエディタを起動する。「スタートメニュー」→「ファイル名を指定して実行」→「"regedit"と入力してEnter」
  • 「HLEY_LOCAL_MACHINE」→「SYSTEM」→「CurrentControlSet」→「Service」と開き、上で設定したサービス名(ここではServiceTest)のキーを探す。
  • 「SeviceTest」に以下の項目を新規追加する。(右クリック→「新規」)
キー 文字列
Parameters AppDirectry E:\work
Parameters Application E:\work\ServiceTest.exe


サービスの確認

  • 「コントロールパネル」→「管理ツール」→「サービス」で、サービス一覧を開き、ServiceTestが登録されていることを確認する。

補足

  • サービスを削除する場合は、以下のコマンドを実行する。
C:\> "C:\win2003rkt\Tools\instsrv.exe" ServiceTest REMOVE

Vista+VisualStudio6.0 起動時にオートメーションエラー

WindowsVistaにVisualStudio6.0をインストールすると、起動時に以下のようなエラーがでる。

オートメーションエラーです。OLEレジストリへのアクセスエラーです

どうやら初回起動時にレジストリ登録を行っているらしい。
VisualStudio 6.0のexeファイルを「右クリック」→「管理者として起動」として、一度管理者権限を持った状態で起動すると、エラーが発生しなくなる。
以降は普通に起動してOK。

CrystalReports x ActiveReports比較

VB6で開発したアプリケーションをVistaで動作させたいのだけれど、帳票を作っているCrystalReports(含バーコード)が対応していないことが判明。
以下はCrystalReportsとActiveReportsの比較検証結果。

運用言語とWindowsOS

  CrystalReportsXI CrystalReports2008 ActiveReports2.0J ActiveReports for .NET 3.0J
VB+XP × ×
VB6+Vista × × ×
VB.NET+XP ×
VB.NET+Vista ×

※CrystalReportsXIがVista対応されたのはRelease2以降

バーコード

CrystalReportsXI 標準FONTは含まれていないため別インストールが必要
CrystalReports2008 CODE39のみ対応。他規格はFONTの別インストールが必要
ActiveReports2.0J CODE39(フルアスキー)、CODE49、CODE93、CODE128、JAN8、JAN13、EAN128、ITF、POSTNET、UPC/A、UPC/E、UPC/Eアドオン、NW-7(CODABAR)、カスタマバーコード
ActiveReports for .NET 3.0J ANSI39、CODE 2 of 5、CODE128、CODE25 mat、CODE39(フルアスキー)、CODE39、CODE49、CODE93、EAN128、EAN128FNC1、ITF、JAN13、 JAN8、M4SCC、MSI、NW-7(CODABAR)、POSTNET、UPC/A、UPC/E、QRコード、PDF417、カスタマバーコード(郵便バーコード)

ライセンス

  CrystalReportsXI CrystalReports2008 ActiveReports2.0J ActiveReports for .NET 3.0J
サーバライセンス 不要 不要
デザイナ配布ライセンス
(追加開発端末)
不要 不要
運用端末ライセンス 不要 不要 不要 不要

※ActiveReports for .NET 3.0J StandardEditionの場合はデザイナ配布不可

雑感

  • ActiveReportsインストールには事前にVB5orVB6のインストールが必要。
  • ActiveReportsインストールには事前にIE4.0以上のインストールが必要…なのだが、Vistaにインストールするときに「IE4.0以上を入れてね」警告がでる。IE7.0では認識されないのかな。この警告は無視しても問題ない。
  • ActiveReportsのバーコードコントロールが使いやすい。プロパティを切り替えるだけで規格を変更できる。

SQL 小計を利用する

何かの統計システムなどを作っていると、よく複数項目で小計をとる場面にであう。これを実現するためにGROUP BY句を使用すると、小計単位でSQLを発行しなければならない。また、小計でソートを行いたいときにアプリケーション側で制御するのも面倒だ。OVER関数を利用すれば、これらをひとつのSQLで実現できる。

環境

  • Oracle10g R2

サンプル

例えば以下のようなテーブル「T_SHAIN」があるとする。

JIGYOUSHO_CD BUSHO_CD SHAIN_CD
1 101 50001
1 101 50002
1 102 50003
1 102 50004
1 101 50005
1 101 50006
1 101 50007
1 102 50008
1 102 50009
2 201 50010
3 301 50011
1 101 50012
2 202 50013
2 202 50014
2 202 50015
2 202 50016
2 201 50017
1 101 50018
2 202 50019
1 102 50020

このテーブルを使って「事業所単位」「部署単位」で社員数を集計し、結果を社員数の多い事業所順&社員数の少ない部署順で取得したい。

GROUP BY句を使用する場合
 SELECT
   JIGYOUSHO_CD,
   COUNT(SHAIN_CD) AS TOTAL_JIGYOUSHO
 FROM
   T_SHAIN
 GROUP BY
   JIGYOUSHO_CD
 ORDER BY
   TOTAL_JIGYOUSHO DESC
JIGYOUSHO_CD TOTAL_JIGYOUSHO
1 12
2 7
3 1
 SELECT
   JIGYOUSHO_CD,
   BUSHO_CD,
   COUNT(SHAIN_CD) AS TOTAL_BUSHO
 FROM
   T_SHAIN
 GROUP BY
   JIGYOUSHO_CD,
   BUSHO_CD
 ORDER BY
   TOTAL_BUSHO
JIGYOUSHO_CD BUSHO_CD TOTAL_BUSHO
3 301 1
2 201 2
2 202 5
1 102 5
1 101 7

そしてこれらの取得結果をfor文でまわしながら、事業所コードで合致させ、さらに事業所全体の社員数が多く、かつ部署の社員数が少ない順にソート…となるとコーディングもややこしくなる。

OVER関数を使用する場合
 SELECT DISTINCT
   JIGYOUSHO_CD,
   BUSHO_CD,
   COUNT(SHAIN_CD) OVER (PARTITION BY JIGYOUSHO_CD) AS TOTAL_JIGYOUSHO,
   COUNT(SHAIN_CD) OVER (PARTITION BY JIGYOUSHO_CD,BUSHO_CD) AS TOTAL_BUSHO
 FROM
   T_SHAIN
 ORDER BY
   TOTAL_JIGYOUSHO DESC,
   TOTAL_BUSHO
JIGYOUSHO_CD BUSHO_CD TOTAL_JIGYOUSHO TOTAL_BUSHO
1 102 12 5
1 101 12 7
2 201 7 2
2 202 7 5
3 301 1 1

OVER関数を使用すると、PARTITION BY句でGROUP BY句と同じように集計関数に対する集合範囲を定義することができる。これはSQL文で複数指定することが可能であるため、事業所単位と部署単位を同時に取得できる。
さらに取得フィールド名として定義すれば、ORDER BY句に指定することができるので、小計単位でソート順を自由に組み合わせられる。

説明


サンプルではCOUNT関数で社員数を求めたが、SUM関数などの集計関数ならば同様に利用することができる。これにより、例えば「営業社員数が少ないのに売上額が高い支社」「生産数が少ないのに不良品数が多い工場」などを簡易に計上できる。