2015年8月29日土曜日

SQL Server 2012からBCPを使用すると問題が発生します。

SQL Server 2012からBCPを使用すると問題が発生します。

BCPでファイル化するさいに、対象のテーブルの内容にNULLがあると、BCPはエクスポートする際に、警告を出します。

http://blogs.msdn.com/b/jpsql/archive/2013/08/16/sql-server-2012-bcp-bcp-null.aspx

警告を出すので、BCPが0で終わらなくなり、バッチが失敗します。
SQL Server 2012のBCPからの動作です。

SQL Server 2012では、NULLを入らないようにJOINをうまくする必要があります。

BCPの項目数が異なる場合のエラーについてSQLState = 22005、SQLState = S1000

1)BCP先のテーブルのほうが項目数が少ない場合

10:30:33.29>bcp wrk.dbo.TestTable in a.txt -S localhost -U sa -P TCOS -t, -c

コピーを開始しています...
SQLState = 22005, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]Invalid character value for cast specification
0 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 31

2)BCP先のテーブルのほうが項目数が多い場合

10:34:29.56>bcp wrk.dbo.TestTable in a.txt -S localhost -U sa -P TCOS -t, -c

コピーを開始しています...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]Unexpected EOF encountered in BCP data-file
0 行コピーされました。
ネットワーク パケット サイズ (バイト): 4096
クロック タイム (ミリ秒) 合計     : 16
10:35:05.93>

2015年8月7日金曜日

デットロックの調査方法



1)SQL Profiller

Locks>Deadlock graph
を設定する

ProfilerでDeadlock graphをキャプチャしてキャプチャ後にマウスカーソルを移動すると
それぞれのクエリを確認できることを確認しました。

2)トレース設定

設定方法
dbcc traceon(1222,-1)

解除方法
dbcc traceoff(1222, -1)

結果は、SQL Serverログに落ちます。


参考文献

 ブロッキングとデッドロックを後追い確認する方法
http://blog.engineer-memo.com/2012/08/30/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%81%A8%E3%83%87%E3%83%83%E3%83%89%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E5%BE%8C%E8%BF%BD%E3%81%84%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9/




 
 
エラー
メッセージ 1205、レベル 13、状態 51、行 10
トランザクション (プロセス ID 54) が、ロック 個のリソースで他のプロセスとデッドロックして、このトランザクションがそのデッドロックの対象となりました。トランザクションを再実行してください。