Loading...

SQL Server データベース使用率

SQL Server で データベースの使用率を見たいと問い合わせがありました。
むかし、どこかのサイトで見つけて使っていたクエリがあるので
掲載しておきます。

どこから取得してきたのかはもう謎です。
すみません。

——————————————————————————-
USE [DBName]
GO

SELECT name
, size * 8/1024 AS [ファイルサイズ(MB)]
,   ( (FILEPROPERTY(file_name(fileid), ‘SpaceUsed’) * 8192.0) / 1024.0) / 1024.0 AS [使用領域(MB)]
, ( ( (FILEPROPERTY(file_name(fileid), ‘SpaceUsed’) * 8192.0) / 1024.0) / 1024.0 )
/ ( ( (convert(numeric(20), size) * 8192) / 1024) / 1024) * 100 AS [使用率(%)]
FROM dbo.sysfiles
——————————————————————————-

SQL Server 復旧モデル

SQL Server を使用して開発をする場合が多い。
この SQL Server で昔から不思議な現象があった。
復旧モデルが既定の完全の状態で、全体バックアップしか取得しないと
ひたすらトランザクションログが拡張していってしまう・・・。
完全バックアップを取得したらトランザクションログも一緒にバックアップされるのになぜなんだ?!
と不思議に思っていたら、原因がやっと分かりました。
完全バックアップでは、トランザクションログのバックアップはされるが
切り捨てはされない、そうです。

参考にしたサイト
SQL Server の初回データベースバックアップとログの切り捨てについて

紛らわしいことに初回の完全バックアップでは切り捨てされる、という。

ここで初心に戻って復習です。

障害発生時直前の状態に戻す必要のあるシステム→復旧モデルは完全
バックアップ取得時点まで戻ればOKのシステム→復旧モデルは単純
トランザクションログのバックアップを取らないなら完全は絶対にNGなんですね。

大きいファイルをアップロードすると 403 エラーが

ASP & COM+ で 動作しているシステムがある。
OS が Windows2000 だったので、先日 Windows2003 へ変更した。
その後、エンドユーザからファイルをアップロードすると
エラーになると連絡を受けて、エラーコードより調査してみると見つかりました。
ASP 要求を使用してインターネット インフォメーション サービスに
大きいファイルをアップロードすると 403 エラーが表示される

————————————————-
エラーコード  ASP 0104: 80004005
————————————————-
大きなサイズのファイルだとエラーになるそうな・・・。
IIS メタベース の AspMaxRequestEntityAllowed プロパティの変更が必要とあります。

デフォルト値は 204,800 バイト で 最大 1,073,741,824 バイト まで設定可能とのこと。
意外にデフォルト値は小さいんですね。

【変更方法】
1. コマンドプロンプトよりカレントディレクトリを変更
cd C:\inetpub\adminscript
2. コマンドプロンプトで以下のコマンドを実行
cscript adsutil.vbs set w3svc/ASPMaxRequestEntityAllowed <設定したいサイズ>
3. コマンドプロンプトでIISを再起動
iisreset

0x5EBE5729 のエラーコード

Windows Server 2003 へ SQL Server 2008 Standard Edition を
インストールしようとしてエラーになった。
ログを見ると 0x5EBE5729 のエラーコードが出ている。
インターネットで検索してみると
MSXML 6.0 Parser をアンインストールすれば
インストールが成功すると書いてあるサイトを見つけた。
言われるがままにアンインストールをして無事完了しました。

参考にしたサイト

IUSER と IWAM ユーザ の パスワード取得方法

ASP.NET の 開発で セキュリティエラーが発生したので
試しに IIS の 匿名アクセスユーザ を 変更してみた。

結果は変わらなかったので、これが原因ではないと判断し
再度、匿名アクセスユーザを IUSER に変更しようとしたら
パスワードが分からない・・・
ちなみに IIS 6

必死に探してやっと見つけました

IUSER と IWAM ユーザ の パスワード取得方法です。

VBScriptで取得出来るそうです。

————————————————————————————-
Dim objIIS
Set objIIS = GetObject(“IIS://localhost/w3svc”)
Dim strMsg
strMsg = “”
strMsg = strMsg & “IUSER名称   =” & objIIS.Get(“AnonymousUserName”) & vbCrlf
strMsg = strMsg & “IUSERパスワード=” & objIIS.Get(“AnonymousUserPass”) & vbCrlf
strMsg = strMsg & “IWAM名称    =” & objIIS.Get(“WAMUserName”) & vbCrlf
strMsg = strMsg & “IWAMパスワード =” & objIIS.Get(“WAMUserPass”) & vbCrlf
MsgBox strMsg
Set objIIS = Nothing
————————————————————————————-

.NET Framework 1.1 を 3.5 へ

現在、.NET Framework 1.1 で作成した Webアプリを .NET Framework 3.5 版へ
バージョンアップをしている。
お客様から最新ソースを頂いて、自分の開発環境で動作確認をしていると
Excel出力でエラーとなってしまった。

429:ActiveX コンポーネントを作成できません。

はて。なんだろ

デバッグしてみると、

CreateObject(“Excel.Application”)

でエラーとなっている

最近 Excel出力は、アドバンス ソフトウェア(株)社の「Excel Creator」という
製品を使用していたので、すっかり忘れていました。

DCOMを構成してあげないとセキュリティでエラーとなるんでしたね
懐かしいなぁ、としみじみ感じつつ

[管理ツール] → [コンポーネント サービス]
を起動し
[コンポーネント サービス] → [コンピュータ] → [マイ コンピュータ] → [DCOMの構成]
[Microsoft Excel アプリケーション]を右クリック → [プロパティ]
[セキュリティ]タブ を開き
[起動とアクティブ化のアクセス許可] を [カスタマイズ] にして [編集] ボタンをクリック
aspnet_ws.exe を 起動しているユーザ (今の私の環境だと ASPNET) を追加し
以下のふたつに許可権限を与える
* ローカルからの起動
* ローカルからのアクティブ化

テストしたところ、ちゃんと動作しました
良かった・・・

ASP.NET で Excelをダウンロード

ASP.NET で 作成しているシステムにおいて、
Excelをダウンロードしている処理がある。

ダウンロードのダイアログから [開く] を選んでも、[保存] を選んでも
初回だけ、非常に遅いという現象が発生した。

初回を [キャンセル] で取り消して、再度ダウンロードさせると
今度はサクサクとダウンロードされてくる。

しかも、現象が出るマシンと出ないマシンがある上
10分~15分程度、その画面を触らずに
別の処理をしてから、もう一度ダウンロードを試みると
最初の1回だけ遅い・・・。

これはセッションとか関係なさそうだし
IISとかも関係無いと思われる。

クライアントの設定がアヤシイのだが、どこを見ても違いが分からない。

セキュリティソフトかと考えて、セキュリティソフトのサービスを停止した状態で
テストしてみても、初回だけやはり遅い・・・。

どうしたものか、と悩んでいたところ
お客様に回避策を見つけて頂きました☆
ありがとうございます。

Windows Server 2003 または Windows XP を実行しているコンピューターで、
Windows Internet Explorer を使用してファイルをダウンロードできないことがある

この修正プログラムを適用したら現象が発生しなくなりました♪

ちなみに、回避策を読んでみると、
またしてもIMEの「詳細なテキストサービス」を無効にしなさい、
と書いてあります。

連続だとなんだかムカついてきますね。

ASP.NET で 作成したシステムで、日本語入力のテキストボックス

ASP.NET で 作成したシステムで、日本語入力のテキストボックスがある。
単純にスタイルシートで IMEモード を 設定しているのだが、
時折、日本語入力のテキストボックスなのに日本語が入力出来ない場合があると言われた。
見てみると、テキストエディタ等では日本語入力が出来るのに
IE だと出来なくなっている・・・。
しかも常に入力出来ないわけではなく、たまに入力出来なるなる、とのこと。
原因は IME だった。
「詳細なテキストサービス」を無効にすると、正常動作となった。

【詳細なテキストサービス】
テキストサービスは Windows のバック グラウンドで実行される CTFMON.exe というプログラムにより提供されるサービスです。
このサービスを利用することにより、以下の拡張された入力環境を利用することができます。
● 音声認識
● 手書き認識
● 翻訳機能

[IME] テキストサービスが有効になっている際に発生する現象について

【無効にする方法】
[コントロールパネル]→[地域と言語のオプション]を開く
[言語]タブ の [テキストサービスと入力言語] の [詳細]ボタンをクリック
[詳細設定]タブ の [システムの構成] の [詳細なテキストサービスをオフにする]をチェック

ただし、パッチ等の適用により初期化される可能性が高いため
その都度設定が必要!

っていうか、バグバグなら既定の設定にしないで欲しい・・・。

ASPStateTempSessions テーブル の SessionId列の意味

ASP.NET の セッションモードを SQL Server にしている場合。
ASPStateTempSessions テーブル の SessionId列の意味。
1~24文字目:SessionID (Session.SessionID)
25~32文字目:ASPStateTempApplications テーブルの AppId列 を HEX化したもの

SQL CLR で、TransactionScope

SQL CLR で、TransactionScope を使用している。
ひとつの SQL CLR から いくつかの SQL CLR を 呼び出して処理しているのだが、
ループで何度も同じブツを呼び出すと以下のエラーが出た。

——————————————————————————–
System.Data.SqlClient.SqlException: 現在のトランザクションのコミットおよび
ログ ファイルに書き込む操作はサポートできません。
トランザクションをロールバックしてください。
場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQuerySmi(Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.InternalExceptionNonQuery
(DbAsyncResult result, String methodName, Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
場所 XXX99999.StoredProcedures.XXX99999()

メッセージ 3991、レベル 16、状態 1、プロシージャ XXX99999、行 0
ユーザー定義のルーチン、トリガ、または集計 “XXX99999” を入力する前は
アクティブであったコンテキスト トランザクションが内部で終了しました。
このような動作は許可されません。
厳密なトランザクションの入れ子を設定するようにアプリケーションのロジックを変更してください。
——————————————————————————–

・・・。
アプリケーションのロジックを変更してください、なんてメッセージが
返ってくるなんて、時代も変わりましたね。

いまいち意味が分からないけれど、
エラーでアベンドする場所が、実行するたびに変わるので
これはプログラム自体の不具合では無さそう。

というわけで、暗黙なトランザクションではなく、【厳密】なトランザクションを目指して
System.Data.SqlClient.SqlTransaction を使用する方法に直してみました。

はい、エラー回避です。
これって、コアな処理では、TransactionScope 使っちゃいけない、ってこと??

ASP.NET 2.0 AJAX

ASP.NET 2.0 AJAX で開発しているシステムがある。
不思議なことにあるクライアント1台からだけ以下のエラーが発生し、
全然動作しない。

————————————————
Sys.WebForms.PageRequestManagerServerErrorException:
An unknown error occured while processing the request on the server.
The status code returned from the server was: 500
————————————————

AJAXのエラーという事は想像が付くが、さっぱりわからない。
Webで検索しても常にエラーが出るような内容のサイトは多いが、
ある1台のみ、というのが見つけられず、完全にお手上げ状態だった。
ここでは書けませんが、「とある方」に解決して頂きました。

AJAXを外して実行してみたら、まったく異なるエラーになりまして
それを見てみたら、めちゃくちゃ単純なバグでした。
ひとつ勉強になりました。
AJAXのエラーが出たら、とりあえず、AJAXを外して実行してみる!
本当にこれで良いのかわからないけれど、とりあえず良い経験でした。

Vista で regsvr32

Vista で regsvr32 を実行したら、以下のエラーが発生した。

————————————————
モジュール “C:\xxx\xxx.ocx” は読み込まれましたが、
DllRegisterServer への呼び出しはエラーコード
0x80040200 により失敗しました。

この問題の詳細については、エラーコードを検索語
として入力してオンラインで検索してください。
————————————————

regsvr32 の batファイルを作成しておいて
batファイルを右クリックし、「管理者として実行」で解決した。

営業担当のIさん

IE7 で スクリプトから open していない画面を window.close() すると
例え、window.openerに何か入れていても常に
「このウィンドウを閉じますか?」
とメッセージが表示されてしまう。
色々探してみたけど、無理という情報しか見つからない。
そしたら、なんと営業担当のIさんが良い情報を見つけてくれました。
(window.open(”, ‘_top’).opener=top).close();
で解決♪
ありがとうございました!!!

文字化け

Frameを使用しているHTMLの画面をIE6で見たら、タイトルが文字化けしていた。
一番上に記述してある
<?xml version=”1.0″ encoding=”Shift-JIS”?>
を、
<?xml version=”1.0″ encoding=”UTF-8″?>
にしたら直ってしまった。
うーん、文字コード分からない・・・。

VisualStudio2005

今、ASP.NET2.0でとあるシステムを開発している。
これがなんと初めての VisualStudio2005 での実開発だ。
あぁ、時代の流れについていっていない・・・。
便利ですね。開発機にIISが無くても良いなんて。
開発したファイルをサーバーへ配布する際、以下のエラーが出力された。
「構成にエラーがあります。構成セクション connectionStrings を認識できません。」
なぜだー!!!!
サーバーの設定を見直してみる。
結果は単純。
IIS の ASP.NET タブ の ASP.NET バージョンが 1.1.4322 となっていた。
connectionStrings は 2005 からの対応なので、確かに認識出来ないですね。
これを、2.0.50727 に変更したら、ちゃんと動作しました。
良かった。

ファイルコンバータ

(株)システムサポート の ファイルコンバータ を使用して Windows で入力したデータを、ホストデータに変換するシステムがある。
クライアントPCをすべて Windows98 → WindowsXP へ置き換える事になり、プチリニューアル作業をしていた。
事前に、ファイルコンバータの本体をレンタルし、開発で使用している WinXP に繋ぎ、動作確認を実施した。
何も問題が出なかったので、本体を購入し、実際のエンドユーザ使用マシンに繋いで、動作確認したところ、動かない
ファイルラベルの作成で、「ラベル領域がありません。」と言われる。
販売元へ電話して聞いたところ、「シリアルポートが双方向になっていないみたいですね。BIOSで双方向に設定してください。」とのこと。
やばい、何を言われているのか分からない。
社長に聞いてみると、以前のシステムでもその設定をした記憶があるという。
BIOS画面にし、シリアルポートの設定画面にしてみると、設定値がいくつもある。
しかもどれにして良いか分からない・・・
結局、ネットで調べてみると、「Bi-Directional」が双方向と記述してあるサイトがあったため、これに設定。
無事ちゃんと動作しました。
その後、ファイルコンバータのマニュアルを見ていると、ちゃんと書いてありました。
シリアルポートの双方向・・・。
マニュアルはちゃんと読まないとだめですね。

HTMLのファンクションキー

HTMLのファンクションキーを無効にしたいと思った。
過去に作ったシステムのソースを眺めながら、対応したが、どうしても F1キーだけ対応できない。
インターネットで検索してみたら、onhelp=”return false;” で対応できてしまった。
何だか騙された気分になった。
しかも過去に作ったシステムも見直してみるとちゃんと、onhelp=”return false;” と記述されていた。
恥ずかしい・・・。

SQL Server 照合順序

SQLServer2000で動作しているシステムに「尾てい骨」の「てい」に当たる文字を入力すると「?」となると連絡を受けた。
こちらでも試してみた。
Enterprise Manager より直接入力すると、
「入力した値は、列のデータ型またはデータ長と一致しません。」
とメッセージが出力されて入力すら出来ない。
クエリ アナライザより INSERT文 で登録してから、SELECT すると「尾?骨」と出力される。
再度、Enterprise Manager で直接中を見ても「尾?骨」だ。
調べてみると、その文字は「JIS補助漢字 (JIS X0212)」で、
SQLServer2000 では、Unicode のみの対応となるらしい。
Unicode 対応などした覚えは全くない。
既存のデータベースを Unicode 対応に変更するにはどうすれば良いのか。

① 照合順序名を変更する
SELECT CONVERT(char, SERVERPROPERTY(‘collation’))
ALTER DATABASE TABLE1 COLLATE Japanese_CS_AS_KS_WS
SELECT CONVERT(char, SERVERPROPERTY(‘collation’))
② データ型を varchar → nvarchar に変更する

テストしてみたところ、正しく登録も表示もされた。
照合順序名は、実際何にすれば良いのだろう?
今回はすべて区別するようにしてみた。(Japanese_CS_AS_KS_WS)
しかも、これに変更して全く問題が無いと言い切れない。
すべてにおいてテストが必要だ。
まだまだ勉強が足らないなぁ

SQLのレスポンス

SQLServer2005 を検証している社員に質問を受けた。
同じSQLで条件値のみ変更した場合、ある条件値のみ異常にレスポンスが悪いらしい。

① SELECT * FROM 営業所コード = ‘A’
② SELECT * FROM 営業所コード = ‘B’

パラメータクエリは使用していないようだ。
実行プランを見ると、①と②はまったく異なるプランが返ってくるとのこと。
内容だけを聞くとアドホッククエリによる現象に見える。

IISメタベースにアクセス出来ませんでした

.NETを勉強し始めた新人に質問を受けた。
Visual Studio Express Edition で学習してもらっているのだが、
ローカルのIISで実行したら「IISメタベースにアクセス出来ませんでした」とエラーになるという。
IISメタベース?さっぱり分らない。
ネットで調べてみると、Visual Studio 2005 → IIS の順にインストールすると起こる現象らしい。
.NETのインストールでIISを後から入れると不正動作するというのは初期よりよく聞く話だったので納得。
ネットで書いてあるとおり、以下の手順で解決した。

① コマンドプロンプトで「C:\WINDOWS\Microsoft.NET/Framework/v2.0.5027」をカレントにする
② 「aspnet_regiis -i」を実行

調べてみた。

IIS メタベースの紹介
ASP.NET IIS 登録ツール (Aspnet_regiis.exe)

三愛情報 株式会社

〒510-0074 三重県四日市市鵜の森1丁目10番7号

電話番号: 059-359-0561