[DTS] ActiveX スクリプティング変換でスクリプト実行エンジンを初期化できませんでした。

DTSを実行すると以下のエラーが出力された。

DTSDataPump_E_AxScript_CantInitializeEngine
8262 (x2046)
ActiveX スクリプティング変換でスクリプト実行エンジンを初期化できませんでした。

上記のエラーについていくつか情報があった。

無く子も黙る「SQLDTS.COM」の情報です。
ここでは以下のようなことが書かれている。

通常は、DTS ActiveX Script Host DLL (axscphst.dll)をレジストし直せば修復します。それでも解決しなような場合は、「dtspkg.dll」および「dtspump.dll」をレジストし直してみてください。レジストする場合(インストール先がCドライブの場合)は、以下のコマンドを実行します。

Regsvr32.exe “C:Program FilesMicrosoft SQL Server80ToolsBinnaxscphst.dll”
Regsvr32.exe “C:Program FilesMicrosoft SQL Server80ToolsBinndtspkg.dll”
Regsvr32.exe “C:Program FilesMicrosoft SQL Server80ToolsBinndtspump.dll”
(SQL Server 2000)

そして、それでもダメなら?WSHをインストールし直せ!

Windows Server 2003用のWindows Script 5.6は以下のページでDLできます。

しかし、以下のような情報もある。

これから検証です( ´ー`)フゥー...

てか、これってBUGというと思うんだが。
現状、SQL Server 2000にはSP4も最新のパッチも適用している。

[DTS] スケジュール起動で、何故かエラーになる? その2

今現在、エラーが出ることなく動いてるのだが!
原因は不明・・・ (゚д゚lll)

そして・・・

致命的なエラーとしかエラーログに残らないのは、エラーを取得していないためだということにようやく気がついた (´ヘ`;)

On Error Resume Next ステートメントを設定していないときに実行時エラーが発生すると、そのエラーは致命的なエラーとなり、エラー メッセージが表示されてプログラムの実行が停止します。

VBScript ランゲージ リファレンス – On Error ステートメント

そこでデータ変換タスクで発生しているエラーを取得することに。

しかし、ここで疑問。
DTSのエラーログにどうやってハンドルしたエラーを書き出すんじゃ?一生懸命ググるも何にも成果なし・・・。同じようなことで悩んでいる人は、随分前にいた。

なので、どうしようかと無い頭で考えた。

  1. データ変換タスクの変換スクリプト内でエラーを取得し、グローバル変数にセット
  2. グローバル変数にセットした値をSQL実行タスクで、エラーテーブルにInsert

単純にこういうこと(常識?)

ほんとうにこんな風にするのか知らんけど、
もう藁をも掴む感じで以下のコードを追記。

On Error Resume Next

‘ 処理コード

If Err.Number <> 0 Then
DTSGlobalVariables(“ErrPackage”).Value = “TestPackage”
DTSGlobalVariables(“ErrNumber”).Value = Err.Number
DTSGlobalVariables(“ErrDescription”).Value = Err.Description
DTSGlobalVariables(“ErrSource”).Value = Err.Source
DTSGlobalVariables(“ErrTime”).Value = Now

Main = DTSTransformStat_Error
Else
Main = DTSTransformStat_OK
End If

でワークフローで失敗したときに、書き出したグローバル変数をSQL実行タスクで書き出します。うーん。今のところ謎の「致命的なエラー」が発生しないため、拾えるか不明です。。。

[SQL Server 2000] 大容量メモリを使うには?

SQL Server 2000 SP4以降の累積パッチ
を適応しようとして、とんでもないことに気が付きました(;´Д`) 現在、あるシステムはWindows Server 2003 Enterprise Edition(32bit)
上で動作しており、メモリも8GB搭載してます。

しかーし!!

その大容量のメモリを使うための設定を何もしていなかったのですヽ(;´Д`)ノ バカァ~

つまり。

現状だと8GBのメモリが載っていても、2GBしか使われていないということになります。まったくもって一大事であります (;´∀`)・・・うわぁ・・・

“[SQL Server 2000] 大容量メモリを使うには?” の続きを読む

DTS:何故かエラーになる? その1

以前はスケジュールで起動したら「dtsrun.exe」がかえってこなくなったんだけども、今度はアプリケーション エラーが発生!!

文句を言ってもはじまらんので、
腹をくくってトラブルシュート (゚Д゚#) !!!

SQL Server 2000でのお話。

日次でSQL Server Agentでスケジュールを組んで実行しているパッケージが、たまに失敗する。失敗したパッケージを手動でEnterprise Manager上から実行すると!?問題なく成功する。そもそも失敗するはずはないのに。

何故?

該当するパッケージは、パッケージ実行タスクを3層に分割して作成したもので、失敗するのは最下層のある特定のパッケージのみです。他のものは問題なく成功しているにもかかわらず、特定のパッケージのみなのです。しかも、再現性があるものでもない。

何故?

このことに関連するKBとして以下のものがあります。

[INF] 定期ジョブとして DTS パッケージを実行する方法

内容としてはセキュリティ コンテキストが異なるので注意しろという内容でして、実際に動作しているので今回の件とは関係ないと判断。

じゃぁ、何でよ?と思っていたら、今朝の実行結果では
「DTSRUN.exe」でアプリケーションエラーが発生していやがった。。。

(/´∇`)/ ~Φ

同時にSQLSERVERAGENTでイベントIDが318のものが
「Unable to read local eventlog (reason: システム コールに渡されるデータ領域が小さすぎます。). 」
という内容でエラーになっていた。
このエラーについては、以下のKBを見る限り無視。

PRB: SQL Server エージェントがイベント ID 318 のアプリケーションがデフォルトのデバッガのワトソン博士との Unhandled Exception エラーを生成すると、エラーを報告することがあります。

そこで、同じような問題に遭遇した人はいないものか?と検索。
そしたら、Σ(゚Д゚ υ) イタ!!

Google グループ : microsoft.public.sqlserver.server
SQL Server ユーザーグループ > コミュニケーション > 掲示板 > SQL Server 1年生にて「DTSのデータ変換タスクについて」で検索。

以上の内容から「データ変換タスク」の「挿入バッチ サイズ」を指定するように変更してみることにした。そもそも、この「挿入バッチ サイズ」と「DTSRUN.exe」との間に因果関係があるのか?まったくもって不明なんだけども。

この辺の内容って、リソキとかには書いているのだろうか。。
手元に無いから確認できんけども。

また、同時にエラーも漏らさず取得するために以下の2点も見直した。
(詳しいことはBOLで確認してください)
DTS パッケージ ログ
行レベルのエラーの検出

後はエラーが起こったときに、原因がわかることを祈るばかり・・・(,,゚Д゚)†

SQL Server 2000: DTSの起動スケジューリング

SQL Server AgentのジョブでDTSパッケージを起動する。
DTSを起動する際には「DTSRUN」ユーティリティを利用する。
いや、ほんとに、ただこれなんですけどね。やりたいことは。

ジョブで起動するときのコマンドは、例えば以下のようになります。

dtsrun /S localhost /U sa /P password /N SampleDataLoad

「/A」オプションでDTSパッケージのグローバル変数にパラメータをセットすることもできます。

dtsrun /S localhost /U sa /P password /N SampleDataLoad /A Test1_ID:8=TEST1

複数指定する場合は

dtsrun /S localhost /U sa /P password /N SampleDataLoad /A Test1_ID:8=TEST1 /A Test2_ID:8=TEST2

また、「:」の後ろにはグローバル変数のデータ型を指定する必要がありますんで、「dtsrun ユーティリティ」で何を指定すればいいかをご確認ください。

んで。

「dtsrun.exe」を含んだコマンドを単純に実行したところ問題なく完了したが、いざジョブとして設定すると何故か?エラーになる。また、正常に動作したと思ったら、dtsrun.exeが起動したままになり、返事が無い。もちろん、エラーも出ない。

モウイヤダ。

今一度、環境のほうを確認。SQL Server 2000のサービスパックが1つも適用されていないではないですか!(大きなミステイク)なりふりかまわず、SP4を適用。再起動後のジョブは失敗したが(これまた意味不明)、テーブル再作成後は正常に処理が完了することを確認( ´ー`)フゥー...

dtsrun.exeが起動したままになる問題は、SPが当たっていなかったためだと思われます。当ててないワシもワシですが、当てないとこんな基本的なこともまともに動かないことには・・・(自粛)。えっと、下記に本件に関連しそうなKBです。

また、SQL Server Agentの使い方などは、以下にまとめられてます。

DTS:OracleからSQL Serverにデータを取り込む

「今更こんなこと書いても見る人なんていないんだろうなぁ。。」
と思いつつ書きます。
——————————

やりたいことは、SQL Server 2000のDTSでOracleに対してクエリを発行し、
データ変換タスクで取り込むという非常に単純なこと(;´Д`)
そして、クエリには動的にパラメータを設定する必要がある。

まずOracleと接続するためのドライバ。SQL Server 2000に入っているOracle用のドライバは今となっては使えません。
詳しくは、BOLの「データ変換に関する注意」で確認してください。

今回対象となるOracleは9iなので、この時点で使えない。
また、UNICODEの送信に対応してないので、問題なく使えない。

上記の内容は確かではないので、現在調査中

なので、Oracle Clientをインストールし、「Oracle Provider for OLE DB」を使ってやることに。そして、ここで更に問題が発生。。

OracleとSQL Server用の接続を作成し、その二つをデータ変換タスクで接続。
つまりは、データポンプタスクにて実装します。

しかし、「クエリのパラメータに値を渡せない」のです。
こうやったら出来ます!なんてことを知っていたら、教えてください。。

じゃぁ、どうやんのか?

答えはSQLDTS.comにありました。

読んでもらえればわかると思いますが、やり方としてはパラメータをセットしたクエリをActiveXスクリプトでデータポンプタスクの「SourceSQLStatement」プロパティにセットするということ。

なるほど!と同時に、何でこんなことも出来ないの?と思いましたね (´ヘ`;)

この辺のことってネット上で色々調べてみましたが、見かけませんでした。
もう既に常識なのか?普通はこんなことしないのか?よーわかりませんが、
SQL Server 2000のDTS、ちょっとした変換をかけようとするだけでも
基本的にスクリプトを書かないといけません。そして「型が違う」と怒られる。
まぁ、このへんは慣れなんでしょうが、普通に( ゚Д゚)マンドクセー

SQL Server 2005ではどれぐらい使い勝手がよくなっているのか、
まったく触ってないのでわかりませんし、興味も薄れてきましたが
まぁ、作りこめば何でもできる!という基本スタンスは変わらないんだろうなぁ・・・

こういったツールの使うことは、誰でもできる。
問題は、何をやりたいのか?を決めれるかどうか。

Windows Server Update Services

Windows のセキュリティパッチを展開するためのツールであるSoftware Update Servicesの最新版が、Windows Server Update Services(WSUS)と名前を変えてリリースされた模様。

このWSUSの上位の製品としてSystems Management Server 2003(SMS)が存在するわけなんですけど、何が違うの?ということについては、コノヘンに書いてあります。まぁ、おおよそSMSのほうが色々と細かいこともできるんですけど・・・実際にお客さんが求めるものとしてはWSUSのほうがあっているような気がします。

というもの。大抵の情報システム部門の方は、社内のクライアントに対してセキュリティパッチが適切に当たっているかどうか?が気になるところ。しかも、その作業自体は自動で行われることを望みます。そらぁ、セキュリティパッチを当てる作業自体、何も生産しませんからねぇ。

セキュリティパッチの配布以外にもやりたいこととしては、「インベントリの収集」と「アプリケーションの配布」がほとんどです。アプリケーションの配布は、だいたい自社開発してるツール類のアップグレード作業ですね。ファイルのコピーみたいな感じです。

話を戻して、WSUSではセキュリティパッチの自動配布はできますが、インベントリの収集やアプリケーションの配布は行えません。SMSでは、インベントリの収集やアプリケーションの配布はできるんですけど、セキュリティパッチの自動配布ができません・・・ほんと、(゚Д゚ )ハァ? って感じです。SMSでは管理者がセキュリティパッチが公開されたタイミングで配布の設定をいちいち行わなくてはならんのです。しかも、、セキュリティパッチの種類により設定がまちまちでよくトラぶります (´ヘ`;) クライアント上で実行しようとするとエラーで終了なんてことも。

インベントリ収集ができて、アプリケーションの配布もできて、かつセキュリティパッチの全自動配布ができるものがあれば、売れると思いますよ (・∀・)ニヤニヤ 全自動で配布するセグメントをOU単位で設定できたりしたら、便利かも?SMSでいうところの、コレクションかな?

あ、WSUSで管理できるのは、Windows 2000以降みたいっす。9X系はもう使うなっていいたいんでしょうね。ちなみに、SMSだと98はサポートしてるんですけど、何故か?Windows Meはサポートしていない。よっぽど闇に葬り去りたいんだろうな・・・確かに当時、MS社内でも悪名高いOSだったもんなぁ・・・(ボソッ)

64bit その2

届いた64bitサーバに後挿しのFibre Channel Adapterの64bit用のドライバが
入っていたCDに入ってなーい!!とか色々なトラブル(昔に比べればまだマシ)に
見舞われながらも、ようやくSQL Server 2005のClusterセットアップが
間もなく完了します ( ´ー`)フゥー...
つっても、セットアップを起動してからカレコレ2時間ぐらいたってるような気がする・・・

この構築作業中に気がついたこと

  • 最近のSANの設定はめちゃくちゃ簡単!ローカルのRaidの設定をするのとかわんない。
    出たばかりの頃のDELLのSANなんて、意味不明だったもんなぁ・・・
  • Microsoft Distributed Transaction Coordinatorの設定をするべし。
    System Configuration Checkerの「COM+ catalog requirement」でエラーが出る場合は、これでしょうなぁ。
    つーか、ヘルプは読むべし。。
  • SQL Serverのクラスタ セットアップは、複数のノードのセットアップが同時進行で行われる。
    最初は、「Install as virtual server」がVirtual Serverだと勘違いしていた(;´Д`)
    これにチェックを入れないと、Clusterセットアップの設定のダイアログが出ないんです。

なんだかんだで、こういう作業はやっぱり好きw
つーか、片手間でやってるんですけどね。。

SQL Server 2005 情報

Microsoftのデータベース サーバであるMicrosoft SQL Server
その最新版であるSQL Server 2005なんですが、
いったいいつになったらリリースされんだ?と思い、
今日Microsoftの方と話をする機会があったので聞いてみた。

「年内リリースに向け、調整中ですw」

とのこと。米国でのRTM(Release to Manufacture)は10月以降を予定。
それまでにCTP(Community Technology Preview)があと2回ほどリリースされるとも。
(最近ではRC(Release Candidate)とはいわなくなったんでしょうかねぇ?)
2005年に間に合いませんでした~・・・なーんてオチはいらんでよw

あと、ちょっと前に紹介したコードネーム「Maestro」と呼ばれる製品。
やはりBusiness Scorecards Accelaratorの後継を担う製品になるということ。
実際のところ、それ以上のことは知らないそうな。

こういうこと書いてたら、しばかれんのかなぁ。。ドキドキ