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ライブラリを無効化してインストールを行う。
補足
本現象はPentium 4ベースCPUにて発生することが確認されている。マシンに搭載しているCPUのFamilyCodeを確認する手順を以下に示す。
- 「スタートメニュー」→「ファイル名を指定して実行」にて「winmsd」と入力し、Exterキーを押す。
- システム情報→「システムの概要」よりプロセッサの値を確認する。
x86 Family 15 Model 2 Stepping 9 GenuineIntel ~2992 Mhz
FamilyCodeが"F"または"15"と表示されている場合は、Pentium4ベースのCPUであると判断でき、本現象が発生する可能性がある。
参考
- Oracle KROWN全文検索
文書番号39224 Pentium 4搭載マシンでOracle Universal Installerが起動しない[更新版]
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
補足
本現象は英語版では発生しないので、一時的に使用言語を英語(US)に変更してもインストールは出来る。
- 「スタート」→「設定」→「コントロールパネル」→「地域のオプション」
英語を選択する。 - Oracle8iをインストールする。
- [Instllation Type]画面では、"Custom"を選択する。
- [Available Product Component]画面では、[Product Languages...]ボタンを選択し、
[Language Selection] ダイアログから、Select Languages:、"Japanese"を追加する。(日本語メッセージファイルを登録するため) - 「スタート」→「設定」→「コントロールパネル」→「地域のオプション」
日本語に戻す。
ただしこの場合、Oracleアプリケーション自体が英語モードで実行される。
参考
- Oracle KROWN全文検索
文書番号37335 Xeonプロセッサ(Pentium4をベースとする)を2つ以上搭載するマシンでORACLE UNIVERSAL INSTALLER(OUI)がハングする。
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.exeとsrvany.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 |
補足
- サービスを削除する場合は、以下のコマンドを実行する。
C:\> "C:\win2003rkt\Tools\instsrv.exe" ServiceTest REMOVE
CrystalReports x ActiveReports比較
VB6で開発したアプリケーションをVistaで動作させたいのだけれど、帳票を作っているCrystalReports(含バーコード)が対応していないことが判明。
以下はCrystalReportsとActiveReportsの比較検証結果。
- CrystalReportsXI Developer
- CrystalReports2008
- ActiveReports2.0J Professional
- ActiveReports for .NET 3.0J Professional
運用言語と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、カスタマバーコード(郵便バーコード) |
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関数などの集計関数ならば同様に利用することができる。これにより、例えば「営業社員数が少ないのに売上額が高い支社」「生産数が少ないのに不良品数が多い工場」などを簡易に計上できる。