タグ付けされた質問 「sql-server」

Microsoft SQL Serverのすべてのバージョン(MySQL以外)。sql-server-2016のようなバージョン固有のタグも追加してください。これは、質問に関連することが多いためです。

1
デッドロックグラフに犠牲者のいないエントリがあるのはなぜですか?
SQL Server 2008のデッドロックグラフの分析方法を学習しようとしていますが、<victim-list>ノードが空のエントリがたくさん見つかります。これらのエントリの意味がわかりません。被害者がいない場合、どのようにしてデッドロックの原因となっているwaitresourceを特定できますか?これらのエントリはどういう意味ですか? ここに私が見ているエントリーの簡単な例があります: <deadlock-list> <deadlock> <victim-list /> <process-list> <process id="processd2b6508" taskpriority="0" logused="10000" waittime="31" schedulerid="63" kpid="9104" status="suspended" spid="69" sbid="0" ecid="184" priority="0" trancount="0" lastbatchstarted="2012-07-30T01:10:45.550" lastbatchcompleted="2012-07-30T01:10:45.550" clientapp=".Net SqlClient Data Provider" hostname="XXXXXXX" hostpid="3648" isolationlevel="read committed (2)" xactid="30461033" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="" line="1" sqlhandle="0x020000002340c50225c17d0eec9bf7c51129348edffd1c70" /> <!--About 2 more frame tags... --> …

3
SSMS接続ダイアログにリストされるサーバーの順序を制御するにはどうすればよいですか?
私の現在のプロジェクトでは、SQL 2008-> 2012からアップグレードし、ハードウェアのタスクをやり直して、繰り返し、データベースのシャッフルを行います。 マイナーな問題の1つは、SSMSの接続ダイアログがサーバーの順序を入れ替えて最新のものを最優先することです。特定の日に6〜10台のDBサーバーに接続していて、リストから特定のサーバーをすばやく見つけたいと考えると、この動作はヘルプよりもはるかに邪魔になります。 この動作を無効にして、サーバーをアルファベット順に、または追加された順序で、またはサーバーに接続するたびに変更されないものがあるようにする方法はありますか? それを除いて、それらのリスト/ファームから特定のサーバーへの接続をよりよく管理するための完全に異なる方法はありますか? SQL 2012にSSMSを使用しています(2008ソリューションにも興味があります)。
11 sql-server  ssms  tools 

3
MS SQLデータベースで相互に関連するストアドプロシージャの巨大なWebを文書化する:どのツールまたは形式ですか?
これは「1000ページの本を読む」よりも短い答えの質問であるといいのですが、それが本当の状況なら、私をそれに当てはめてください。 私は本物のDBAではありません。私はDBAが必要だと気づいているソフトウェア開発者ですが、私が働いている店にはDBAがいません。ただし、いくつかのコアストアドプロシージャを含むMS SQLデータベースの設計は、大きな混乱です。ストアドプロシージャは遅く、バグがあると思われますが、どのように機能することが予想されるのかさえわからないため、修正方法もわかりません。 最初に、すべての機能がどのように機能するかを文書化し、ユニットテストを開始して、ストアドプロシージャが実際に機能することを証明する一連のユニットテストを構築することにしました。彼らが実行するロジックは、私たちのアプリケーションの重要な部分です。つまり、それは当社の主要製品の「宝石」であり、その動作方法は完全に文書化されていません。 私は、プロのDBAが相互に呼び出すストアドプロシージャの巨大なWebを理解するために、既存の、または必要に応じて自分で作成することを期待している可能性がある特定の技術ドキュメントを探しています。 大きなストアドプロシージャを文書化するための通常の形式は何ですか?各Inパラメータの期待値の説明(つまり、「前提条件」、「事後条件」、つまりブールパラメータの場合、オンまたはオフにすると何が変わるかなど) 通常、それをどのように文書化しますか?SQLコメントのみ?目的に固有の外部ツールですか?外部の「ドキュメント」?MS SQL Management Studio以外にSQLツールはありませんが、環境の理解、文書化、およびテストを改善するツールがあるかどうか疑問に思っています。多分それが私の質問をするより良い方法です。混乱を解決するには、どのツールが必要ですか? 私たちの目標は、次のことができるようにすることです。 A.生成されたドキュメント、または環境に追加したツールを使用して、プロシージャがどのように機能するかを理解し、ストアドプロシージャの単体テストカバレッジを作成できるようにします。 B.これらの複雑なストアドプロシージャをそれぞれ適切に呼び出す方法をクライアントアプリ開発者に示す。 C.ストアドプロシージャの単体テスト。

5
SQL ServerはOracle RACの機能と同等ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 5年前に閉鎖されました。 私はグーグルをやったが、この質問に対する答えが数年前よりも最近に見つからなかったので、私は質問したいと思った。OracleのRAC機能は、読み取りトランザクションと書き込みトランザクションの両方にロードバランシングを提供するだけでなく、ダウンタイムなしのスケールアウトと高可用性を提供します(少なくとも、私が理解しているように、私たちはRACを使用する最初のデータベースを導入しようとしています。それがどうなるか見てみましょう)。 同等の機能を提供するSQL Server機能セット(または上にインストールできるサードパーティコンポーネント)はありますか?私たちは常にWindowsクラスタリングを使用してきました。フェイルオーバーイベントが発生すると、SQLのダウンタイムが約20〜30秒発生します。これは常に許容できますが、理想的ではありません。現在、SQL 2012のAlwaysOnにより、SQL Serverはそれを約15秒に短縮し、読み取り専用のセカンダリデータベースの概念を追加しますが、書き込みトランザクションは単一の接続ポイントを通じて制限される必要があります(多くのトランザクションが読むだけですが、実際にはロードバランシングではありません)。ノード障害やパッチの必要性が発生した場合でも、ダウンタイムが発生します。 私はそれがより好奇心であると思います-これはSQL ServerがOracleに遅れをとっている唯一の領域であるように感じます(少なくとも私が個人的に使用したのを見た機能の中で)。Microsoftの同等の機能が追加されるのを待つ間、そのギャップを埋め、独自のSQL Serverの展開を改善するオプションがあるかどうかを確認したいと思いました。

2
1つのメインジョブから複数のSQL Serverエージェントジョブを順番に呼び出す良い方法は?
順次実行する必要があるSQL Serverエージェントジョブがいくつかあります。実行する必要があるジョブの概要をわかりやすくするために、への呼び出しで他のジョブを呼び出すメインジョブを作成しましたEXEC msdb.dbo.sp_start_job N'TEST1'。はsp_start_job即座に終了しますが(ジョブステップ1)、TEST1次のジョブを呼び出す前に、ジョブが終了するまでメインジョブを待機させます。 そのため、ジョブが呼び出された直後に実行を開始し(ジョブステップ2)、メインジョブを強制的にサブジョブが完了するまで待機させる次の小さなスクリプトを記述しました。 WHILE 1 = 1 BEGIN WAITFOR DELAY '00:05:00.000'; SELECT * INTO #jobs FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;', 'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'', @execution_status = 0, @job_aspect = N''JOB'''); IF NOT (EXISTS (SELECT top 1 * FROM #jobs)) BEGIN BREAK END; DROP TABLE #jobs; END; これは十分に機能します。しかし、私はよりスマートで安全な(WHILE 1 = …

5
100mmレコードでJOINを使用して更新します。これをより適切に行う方法は?(T-SQL)
実際には、1つのテーブルの1億レコードを更新する必要があります。つまり、列のvarchar値を単にIDに置き換えることでテーブルを正規化します。(「置換」と言いますが、実際にはIDを別の列に書き込んでいます。) 私が達成しようとしているのは、データセットを正規化することです。まだ正規化されていないデータにはインデックスがありません。私の考えは、更新が完了した後、varchar値をtinyint値で置き換える外部キーにインデックスを付けるのを待つ代わりに、生の値にインデックスを構築しないことでした。 UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) バックグラウンド サーバー2008 R2でMSSQL 2008 R2を使用 サーバーには8 GBのRAMがあります サーバーには1つのRAID10、7200 RPM SATAがあります(すばらしいですが、本番環境ではこれはデータの読み取りのみを行い、データの書き込みは行いません。さらに、最近のHDの不足により、コストのためにこれが必要になりました)。 サーバーにはデュアルクアッドコアXeon CPUが搭載されています マシンは他に何もしていません(現在は開発専用で、このプロセスのみ) 単純なロギングがオン(?-しかし、ロールバックできるようにログを記録しますか?) クエリは2つの異なるDBを参照することに注意してください。 更新されるテーブルのレコードの「幅」は455バイトです 実行中のリソース 物理RAMがいっぱいです ディスクI / Oが最大になりました CPUはほとんど何もしていません(チョークポイントはI / Oです) 実行時間は14時間で、カウントされています! 正規化の更新後に列(AutoClassName)を削除する場合でも、生データのインデックスが必要になるなど、いくつかのことが疑われます。また、JOINを開始するときにばかげて見えたJOINではなく、一度に1レコードずつテーブルをループダウンする必要があるのか​​どうかも疑問に思っていましたが、今はもっと高速だったようです。 残りの正規化更新(これと同様)の方法をより迅速に変更するにはどうすればよいですか?

1
実際の最低の正のREAL番号は何ですか
MSDNによると、REAL番号の範囲は-3.40E + 38から-1.18E-38、0および1.18E-38から3.40E + 38です。明らかに、実際の下限ははるかに低いです。次のスクリプトは、REAL列に1.401298E-45を入力します。 CREATE TABLE a ( r1 REAL NULL , r2 REAL NULL , r3 REAL NULL ) ; GO INSERT INTO a ( r1, r2 ) VALUES ( 1.18E-37, 10 ) ; GO DECLARE @i INT ; SET @i = 1 ; WHILE @i < 20 …

1
RAISERRORでのFLOATの使用
私はRAISERROR()いくつかの基本的な単体テスト機能を提供するために(ここに示すように)使用FLOATsしていますが、エラーメッセージで使用できないことに不満を感じています。フロートを文字列にキャストできることはわかっていますがRAISERROR、すべての単体テストで使用しています。すべてのテストに別のコード行を追加したくありません。(私の単体テストはすでに十分に説明が豊富です!)パラメーターリスト内でインラインキャスト/変換を実行する方法はありRAISERRORますか?または、この欠陥を回避する別の方法はありますか? 更新: 最終的に私ができることは次のとおりです。 RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) 残念ながら、RAISERROR一般的に%fまたはfloatを処理しません。だから私は代わりにこれをしなければなりません: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ...何十もの単体テストに散らばっているときは、混乱のように見えます。だから私はそれを次のようなものに要約したいと思います: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) しかし、それは私にIncorrect syntax near 'CAST'メッセージを送ります。それが違法である理由はわかりませんが、違法です。代わりにここで使用できる別の「ワンライナー」はありますか?
11 sql-server  t-sql 

1
SQL Serverデータとログファイルの最適化は、MoveFile APIでライブ
私の雇用主は、Windows MoveFile APIを使用して開いているファイルを最適化するNTFS最適化ソフトウェアの展開を検討しています。これは、2005-2012のSQLバージョンと2003および2008 R2のWindowsバージョンを実行する何千ものSQL Serverサーバーに展開されます。重要なのは、私が話している製品はPerfectDiskですが、同じように機能する同様のプログラムがあると思います。 これまでのテストでは、偶発的なI / Oパフォーマンスの問題を除いて、多くの問題が判明していません。これは驚くべきことではなく、デフラグの再スケジュールとチューニングによって回避できます。しかし、私はデータ破損のリスクについてより懸念しています。 このタイプのソフトウェアをデータベースサーバーの運用環境で実行した経験がある人はいますか?データ破損が発生しましたか? それが問題を引き起こしているという確固たる証拠を見つけることができなくても、私はこれについてはむしろ不安です。 返信ありがとうございます。 追加のために編集:この恐ろしいアイデアはありがたいことに、おそらく一部は私が出した警告のせいで忘れられていました。

1
10 ^ 37/1が算術オーバーフローエラーをスローするのはなぜですか?
最近の大きな数字でのプレイの傾向を続けて、私は最近発生したエラーを次のコードに沸騰させました: DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37); PRINT @big_number + 1; PRINT @big_number - 1; PRINT @big_number * 1; PRINT @big_number / 1; このコードの出力は次のとおりです。 10000000000000000000000000000000000001 9999999999999999999999999999999999999 10000000000000000000000000000000000000 Msg 8115, Level 16, State 2, Line 6 Arithmetic overflow error converting expression to data type numeric. 何? 最初の3つの操作は機能するが最後は機能しないのはなぜですか?そして@big_number、出力を明らかに格納できる場合、算術オーバーフローエラーが発生する可能性があり@big_number / 1ますか?

2
ジョブカテゴリのいずれかのジョブが失敗したときにアラート
SQL Server 2008で、特定のカテゴリのジョブが失敗したときに電子メールを送信するアラートを設定することはできますか? SSRSサブスクリプションが失敗するたびに電子メールをセットアップしたいと思っています。これらのサブスクリプションはすべて、カテゴリReport Serverのジョブです。 編集 -SSRSサブスクリプションが失敗しても、ジョブ自体は失敗しないことが判明したため、私の質問はSSRSサブスクリプションの監視の使用には適用されません。しかし、私は私たちの環境で実行している他の仕事についてまだ知りたいです

2
日時列を秒数に変換します
SQL Serverデータベースにdatetime列があります。 列のlong値を表す新しい列を作成する良い方法は何datetimeですか?long秒数を表します。 これをlongsに変換できれば、長い数を固定量で除算できるので、期間ごとのクエリによるグループ化が簡単になると思いました。 テーブルは静的であり、データを更新または削除しません。

2
HierarchyIdでツリーブランチをロード/読み取るためのセットベースの方法はありますか
HierarchyIdをいじっていますが、次のことを行うためのセットベースの方法を理解していません。 すべてのサブツリーを一度に挿入する 一度にすべてのサブツリーを取得する この質問は以前の質問に関連しており、HierarchyIdでこれらの2つのタスクを実行する唯一の方法は、一度に1つのノードまたは1つのレベルであると思われます。実体化されたパスを使用している場合、両方のアクションは、単一の(そして些細な)セットベースのコマンドによって簡単に実行されます。 私は何が欠けていますか? 編集:サブツリーを移動する方法も見逃しましたが、ミカエル・エリクソンのコメントからそれを学びました

5
SQLプロファイラーはサーバーのパフォーマンスに影響しますか?
SQL Server 2008が高負荷で失敗するという問題に直面しています。その荷重ケースを見つけて、荷重を処理できるようにコードを最適化する必要があります。私はインターネットでSQLプロファイラーを使用してデータベースの相互作用を追跡し、後で分析して問題が発生する正確なポイントを見つけることができることを発見しました。SQLプロファイラーを起動する方法についても発見しました。しかし、私の質問は、SQLプロファイラーを起動することで、サーバーのパフォーマンスに影響を与えるということですか?

3
T-SQLを介したプログラムによるデータベースの参照
データベース名を引数として取り、そのデータベースのインデックスとその断片化レベルのテーブルを返すストアドプロシージャを書いています。このストアドプロシージャは、DBAデータベース(DBAが監視および最適化に使用するテーブルを含むDB)に存在します。問題のシステムはすべて、SQL Server 2008 R2です。 基本的なクエリは解決しましたが、インデックスの実際の名前を提供しようとしています。私の知る限りでは、その情報は各個人のsys.indexesビューに含まれています。私の特定の問題は、別のデータベースのストアドプロシージャからプログラムによってそのビューを参照しようとしていることです。 説明のために、これは問題となっているクエリの一部です。 FROM sys.dm_db_index_physical_stats(@db_id,NULL,NULL,NULL,NULL) p INNER JOIN sys.indexes b ON p.[object_id] = b.[object_id] AND p.index_id = b.index_id AND b.index_id != 0 クエリは、適切なsys.indexesビューを使用しているため、@ db_idで識別されるデータベースから実行すると正常に機能します。ただし、これをDBAデータベースから呼び出そうとすると、sys.indexesビューが間違ったデータベース用であるため、すべてnullになります。 より一般的に言えば、私は次のようなことができるようにする必要があります: DECLARE @db_name NVARCHAR(255) = 'my_database'; SELECT * FROM @db_name + '.sys.indexes'; または USE @db_name; 文字列連結とOBJECT_NAME / OBJECT_ID / DB_ID関数の組み合わせを使用して、データベースの切り替えや他のデータベースの参照を試みましたが、何も機能しないようです。コミュニティのアイデアがあれば教えていただければ幸いですが、このストアドプロシージャを個別のデータベースに配置するために、ツールを変更する必要があると思います。 提案を事前に感謝します。
11 sql-server 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.