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

SQL Server 2008(メジャービルドバージョン10.00.xxxx)。また、sql-serverでタグ付けしてください。


1
SQL Server 2008でデータベースを強制的に削除する方法
データベースを強制的に削除しようとしていますが、データベースを削除した後、データベースを再作成しようとするとエラーが発生します ファイルC:\ Program Files ..... [databasename] .mdfは既に存在するため作成できません データベースを強制的に削除するためのクエリを次に示します Use master; ALTER database [databasename] set offline with ROLLBACK IMMEDIATE; DROP database [databasename]; 上記のクエリはデータベースを削除し.ldfてい.mdfますが、and ファイルを削除するわけではないことを理解しました。データベースを徹底的に削除する方法は? 通常のクエリ Drop database [databasename] ; //deletes the database completely, including the ldf and mdf's. データベースを強制的に削除する方法は、データベース.mdfと.ldfファイルも削除しますか?


7
簡単な銀行スキーマの作成:残高を取引履歴と同期させるにはどうすればよいですか?
単純な銀行データベースのスキーマを書いています。基本的な仕様は次のとおりです。 データベースは、ユーザーと通貨に対するトランザクションを保存します。 すべてのユーザーは通貨ごとに1つの残高を持っているため、各残高は特定のユーザーと通貨に対するすべてのトランザクションの合計です。 残高をマイナスにすることはできません。 銀行のアプリケーションは、ストアドプロシージャを介してデータベースとのみ通信します。 このデータベースは、1日に数十万件の新しいトランザクションを受け入れ、さらに高いレベルでクエリのバランスを取ることを期待しています。残高を非常に迅速に提供するには、事前に集計する必要があります。同時に、残高が取引履歴と矛盾しないことを保証する必要があります。 私のオプションは次のとおりです。 別のbalancesテーブルを用意して、次のいずれかを実行します。 トランザクションをテーブルtransactionsとbalancesテーブルの両方に適用します。TRANSACTIONストアドプロシージャレイヤーのロジックを使用して、残高とトランザクションが常に同期されるようにします。(Jackによるサポート。) transactionsテーブルにトランザクションを適用balancesし、トランザクション量でテーブルを更新するトリガーを使用します。 balancesテーブルにトランザクションを適用transactionsし、トランザクション量とともにテーブルに新しいエントリを追加するトリガーを使用します。 ストアドプロシージャの外部で変更が行われないようにするには、セキュリティベースのアプローチに頼る必要があります。そうしないと、たとえば、一部のプロセスがtransactionsテーブルにトランザクションを直接挿入し、スキーム1.3の下で関連するバランスが同期しなくなる可能性があります。 balancesトランザクションを適切に集約するインデックス付きビューを用意します。残高はトランザクションと同期するようにストレージエンジンによって保証されているため、これを保証するためにセキュリティベースのアプローチに依存する必要はありません。一方、ビュー(インデックス付きビューでも)にCHECK制約を設定することはできないため、バランスを負以外に強制することはできません。(Dennyによるサポート。) transactionsテーブルだけがありますが、そのトランザクションの実行直後に有効な残高を保存するための追加の列があります。したがって、ユーザーと通貨の最新のトランザクションレコードには、現在の残高も含まれます。(Andrewが以下に提案。garikが提案したバリアント。) この問題に最初に取り組んだとき、私はこれら 2つの議論を読み、オプションを決定しました2。参考のために、ここでそれのベアボーン実装を見ることができます。 このようなデータベースを高負荷プロファイルで設計または管理しましたか?この問題の解決策は何ですか? 私が正しいデザインを選んだと思いますか?留意すべきことはありますか? たとえば、transactionsテーブルのスキーマを変更するには、balancesビューを再構築する必要があることを知っています。データベースを小さく保つためにトランザクションをアーカイブしている場合でも(たとえば、他の場所に移動してサマリートランザクションに置き換えることで)、スキーマの更新ごとに数千万のトランザクションからビューを再構築する必要がある場合、展開ごとのダウンタイムが大幅に長くなる可能性があります。 インデックス付きビューを使用する方法がある場合、マイナスの残高がないことをどのように保証できますか? トランザクションのアーカイブ: アーカイブトランザクションと上記の「サマリートランザクション」について少し詳しく説明します。まず、このような高負荷システムでは定期的なアーカイブが必要になります。古い取引を別の場所に移動できるようにしながら、残高と取引履歴の間の一貫性を維持したいと思います。これを行うには、アーカイブされたトランザクションのすべてのバッチを、ユーザーと通貨ごとの金額のサマリーに置き換えます。 したがって、たとえば、このトランザクションのリスト: user_id currency_id amount is_summary ------------------------------------------------ 3 1 10.60 0 3 1 -55.00 0 3 1 -12.12 0 アーカイブされ、これに置き換えられます: user_id currency_id amount is_summary ------------------------------------------------ 3 1 -56.52 1 …

6
デッドロックの主な原因は何ですか?それを防ぐことができますか?
最近、ASP.NETアプリケーションの1つがデータベースデッドロックエラーを表示し、エラーをチェックして修正するように要求されました。デッドロックの原因は、カーソル内のテーブルを厳密に更新しているストアドプロシージャであることがわかりました。 このエラーを見たのはこれが初めてで、効果的に追跡して修正する方法がわかりませんでした。私が知っているすべての可能な方法を試してみましたが、最終的に、更新されているテーブルには主キーがないことがわかりました!幸いなことに、これはID列でした。 後で、展開用のデータベースを台無しにした開発者を見つけました。主キーを追加し、問題は解決しました。 私は幸せを感じて、私のプロジェクトに戻って、そのデッドロックの理由を見つけるためにいくつかの研究をしました... どうやら、デッドロックを引き起こしたのは循環待機状態だったようです。更新は、主キーの場合よりも主キーなしの方が明らかに時間がかかります。 明確に定義された結論ではないことを知っているので、ここに投稿しています... 主キーの欠落が問題ですか? (相互排除、保留と待機、プリエンプションなし、循環待機)以外のデッドロックを引き起こす他の条件はありますか? デッドロックを防止および追跡するにはどうすればよいですか?

11
配列パラメーターをストアドプロシージャに渡す
大量のレコード(1000枚)を取得してそれらを処理するプロセスがあり、完了したら、大量のレコードを処理済みとしてマークする必要があります。IDの大きなリストでこれを示すことができます。「ループ内の更新」パターンを回避しようとしているので、このIDのバッグをMS SQL Server 2008ストアドプロシージャに送信するより効率的な方法を見つけたいと思います。 提案#1-テーブル値パラメーター。IDフィールドだけでテーブルタイプを定義し、更新するIDでいっぱいのテーブルを送信できます。 提案#2-proc本体のOPENXML()を使用したXMLパラメーター(varchar)。 提案#3-リストの解析。扱いにくく、エラーが発生しやすいと思われるため、可能であれば、これを避けたいと思います。 これらの中に好みがありますか、それとも私が見逃したアイデアはありますか?

4
2008 R2よりもSQL Server 2012を好む客観的なビジネス上の理由は何ですか?
私の会社は、新しいデータベースサーバー用にSQL Server 2012 DenaliとSQL Server 2008 R2のどちらを購入するかの決定に直面しています。客観的な理由を探して、どちらかを選択します。 私たちの要件: Standardエディション(経済的理由およびエンタープライズ機能の必要性の欠如のため) OLTPワークロード(つまり、新しいウィンドウ関数と列ストアインデックスは不要です) 10〜100 GBのデータベースサイズ ビジネスインテリジェンス機能は必要ありません。リレーショナルエンジンのみが必要です 同期データベースミラーリング 現在、次の理由がわかっています。 SQL Server 2012デナリ 利用可能な最新バージョン SQL Server 2008 R2 実績のある技術 どちらか一方を好むという技術的な理由はあまりないようです。基本的に、成功している実績のあるテクノロジーと、利用可能な最新かつ最高のバージョンを選択することになります。 決定を下す客観的な理由は何ですか?


8
すべてのデータベースのすべてのファイルをすばやく圧縮するにはどうすればよいですか?
SQL Server(この場合は2008)では、インスタンス上のすべてのデータベースのすべてのファイル(ログとデータの両方)をどのようにすばやく縮小できますか?SSMSを実行し、それぞれを右クリックして[タスク]-> [縮小]を選択できますが、もっと速いものを探しています。 私はいくつかの「データベースの作成」スクリプトのスクリプトを作成しましたが、デフォルトのバルーンサイズがあったことを忘れており、このプロジェクトでこれらのファイル用に予約されたスペースをそれほど必要としません。

2
データベースの「所有者」の目的は何ですか?
今日、サービスブローカーの問題のトラブルシューティングを行っているときに、データベースの所有者が退職した従業員のWindowsログインであることを発見しました。彼のログインは削除されたため、クエリ通知は失敗していました。 おそらくこれに対処するためのベストプラクティスは、「sa」をデータベース所有者にすることです。変更して、キューをクリアしました。 私の(非常に初歩的な)質問:データベースの所有者は何で、その目的は何ですか?

5
IPアドレス経由でサーバーのSQLデータベースに接続できません
Windows Server 2008を実行するサーバーをセットアップし、SQL Server 2008 Expressをインストールしています。 を介してマシンのSQL Server Expressデータベースに接続できますMACHINENAME/SQLEXPRESS。 ただし、IPアドレスを使用してソフトウェアまたはスクリプトを介して接続する場合、接続は許可されません。 私が試してみました: ファイアウォールをオフにします。 SQLデータベースのリモート接続を許可します。 SQL構成内でTCP / IPを有効にします。 ソフトウェア「SQL Server Management Studio」を介して接続しようとすると、次のメッセージが表示されます。 エラーメッセージ: サーバーへの接続を確立中にエラーが発生しました。SQL Server 2005に接続する場合、この失敗は、デフォルト設定ではSQL Serverがリモート接続を許可しないという事実が原因である可能性があります。(プロバイダー:TCPプロバイダー、エラー:0-ターゲットマシンがアクティブに拒否したため、接続できませんでした。)(Microsoft SQL Server、エラー:10061) サーバーとの接続は正常に確立されましたが、ログインプロセス中にエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-確立された接続は、ホストコンピューターのソフトウェアによって中止されました。)(Microsoft SQL Server、エラー:10053) いつ無料かを教えてください。どこでわかるのかを見てみましょう。UKFastから送られた情報に従って詳細を修正しましたが、「サポートの範囲内ではありません」と言っています。 、彼らはそれ以上助けることはできません。 あなたからの便りを楽しみにしています。


3
すべてを再構築してインデックスを再作成した後、データベースがまだ断片化されているのはなぜですか?
このT-SQLを実行して、すべてのテーブルを一度に最適化しようとしたデータベースがあります。 SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables 次に、出力を新しいクエリウィンドウにコピーアンドペーストして実行します。エラーは発生しませんでしたが、まだ断片化しています。私も両方のコマンドを別々に実行しようとしましたが、まだ断片化しています。注:REORGANIZEアーロンはこれが不要であることを認識しており、動的SQLを使用してこれを自動化できることを認識しています。 私はこれを実行して、まだ断片化があることを確認しました: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE avg_fragmentation_in_percent > 0 そして私は得た: database_id object_id index_id partition_number index_type_desc alloc_unit_type_desc …

3
パラメータースニッフィングvs変数vs再コンパイルvs未知の最適化
そのため、今朝(30秒+実行時間)に問題を引き起こす長時間実行中のprocがありました。パラメータスニッフィングが原因かどうかを確認することにしました。そのため、パラメータスニッフィングを無効にするために、procを書き直し、受信パラメータを変数に設定しました。試された/真のアプローチ。バム、クエリ時間が改善されました(1秒未満)。クエリプランを見ると、元のインデックスでは使用されていなかった改善が見つかりました。 誤検知が発生しなかったことを確認するために、元のprocでdbcc freeproccacheを実行し、改善された結果が同じかどうかを確認するために再実行しました。しかし、驚いたことに、元のprocはまだ低速で実行されていました。まだ遅いWITH RECOMPILEを使用して再試行しました(プロシージャの呼び出しと、プロシージャ自体の内部で再コンパイルを試行しました)。サーバーも再起動しました(明らかに開発ボックス)。 だから、私の質問はこれです...空のプランキャッシュで同じスロークエリを取得したときにパラメータスニッフィングがどのように責任を負うことができるか...スニフするパラメータはありませんか? 代わりに、プランキャッシュに関係のないテーブル統計の影響を受けますか。もしそうなら、なぜ受信パラメータを変数に設定すると役立つのでしょうか?? さらなるテストでは、proc DIDの内部にOPTION(OPTIMIZE FOR UNKNOWN)を挿入すると、予想される改善された計画が得られることもわかりました。 それで、私より賢い皆さんの中には、この種の結果を生み出すために舞台裏で何が起こっているのかについての手がかりを与えることができますか? 別の注意事項として、遅いプランもGoodEnoughPlanFound理由により早期に中止されますが、速いプランには実際の計画には早期中止の理由がありません。 要約すれば 受信パラメータから変数を作成する(1秒) 再コンパイル(30秒以上) dbcc freeproccache(30秒以上) オプション(イギリス向けに最適化)(1秒) 更新: こちらのスロー実行プランをご覧ください:https : //www.dropbox.com/s/cmx2lrsea8q8mr6/plan_slow.xml こちらの高速実行プランをご覧ください:https : //www.dropbox.com/s/b28x6a01w7dxsed/plan_fast.xml 注:テーブル、スキーマ、オブジェクト名はセキュリティ上の理由で変更されました。

4
SQL Server 2008でActive Directoryグループ全体のセキュリティアクセスを割り当てるにはどうすればよいですか?
ドメイン上のすべての内部アプリケーションで統合セキュリティを使用したいと思います。残念ながら、私はこれをうまく機能させることができませんでした。特定のテーブルへの読み取り/書き込みアクセスのために、Exchange(Active Directory)グループ全体にSQL Serverのロールを割り当てたいと思います。そうすれば、誰かが雇われるたびにオペレーターを作成したり、誰かが解雇されたときにオペレーターを削除したりする必要がなくなります。これは可能ですか?これを行うにはどのような手順を実行しますか?

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