2013年3月19日火曜日

(VB.NET) Windows 7ブート時起動アプリにSplashScreen (HideSplashScreen)を使った場合の問題

Windowsの起動時にスタートアップメニューに登録して
起動するアプリで、VB.NETのSplashScreen (HideSplashScreen)を使った場合の問題 。

いつもではないが、時々、InvalidOperationExceptionが発生する。
インターネットを調べると、同じ症状にあってる人たちがいた。

http://connect.microsoft.com/VisualStudio/feedback/details/769497/hidesplashscreen-causing-invalidoperationexception
(Microsoftもこれはバグと認識しているようである。)

対策・回避策としては以下。
1.VB SplashScreen architectureの使用をやめる。
  (Microsoftがバグフィックスを出すまで待つ。)
2.インターネットで知りえた情報をもとにコードを組む。(としか言えません。。)

上記くらいしか対策・回避策がないのだが、
いったいどういった条件でこの事象が発生するのか知りたかった。

どうすれば分かるだろうか?
「process explorer」を使って徹底的に調べる?
Mr.Russinovich氏に問い合わせる?

Windows Maximum handles. Windowsの1プロセスあたりの最大ハンドル数

Windowsの1プロセスが作成できる、
最大ハンドル数は、256*256*256個。

Maximum handles which one process can make is 256*256*256.

2013年3月18日月曜日

(VB.NET) Invoke時はIsHandleCreateを確認して、Handleを参照した方がよい

言語: Visual Basic .NET

Invoke時はIsHandleCreateを確認して、Handleを参照した方がよい。
そうしないと、InvalidOperationExceptionが発生することがある。

2013年3月12日火曜日

Windows版Oracleアラートログローテーションバッチ

Windows版Oracleアラートログローテーションバッチ。
日次で動かして、アラートログを日付つきでバックアップしていく。
rem Oracle alert log rotation sample for windows batch script
rem アラートログのフルパス
set LOG_FILE=D:\oracle\product\10.2.0\admin\SID\bdump\alert_SID.log

rem バックアップファイル名を決める処理
rem アラートログは1ファイルだが、変数処理のため敢えてfor文を使う。

for /f "usebackq" %%I in ( '%LOG_FILE%' ) do (
  set BACK_FILE=%%~dpnI_%DATE:/=%%%~xI
  set LOG_DIR=%%~dpI
)

rem バックアップ処理

copy %LOG_FILE% %BACK_FILE%

rem アラートログを0リセット

copy NUL %LOG_FILE%

rem 古いファイルを削除

for %%I in ( '%LOG_DIR%' ) do (
  rem ファイルの日付をチェックして、保存期間を過ぎてたら削除
  rem 他の仕組みが楽だったら他の仕組みでやる。

)

ファイル名をきれいにしたいと思う方にどうぞ。
それにしてもやっぱりバッチは可読性が。。

例ではバックアップファイル名に日付文字列を使用したが、
通番方式の方が処理は簡単。
なにせバッチでは日付計算が簡単にはできないし。

あと、forループ使う時はsetの遅延問題にも注意。

(オラクル)古いDBから新しいDB へのデータ移行時に表やカラムを変える場合

オラクルについて、古いDBから新しいDB へのデータ移行時、
表やカラムが変わった場合は、expdp/impdpでは外部表を
使えばよさそう。