SQLServerにおいてプロファイラを実行するとリアルタイムでトレースが出力されます。
しかし、Windowsをログオフすると停止されてしまいます。
ログオフしてもトレースをファイルに出力し続ける方法を教えていただけないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

クエリによるトレースファイル作成ならいかがでしょうか?



プロファイラでお好みの設定で実行します。
ファイル-エクスポート-トレース定義のスクリプト からスクリプトを保存します。
プロファイラは終了してください。

ManagementStudio、クエリアナライザなどで↑で保存したSQL開きます。

「exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL」
こんな一文がありますので、「InsertFileNameHere」の部分に保存先のパス+ファイル名に変更
実行します。
☆このとき結果として出力された値は、停止と終了で使用するので控えてください。

これでトレースファイルが作成されていきます。
ファイルの作成数、1ファイルのサイズ上限など設定できますのでお好みに。

ManagementStudio、クエリアナライザは閉じて大丈夫だったと思うのでこれでいけるのではないかと思います。

停止、終了は、
sp_trace_setstatus 2, 0 --2の部分は☆の出力された値、0は停止です。
sp_trace_setstatus 2, 2 --2の部分は☆の出力された値、2は終了です。
この順番でやらないと作成中のファイルが開放されないので気をつけてください。
ちなみに、
sp_trace_setstatus 2, 1 --2の部分は☆の出力された値、1は開始です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
とてもわかりやすかったです。
今後ともよろしくお願いいたします。

お礼日時:2011/05/02 17:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSELECT文でのデッドロックに対しての対処方

先日よりデッドロックが発生するようになり、確認の為にトレースログを
抽出するように設定かけたのですが、UPDATE文とSELECT文がぶつかり
デッドロックが発生している事がわかりました。

しかし、UPDATE文にはトランザクションをかけていますが
SELECT文には特にロックかけていない為、どうして起こっているのか
わかっていません。

SELECT文を読んでいる時にUPDATE文によって
レコードに変更があった為、デッドロックが発生したのでしょうか?

SELECT文にはUNLOCKをつけた方がいいのでしょうか?



プログラムはDELPHI
DBはSQLSERVER2000になります。

お忙しい所申し訳ありません。
宜しくお願い致します。

Aベストアンサー

#6です。
気になったの書き込みます。

参照側で考えていましたが、更新側のロック範囲は適正でしょうか?
不必要に広い範囲に排他ロックを掛けていないでしょうか。

例えば更新が select xx from yy where zz>aa for browse のようになっていると広範囲にロックが確保され要注意です。
また、更新がバッチであれば、途中コミットして排他時間を短くするなりの対策が考えられます。
とにかく参照処理も更新処理も出来るだけ範囲を小さくされることをお勧めします。

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QMS SQLServer のSQLで文字列の前にN:

MS SQLServer のSQLで文字列の前にN: をつけることをよく見かけますが、
「N:」とはいったいどんな意味なのでしょうか?
教えて下さい。

Aベストアンサー

T-SQLでの話かと思いますが・・・。NCHAR/NVARCHAR型という、型(タイプ)があるのですが、これらは、夫々、national character/national character varying(SQL-92での表記法)の意味を持っています。夫々、固定長文字列(Unicode)/可変長文字列(Unicode)です。
NVARCHARはSQL-Server2000では4000文字まで、VARCHAR2は8000文字まで格納可です。(つまり、1/2になるということです)

さて、N'***' とT-SQL内で書くと、''内の文字をUnicodeで表現されたものとして処理する、という意味になります。Nは、nationalの略です。ですから、日本語を使おうとするとNは必須になる、という事ですね。

こんな感じでつかいます。#N'Unicode 文字列'

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

QEXCELで文字列を時刻表示(時:分:秒)にしたいのですが?

セル内の7桁時分秒表示(00時00分00秒0)の文字列から00:00:00(時:分:秒)と表示させる。
又は00:00:00:0(時:分:秒:0)と表示させる。
よろしくお願いします。


2121170 を 21:21:17 又は 21:21:17:0
1710500 を 17:10:50 又は 17:10:50:0
0001070 を 00:01:07 又は 00:01:07:0

Aベストアンサー

◆表示だけなら
★表示形式をユーザー定義で、 00!:00!:00!:0 とします

★シリアル値にするなら
別のセルに
=TIME(LEFT(A1,2),MID(A1,3,2),MID(A1,5,2))

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む

QSqlServerとC#の連携問題 タイムアウト

C#+SqlServerでC/Sアプリを作りました。
しかし、現在下記の問題があります。
ご存知の方いらっしゃいましたら、教えてください。

クライアント側はデータをサーバー側に送信します。
サーバー側はデータを受信しながらSqlServerに保存します。
軽量のデータでやるなら、問題は出ません。
しかし、8GBのデータでやると、その途中、いつも下記のエラーが出ます。

Class:11
Index #0
Message: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
LineNumber: 0
Source: .Net SqlClient Data Provider
Procedure:
System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
場所 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
場所 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
場所 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
場所 System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
場所 System.Data.SqlClient.TdsParserStateObject.ReadByte()
場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
場所 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
場所 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
場所 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
場所 System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item)
場所 System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item)
場所 System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
場所 System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
場所 System.Data.Linq.DataContext.SubmitChanges()

その他:
 SqlServer2008 R2
 C# .Net3.5
WindowsServer2008 R2

C#+SqlServerでC/Sアプリを作りました。
しかし、現在下記の問題があります。
ご存知の方いらっしゃいましたら、教えてください。

クライアント側はデータをサーバー側に送信します。
サーバー側はデータを受信しながらSqlServerに保存します。
軽量のデータでやるなら、問題は出ません。
しかし、8GBのデータでやると、その途中、いつも下記のエラーが出ます。

Class:11
Index #0
Message: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
Line...続きを読む

Aベストアンサー

8GB の何をどういう風に送っているのかまったく書かないのですね。
Command オブジェクトを使用しているのならタイムアウト値を無制限にするとか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報