趣味のプログラム工房

プログラム

Oracle 19cのインストール ソフトウェアの場所(software location)

初めてのOracle 19cのインストール

オンプレ版のソフトをダウンロードして、「適当なフォルダ」に解凍してインストールを進めたところ、、、
ソフトウェアの場所software location)に違和感が、、、
インストーラーを解凍したフォルダがソフトウェアの場所として表示されているわけですが、まさかと思いつつもそのままインストールを完了させたところ、
そのまさかが、、、

どうも、18c以降、インストーラーの場所がそのまま、Oracle_home、
ソフトのインストール先になるようです。。。
マジか。

Oracle 12cまでしか使ってなかった私としてはカルチャーショック




2020年01月25日


ColdFusion cfgridによる更新でエラー

Coldfusion 2018にてcfgridのhtmlもしくは、xmlを使ったときの更新がエラーになる現象を確認。

完全にバグだと思われます。

coldfusion2016でも同じようなバグあり、パッチで解消した、、、という情報もありましたが少なくても2018では更新できません。(最新のパッチを当てても)


原因はハッキリしており、
何故か、POSTに同じパラメータが2つ入るためです。

cfgridのnameをhogehogeとした場合、
更新ボタンを押したとき、次画面に送られる変数は、
hogehoge=null
hogehoge=cfgridの中身
の2つが送られます。

でエラー。


対処方法は一つ。
onsubmitのjavascriptで1つ目の空の変数(hogehoge)を削除して、
同名の変数を1つだけ(hogehoge=cfgridの中身)を次画面へ送るようにします。



2020年01月11日


ODBC経由 Excelの編集でエラー

ODBCでちょっと特殊なExcelの編集をしようとしたところ、以下のエラーが発生
「このフィールドはリンクされたExcelワークシートにあるため、編集できません。リンクされたExcelワークシートのデータを編集する機能は、Access の今回のリリースでは無効になっています。」

まず、最新のWindowsOSにはExcelODBCドライバが付属していないんですよね。。。
そのため、個別にインストールする必要があるのですが、そのドライバでは上記機能が使えないようになっています。

どうも、やろうとしていた機能が使えたのは、
windows server 2008の世代に付属していたドライバ(32bit版で確認)のようです。
それより新しいものだと、たぶん利用不可。

上記エラーに遭遇したら諦めてください、、、が回答になります。


補足
上記エラーは、ODBCで定義されたExcelブックAを経由してExcelブックBを編集する場合に発生します。
ちょっと何言ってるかわからないかもですが、そういうことができたのです。


2019年11月13日


Windowsでフォルダの監視・同期 inotifyのような、、、

Linuxではinotifyという仕組みで通知を受け取り、
ファイルの更新をチェックすることで、フォルダ・ファイルの監視ができるのですが、Windowsでは無いようなんですよね。

なので、リアルタイムファイル同期ファイル同期をするためにはと調べたのですが、ちょうどいい感じのソフトは転がっておらず、、、

一応、.NETにて「System.IO.FileSystemWatcherクラス」を使えばいいらしいことがわかりました。
実装自体はわりと簡単みたいなので、作ってみました。

FileSystemWatcher


引数に、監視フォルダと、コピー先を渡してあげると、
監視フォルダに新しいフォルダやファイルが作られるとコピー先にコピーされるという動きをします。
2つのフォルダで同期をとるときに使います。

2019/08/17 一部の起動方法にてCPU使用率が1コア占有となる不具合を対策(4コアの場合はCPU使用率25%となる不具合)

また、Windowsサービス版を作成
FileSystemWatcher サービス化版


2019年08月07日


Oracle 異なるインスタンスのテーブルのデータを比較

同じデータベース インスタンス内であれば、MINUS演算子を使うだけで、簡単に差異のあるレコードを抽出可能です。
しかし、異なるインスタンス、異なるデータベースのテーブルを比較しようとするとちょっと悩みます。

手っ取り早くであれば、、、データを抽出してExcelに張り付けて比較するという力業(スマートではない)もありますが、データが多いと時間がかかるし、めんどくさいです。


というわけで、私のおすすめとしては、Database Link機能の利用です。
データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。
このオブジェクトを経由することで、MINUS演算子を使って比較ができるようになります。

systemなどアクセス権限の高いユーザ(スキーマ)に対してリンク張れば、xxx.table@dblink_systemなどと全部のテーブルにアクセスできるので結構楽です。


2560 * 1600液晶、10コアのハイスペックタブレット!
値段はチョットしますが、このスペックはあまりない珍しいタブレットですね。

2019年02月06日


Oracle 監査ログ Aud$のSQLTEXT切れてる問題

Oracleの監査ログですがAUD$を直接ではなく、DBA_AUDIT_TRAILのViewを使って監査ログを参照すると、SQLTEXTが切れて、すべて見えない問題が発生します。

というのも、AUD$のSQLTEXTはCLOBですが、DBA_AUDIT_TRAILはVARCHAR2 2000桁で表示されるため、2000文字以上は切れてしまう。
なので、2000文字以上のSQLTEXTを見る場合は、AUD$を直接見る必要がありますが、その場合も、CLOBではなく、VARCHAR2に変換してみるため、SELECT時に工夫が必要。

https://stackoverrun.com/ja/q/1875751

を参考に、2000文字ずつとか、4000文字ずつ表示する必要があります。

SELECT SUBSTR (t1.clob_col, 1, 4000) AS pt1,
CASE WHEN LENGTH (t1.clob_col) > 4000 THEN SUBSTR (t1.clob_col, 4001, 4000) END AS pt2,
CASE WHEN LENGTH (t1.clob_col) > 8000 THEN SUBSTR (t1.clob_col, 8001, 4000) END AS pt3,
CASE WHEN LENGTH (t1.clob_col) > 12000 THEN SUBSTR (t1.clob_col, 1201, 4000) END AS pt4
FROM t1


まあ、分岐する必要があるかは微妙。
別に、0文字~4000文字、4001文字~8000文字、、、を表示するsubstrをそのまま連結でもよさそう。


スマートテレビの新基準
4Kテレビ

2019年02月03日


HP-UXのセグメンテーション違反耐性が高すぎる

hp-uxのセグメンテーション違反耐性が高すぎる問題が発生しています。

セグメンテーション違反耐性が高いのの何が問題なのかという話ですが、、、
hp-uxからLinux(RHEL)に移植したプログラムがバンバン落ちるのです。
セグメンテーション違反で。

悪いのは、100%元のプログラムを作ったやつですが、
何年も動いていたプログラムが想定外のところで落ちるのはイライラするわけです。


確保した領域外にアクセスしても、落ちないんですよねHP-UXって。
OS的に何か制御が入っているのか、、、逆に制御入っていないから何も言わないのか、、、(制御入ってないとしたら相当な時限爆弾)


移植性が高いCプログラムですが、、、純粋な環境依存よりも、
既存バグが怖いと思った今日この頃です。


ルータ用サーバに最適

2019年01月18日


Linux、Pro*C環境でsystem関数の挙動が変(signal?)

Oracle 11.2以降、Linux、Pro*Cを利用の環境でsystem関数などの子プロセスを呼び出した後のシグナルの挙動が変という問題。

具体的には、Oracle 11.2以降(当方は12cで確認)は、SIGCHLDSIG_IGNを設定したような挙動となります。(Oracleに接続する関数を呼び出した後)

つまり、どういうことかというと、Oracle 10gの場合は、system関数を利用して子プロセスを呼び出した後、普通にその結果(終了コード)を拾えるのですが、11.2の場合は、子プロセスはゾンビ化しないため、勝手に状態の開放を行うため、親プロセス状態を拾うことができなくなります。
つまり、system関数の結果(終了コード)が拾えなくなります。

どうも、Oracleでバグが発生し、こねくり回して対応した結果の仕様のようです。

解決方法としては、、
①SIGCHLDにSIG_DEFを設定しなおす。
②sqlnet.oraでBEQUEATH_DETACH=yesを設定。

らしいですが、Oracleがそのほかの部分でどういう挙動となるかはよくわかりません。
ほかの不具合が発生する可能性が高いです。。。

参考
https://www.developpez.net/forums/d1800160/bases-donnees/oracle/interfaces-programmation/pro-c-comportement-different-cmd-system-connecte-oracle/

2018年12月23日


Oracleの監査 auditについて

Oracleの監査の設定について調べてみた。

私がやりたかったことは、テーブルに対するアクセスのログ取得。
これは単純に、

オブジェクト監査を用いて
AUDIT insert table,update table,delete table by XXXX;
となるわけですが、さらに、YYYテーブルは監査を除外する、、、
ということをしたい。

結論から言うと、オブジェクト監査、もしくは、
オブジェクト監査と文監査の組み合わせなどではできなさそう。

結局、除外するテーブル以外をすべて列挙して
AUDIT insert ,update ,delete on XXX.AAA;
AUDIT insert ,update ,delete on XXX.BBB;
・・・
AUDIT insert ,update ,delete on XXX.XXX;
AUDIT insert ,update ,delete on XXX.ZZZ;
と監査するテーブルを登録していくこととしました。

、、、もうちょっとスマートな方法があればよいのですが。。。


2018年12月13日


RHEL(LINUX)でSJISを利用!

Red Hat Enterprise LinuxSJISを使おうとすると、警告が出ます。

# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
character map `SHIFT_JIS'' is not ASCII compatible, locale not ISO
compliant

ご存知のように、LinuxSJISは通常サポートされていません。
が、実は、CP932を指定した場合は、警告が表示されない。

参考:http://blog.tomoattori.info/article/152612890.html


というのも、単に「SJIS」はサポートされないというのは、奥が深く、
例えば、同じSJIS系の正統Shift JISとCP932(MSの拡張版)とでも扱いが違う。


[日本 OSS 推進フォーラム]という何となく権威がありそうなところが出している
『Linux マイグレーションガイド』の中で、
特に、正統 Shift JIS ロケール sjis では、 0x5C=U+00A5 というマッピングのために、オープン系プログラム(C言語、Java など)の動作が保証されない。cp932 などでは問題ない。

とも記載されており、CP932だと、問題が少ないことがわかる。

あと、gcc(C言語)においても、コンパイルの際は、
-finput-charset=cp932 -fexec-charset=cp932
のオプションを指定するので、やっぱりCP932がよい。

というわけで、SJISを使うなら、CP932を使いましょうということですね。
というか、わざわざ正統なSJISを使うほうが問題多い気が、、、SJISを使いたいという場合は、正統なSJISではなくCP932を使っているほうが多そう。



2018年11月03日


次へ