問題タブ [sql-server-2005]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQL Server 2005 で実行された SQL ステートメントを監視するにはどうすればよいですか
私のプロジェクトでは、SQL Server に対して実行される SQL ステートメントが何らかの理由で失敗しています。一部のコードはすでに本番環境で使用されているため、デバッグは簡単な作業ではありません。したがって、ステートメントはプロジェクトによって実行時に生成され、特定の条件が満たされたときに問題が発生する可能性があるため、データベース自体でどの SQL ステートメントが使用されているかを確認する方法が必要です。
したがって、私は受け取った声明を監視し、欠陥があるかどうかを自分で確認する可能性を検討しました.
データベースは SQL Server 2005 で実行されており、データベースを操作するための主要なツールとして SQL Server Management Studio Express を使用しています。だから私の質問は、これを行うための最良の方法は何ですか?
sql - 最新の価格を取得する SQL クエリ
MS SQL 2005 テーブルにさまざまな「もの」の価格を含むテーブルがあります。1 日あたり何百ものレコードがあり、さまざまなモノの価格がさまざまな時間に更新されます。
あるグループのものについて、今日の最新の価格を取得する必要があります。以下のクエリは機能しますが、何百もの行が戻ってくるので、それらをループして ThingID ごとに最新のものだけを抽出する必要があります。ThingID ごとに最新のものを取得するにはどうすればよいですか (たとえば、GROUP BY を介して)。または、サブクエリを使用する必要がありますか?
更新:複雑さを隠すために、ID 列を int に入れました。実際には GUID です (シーケンシャルではありません)。上記のテーブル定義を更新して、uniqueidentifier を使用しました。
sql-server-2005 - SQL 2005 の役割
データベースを作成し、追加のログインを作成し、作成したデータベースにそれらのログインに基づいてユーザーを追加できるようにするためにログインが必要な場合、SQL ログインにどの役割を与える必要がありますか? これは SQL 2005 です。
sql-server-2008 - 2008 DB に SQL Server Management Studio 2005 を使用できますか?
Management Studio 2005 を使用して SQL Server 2008 DB を管理しようとしています。これは、サーバーが 64 ビット マシンであり、64 ビット バージョンのソフトウェアしかないためです。
これは可能ですか?
Management Studio 2008 を使用して SQL Server 2005 DB を管理するのはどうですか?
sql - DELETE ステートメントが明確な理由もなく SQL Server でハングする
編集:解決しました。テーブルにループのあるトリガーがありました(以下の私自身の回答を読んでください)。
次のような単純な削除ステートメントがあります。
これはハングアップするだけで、タイムアウトも何もありません。
実行計画を調べたところ、関連するテーブルの多くのルックアップで構成されており、外部キーが削除を失敗させないようにしていますが、他のテーブルにはその特定の行を参照する行がないことを確認しました.
現在、データベースに接続している他のユーザーはいません。
これに対して DBCC CHECKDB を実行したところ、0 個のエラーが報告されました。
の結果sp_who
とsp_lock
クエリがハングしている間に、私の spid に多くの PAG および KEY ロックがあり、時折 TAB ロックがあることに気付きました。
テーブルには 1.777.621 行あり、はい、pk は主キーであるため、インデックスに基づく単一行の削除です。実行計画にテーブル スキャンはありませんが、Table Spool (Eager Spool)と書かれたものが含まれていることに気付きましたが、Estimated number of rows 1 と書かれています。主キー列を見ているとだけ言っています。
テーブルで DBCC DBREINDEX と UPDATE STATISTICS を試しました。どちらも妥当な時間内に完了しました。
残念ながら、この特定のテーブルには多数のインデックスがあります。これはシステムの中核となるテーブルであり、多数の列と、送信と受信の両方の参照があります。正確な数は、48 個のインデックス + 主キーのクラスター化インデックスです。
他に何を見るべきですか?
また、このテーブルには以前はこの問題がありませんでしたが、この問題は今日突然発生しました。また、同じテーブル設定 (顧客データベースのコピー) を持つ多くのデータベースがあり、それらは期待どおりに動作します。問題があるのはこの 1 つだけです。
sql-server-2005 - ユーザーには DBCC DBREINDEX を実行する権限がありません
SQL Server 2005 で次のエラー メッセージが表示されます。
コマンドを実行するためにユーザーに付与する必要がある最小限の役割はどれですか?
sql - SQL サーバー ログインのパスワード変更のスクリプトを作成するにはどうすればよいですか?
タイトルのとおり、既存の SQL サーバー ログインのパスワードを変更する必要があり、SQL スクリプトを使用して変更したいと考えています。
sql-server-2005 - .NET アプリケーションから SQL Server への呼び出しが散発的に遅くなる
以下のコードに従って構造化された、まだ運用中のレガシー システムから継承した SQL Server のテーブルがあります。table create ステートメントの下のコードで説明されているように、テーブルをクエリするための SP を作成しました。私の問題は、エンタープライズ ライブラリ 4 と DataReader オブジェクトの両方を介した .NET からこの SP への呼び出しが散発的に遅いことです。SP は、データ層のループ構造を介して呼び出されます。ループ構造は、ユーザー オブジェクトを設定する目的で SP に入るパラメーターを指定します。また、ループ構造を通過するたびに遅い呼び出しが発生するわけではないことに注意することも重要です。通常、ほとんどの場合、またはそれ以上は問題なく、その後表示を開始すると、デバッグが非常に困難になります。
問題のテーブルには、約 500 万行が含まれています。たとえば、遅い呼び出しには 10 秒もかかりますが、速い呼び出しには平均で 0 ~ 10 ミリ秒かかります。スロー コール中にトランザクションのロック/ブロックを確認しましたが、何も見つかりませんでした。呼び出し時間を監視するために、データ層にいくつかのカスタム パフォーマンス カウンターを作成しました。基本的に、パフォーマンスが悪いと、その 1 つの呼び出しが非常に悪くなります。でも、いいときは本当にいい。いくつかの異なる開発者マシンで問題を再現できましたが、もちろんより強力なハードウェアを備えた開発およびステージング データベース サーバーでは再現できませんでした。通常、問題は SQL サーバー サービスを再起動することで解決されますが、常にではありません。クエリしているフィールドのテーブルにインデックスがあります。しかし、私が望むよりも多くのインデックスがあります。ただし、従来のシステムに影響を与える可能性があるため、インデックスを削除したり、いじったりすることをためらっています。誰かが以前にこのような問題を経験したことがありますか、またはそれを解決するための推奨事項はありますか?
sql-server-2005 - Sql Server 2005 サービスの最小限のアクセス許可セットは何ですか?
ベスト プラクティスでは、Sql Server をインストールして SYSTEM として実行しないことをお勧めします。作成したユーザー アカウントに与える必要がある最低限の条件は何ですか?
sql - 1つのトランザクションでスキーマと行を更新するSQLServer2005
私は現在、ユーザーがそのテーブルの1つのスキーマの一部を指定できるようにするレガシーシステムを更新しています。ユーザーは、このインターフェースを介してテーブルの列を作成および削除できます。このレガシーシステムはADO2.8を使用しており、データベースとしてSQL Server 2005を使用しています(この獣を近代化する試みが始まる前に、どのデータベースを使用していたかを知りたくありません...しかし、私は逸脱します。=))
この同じ編集プロセスで、ユーザーは、これらのユーザー作成フィールドに格納できる有効な値のリストを定義(および変更)できます(ユーザーがフィールドに入力できる値を制限したい場合)。
ユーザーがフィールドの有効なエントリのリストを変更したときに、有効な値の1つを削除すると、新しい「有効な値」を選択して、この(現在は無効な)値を含む行をマップできます。それらは再び有効な値を持ちます。
古いコードを調べてみると、上記の変更はトランザクション内で行われないため、システムが無効な状態になることに対して非常に脆弱であることがわかりました(したがって、他の誰かが上記のプロセスの途中でやって来て、独自の変更...まあ、あなたは引き起こすかもしれない問題を想像することができます)。
問題は、単一のトランザクションでそれらを更新しようとしていることですが、コードがそのテーブルのスキーマを変更する部分に到達するたびに、他のすべての変更(行の値の更新、スキーマが変更されたかどうかに関係なく、トランザクションのその時点までに作成されたテーブルは完全に無関係なテーブルである可能性があります)サイレントにドロップされているように見えます。ドロップされたことを示すエラーメッセージは表示されず、最後にトランザクションをコミットしてもエラーは発生しません...しかし、トランザクションで更新されるはずのテーブルを調べると、新しい列のみが表示されますある。行われたスキーマ以外の変更は保存されません。
ネットで答えを探すのは、これまでのところ、数時間の無駄であることがわかっています...そこで私は助けを求めてここに向かいます。テーブルのスキーマを更新し、テーブル内の行を更新する(同じテーブルであろうと他のテーブルであろうと)ADOを介してトランザクションを実行しようとした人はいますか?許可されていませんか?この状況で役立つ可能性のあるドキュメントはありますか?
編集:
さて、私はトレースを行い、これらのコマンドはデータベースに送信されました(括弧内の説明)
(ここで何が起こっているのかわかりません。一時的なストアドプロシージャを作成しているようです...?)
(ユーザーが生成したフィールドの定義情報を保持するテーブルを取得します)
(私のコードは、現在の情報を取得して、ここでそれらのリストを繰り返し処理していたと思います)
(これは、定義の変更されたデータを入力している場所のようです。それぞれを調べて、カスタムフィールド自体の定義で発生した変更を更新します)
(これは、この保存が始まる前に、私のコードがインターフェースを介して削除されたものを削除する場所です] ...これは、このトランザクション中に実際に発生することを私が知る限り、唯一のことでもあります)
(ユーザーが作成した列のプロパティを変更したり、列のインデックスを追加/削除したりする必要があるように定義のいずれかが変更された場合は、ここで行われ、任意の行にデフォルト値が与えられます指定された列の値はまだありません...私が知る限り、ストアドプロシージャが終了したときに、これは実際には発生しないことに注意してください。)
(トランザクションを閉じる...?)
上記のすべての作業の後、列の削除のみが発生します。トランザクション内の前後のすべてが無視されているように見え、トランザクション中に問題が発生したことを示すメッセージがSQLトレースにありませんでした。