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

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

3
データベースをオフラインにせずにログファイルを移動する
データベースをオフラインにせずに、データベースログファイルを新しいパーティションに移動する必要があります。 これを行う通常の方法は、DBをデタッチし、ログファイルを移動してから、dbを再アタッチすることです。 データベース自体をオフラインにせずにこれを行うことは可能ですか?

1
SQL Server多対1レプリケーション
8つの個別のSQL Server 2008 R2マシンがあり、それぞれが1つのデータベースをホストしています。各データベースには、同一のテーブル構造とスキーマ、および完全に一意のデータがあります。 レポートサーバー(2008または2012)を確立して、8つのソースサーバーの選択したテーブルの行をレポートサーバー上のそれらのテーブルの単一インスタンスに統合します。これは一方向のレプリケーションです(レポートサーバーは変更されません)。比較的低いレイテンシ(20〜30秒など)でソースデータベースから変更を複製する必要があります。 さらに、ソースサーバーへの影響をできるだけ少なくしてこれを実現する方法を見つけたいと思います。これらのサーバーに対するサードパーティのエージェント、トリガー、またはスキーマの変更は、私の環境では困難です。 私の質問: この目標を達成するための有望なアーキテクチャとテクノロジーは何ですか? SQL Serverマージレプリケーションを見てきましたが、遅延が心配です。これはこの目標に適した技術ですか? トランザクションレプリケーション用の多対1のアーキテクチャはありますか? レポートサーバー上の8つのデータベースへの1対1のレプリケーションと、それに続くカスタムマージ機能(2ステップレプリケーション)を検討する必要がありますか? ありがとう、ジョン

5
SQL Serverに、記述されたクエリ条件を強制的に実行しますか?
私はSQL Server 2008 R2を使用していますが、この疑似クエリ(SP)があります: select ... from ... WHERE @LinkMode IS NULL AND (myColumn IN (...very long-running query...)) ... ... 問題は、クエリを実行するのに非常に長い時間がかかること@LinkMode=2です。 お気づきのように、@ LinkModeがnullの場合にのみ長時間実行クエリを実行する必要がありますが、ここではそうではありません。私の場合、@ LinkMode = 2! ただし、次のように変更すると: select ... from ... WHERE 1=2 AND (myColumn IN (...very long time exeted query...)) ... ... SP は高速で実行されます。 以前に、オプティマイザーが条件の順序を最適化できることを聞いたことがあります。 だから私は尋ねる: オプティマイザが別のルートを選択した場合でも、次のことを確認するよりも高速なのは何=nullですか?私が意味する、私はそのチェックが考えるif a==nullあるずっと速く、他の長いクエリを実行するよりも... どのように私がすることができます強制、私はそれ(同じ順序)書いたとして、クエリを実行するために、SQL …


1
フィルファクターに基づくインデックス内のデータの動作
デフォルトのFILL FACTORが20のデータベースがあるとします。データが挿入されるたびに、最大20%のページのみが作成されますか? 私の理解では、データが挿入されると、ページ内のデータの約20%になります。ただし、データが更新されると、インデックスの20%以上に拡張され、データがいっぱいになってページ分割が生成されます。


5
SQL Serverリンクサーバーのパフォーマンス:リモートクエリがそれほど高価なのはなぜですか?
リンクサーバー経由で接続された2つのデータベースサーバーがあります。どちらもSQL Server 2008R2データベースであり、リンクサーバー接続は、現在のログインのセキュリティコンテキストを使用して、通常の「SQL Server」リンクを介して行われます。リンクされたサーバーは両方とも同じデータセンターにあるため、接続は問題になりません。 次のクエリを使用して、identifierローカルではなくリモートで使用可能な列の値を確認します。 SELECT identifier FROM LinkedServer.RemoteDb.schema.[TableName] EXCEPT SELECT DISTINCT identifier FROM LocalDb.schema.[TableName] 両方のテーブルには、列に非クラスター化インデックスがありますidentifier。ローカルは約260万行、リモートは54行のみです。しかし、クエリプランを見ると、実行時間の70%が「リモートクエリの実行」に費やされています。また、完全なクエリプランを調べる場合、推定ローカル行の数1は2695380(の後に来るクエリのみを選択した場合の推定行の数)の代わりになりますEXCEPT。 このクエリを実行すると、実際に時間がかかります。 不思議に思う:これはなぜですか?推定値は「ちょうど」外れていますか、それともリンクサーバーでのリモートクエリは本当にそれほど高価ですか?

1
一時テーブルではなく、tempdbではなくユーザーデータベースで#で始まるSQL Serverテーブル名
どういうわけか、数十年前に、データベースで始まるテーブルが作成されました#。オブジェクトエクスプローラーでは、アプリのデータベースの下に表示されますが、ではありませんtempdb。何らかの理由で、Azureはこのようなデータベースをインポートしません。 ドロップしたり、名前を変更したり、操作したりすることはできません。オブジェクトエクスプローラーからの削除、スクリプトドロップ、GUIからの名前変更を試みましたが、いずれも機能しませんでした。 SQL 2008 R2を使用しています。 drop table [*app*].[dbo]."#OBSOLETE"; Database name '*app*' ignored, referencing object in tempdb. Msg 3701, Level 11, State 5, Line 1 Cannot drop the table '#OBSOLETE', because it does not exist or you do not have permission. exec sp_rename "dbo.#OBSOLETE", "dbo.obsolete" Msg 15225, Level 11, State 1, …


1
この拡張イベントXMLをできるだけ早く細断するにはどうすればよいですか?
SQL Server 2008 R2で拡張イベントセッションを作成しました。セッションが実行され、予想どおりにイベントが発生すると収集されます。 イベントが比較的少ないときにxmlを細断すると、パフォーマンスは許容範囲内になります。何千ものイベントがあるとき、xmlを細断処理す​​るのに時間がかかります。 私は何か間違ったことをしていることを知っています。XMLエンジンの内部について何を理解するのに十分な知識を持っていません。 これは私の拡張イベントセッションの定義です。 IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

2
これら2つのSQL Serverロールバックはどのように異なりますか?
SQL Server 2008 R2では、これら2つのロールバックの違いは次のとおりです。 ALTER数分間ステートメントを実行し、「実行のキャンセル」を押します。完全にロールバックするには数分かかります。 同じALTERステートメントを実行しますが、これはLDFファイルが正常に完了するのに十分な大きさでないことを確認します。いったんLDF制限が満たされるとNO「自動拡張」が許されない、クエリの実行はすぐに停止します(またはロールバックが起こる)、このエラーメッセージが表示されて: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 次の点で、これら2つの違いは何ですか? 2番目の「ロールバック」が瞬時に行われるのはなぜですか?ロールバックと呼べるかどうかは完全にはわかりません。私の推測では、トランザクションログは実行の進行とともに書き込まれ、タスクを完全に完了するための十分なスペースがないことがわかると、コミットせずに「終了」メッセージで停止します。 最初のロールバックに非常に長い時間がかかるとどうなりますか(ロールバックはシングルスレッドです)。 2.1。SQL Serverは戻って、LDFファイルに作成されたエントリを元に戻しますか? 2.2。LDFファイルサイズは(からのロールバックの終わりに小さくなりますDBCC …

1
sys.partition.rows列はどれくらい正確ですか?
システムビューにsys.partitionsは、特定のパーティション内の行の総数である「行」列があります。パーティション化されていない(または見方によってはパーティションが1つしかない)テーブルの場合、この列はテーブル内の行数を示します。 私はこの列がどれほど正確か、そしての代わりにそれを使用できるかどうかに興味がありSELECT COUNT(1) FROM TableNameます。テーブルを作成して数千行を追加し、数百を削除し、さらに数千を追加するなど、いくつかの実験を行いましたが、カウントは常に無効になっています。ただし、約700ミリ行と複数のインデックスを持つ1つのテーブルがあります。sys.partitionsクラスター化インデックスの行は再び無効になりますが、他のインデックスにはわずかな変動(+ -20k)が見られます。 この行がどのように計算され、表示されるのと同じくらい正確かどうかは誰にもわかりますか?

1
SQLCMDモードでの変数の設定
SQL Server 2008 R2 Enterprise Editionの使用 次の文を考慮してください。 :setvar source_server_name "SERVERNAME\INSTANCENAME" SQLCMDモードでTSQLを使用してその値を取得することは可能ですか 何かのようなもの: :setvar source_server_name = SELECT @@servername ありがとうございました アップデート7/15/2013 以下に示す2つの回答では、望ましい結果が得られなかったため、より関連性の高い試験を追加します。 :setvar source_server_name [myserver] 変数source_server_nameはテキスト文字列[myserver_1]に設定されます これをできるようにしたい: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select …

3
SQL Serverの情報スキーマへのアクセスを拒否する
sys.tables/ へのアクセスを無効にする最良の方法を探していますInformation SchemaSQL Serverのユーザー/グループのます。 見つけた は2008年からこのスレッド 次のようにアクセスを拒否する方法を示します[sys].[something]。 DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole GO DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole GO しかし、アクセスを無効にする方法はありませんInformation Schema: DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole これは機能しないようです。 information_schemaへのアクセスを無効にするにはどうすればよいですか? そして、すべてへのアクセスを無効にする簡単な方法がありますsys/information_schema? 更新: 実際には、次のステートメントの両方を実行することはできません。 DENY SELECT …

4
インデックスの再構築、DBのサイズが10倍に
約15ギガのSQL Serverデータベース(2008 R2 SP1)があります。メンテナンスがしばらくの間実行されていなかったことが判明したため、すべてのインデックスを再構築するメンテナンスプランを作成しましたが、それらは非常に断片化されていました。 ジョブは終了し、断片化はなくなりましたが、データベースは120ギガ以上になりました!すべての再構築を行うために余分なスペースを使用していたことを理解していますが、ジョブが完了すると、そのスペースはすべて空きスペースになると思いますが、空きスペースは3ギグとしてしか表示されないため、117ギグが使用されていますインデックス再構築ジョブが終了しても。 私は非常に混乱しており、いくつかのガイダンスを使用することができます。データベースを適切なサイズに戻す必要がありますが、このためのディスク容量がありません。 前もって感謝します! 投稿された両方のクエリの結果は次のとおりです。 log_reuse_wait_desc NOTHING name TotalSpaceInMB UsedSpaceInMB FreeSpaceInMB LIVE_Data 152 123 28 LIVE_Log 18939 89 18849 LIVE_1_Data 114977 111289 3688 3番目のファイルは.ndfファイルです。これは、未使用スペースに3688だけを表示しますが、約15ギガのデータに111289を使用しています。

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