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

SQL Server 2012(メジャービルドバージョン11.00.xxxx)。sql-serverにもタグを付けてください。

2
SARGカーディナリティの推定、なぜフルスキャンではないのですか?
フルスキャンがないのはなぜですか(SQL 2008 R2および2012)。 テストデータ: DROP TABLE dbo.TestTable GO CREATE TABLE dbo.TestTable ( TestTableID INT IDENTITY PRIMARY KEY, VeryRandomText VarChar(50), VeryRandomText2 VarChar(50) ) Go Set NoCount ON Declare @i int Set @i = 0 While @i < 10000 Begin Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2) Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 as VarChar(50))); Set @i …

6
2005または2008のインスタンスなしでSQL Server 2000から2012に移行する
SQL Server 2000にある3つの古いデータベースに遭遇しました。これらは2012年に移動する必要があります。標準的なアプローチは、2005または2008インスタンスに復元し、更新、再エクスポートして、最後に2012年に復元することです。 申し訳ありませんが、2005年または2008年のインスタンスはありません。 試してみる価値のある回避策やその他の方法はありますか? ちなみに、データベースには15〜20のテーブルといくつかのビューしか含まれておらず、非常にシンプルに見え、バックアップのサイズは100〜200 MBしかありません。

2
IPアドレスの保存-varchar(45)とvarbinary(16)
2つのフィールド(IDas BIGINTおよびIPAddressas varchar(45)またはor)を持つテーブルを作成しますvarbinary(16)。アイデアは、すべての一意のIPアドレスを保存し、他のテーブルのID実際のIPアドレスの代わりに参照を使用することIP addressです。 一般的に、ID与えられたforを返す、IP addressまたは(アドレスが見つからなかった場合は)アドレスを挿入して生成されたを返すストアドプロシージャを作成しますID。 多くのレコードがあることを期待しています(正確な数はわかりません)が、上記のストアドプロシージャをできるだけ速く実行する必要があります。それで、実際のIPアドレスをテキストまたはバイト形式で保存する方法を知りたいです。どっちがいいの? SQL CLRIPアドレスのバイトを文字列に変換したり、その逆を行ったりするための関数をすでに作成しているため、変換は問題ではありません(IPv4およびの両方で機能しますIPv6)。 検索を最適化するためにインデックスを作成する必要があると思いIP addressますが、クラスター化インデックスにフィールドを含める必要があるのか、または別のインデックスを作成し、どのタイプで検索を高速化するのかわかりませんか?

1
高PAGELATCH_ *およびWRITELOG待機。それらは関連していますか?
非常に高いPAGELATCH_EXおよびPAGELATCH_SH待機タイプと、高いWRITELOG待機が発生しています。PAGELATCH待機の原因となっているクエリを診断しました。IDENTITY値で定義されたビジーなクラスター化された主キーへの挿入率を下げることで、それらを排除できます。この現象は最終ページ挿入ラッチ競合として知られていると理解しています。 ただし、私の質問は、新しいレコードが挿入されたとき、SQL Serverがバッファーページで排他的なPAGELATCH_EXを取得し、レコードをバッファーページに挿入して、トランザクションログにレコードを書き込み、詳細なhttps://として排他的なPAGELATCH_EXを解放することです。 www.microsoft.com/en-ie/download/details.aspx?id=26665ページ24.または、詳細な「高度に同時実行されているINSERTワークロードでのPAGELATCH競合の解決-背景情報SQLCATのガイド:リレーショナルエンジン レコードがラッチメカニズムの外部のログに書き込まれる場合、PAGELATCH待機が高くなる原因として、ディスクへの遅い書き込みを除外できます。しかし、レコードがログに記録されるまで強化されるまでラッチが保持されている場合は、おそらくWRITELOGを考慮する必要があります。 また、複数の非クラスター化インデックスがあると、PAGELATCH_ *ラッチがより長く保持されます。つまり、テーブルにクラスター化されており、複数の非クラスター化インデックスがラッチに追加され、各インデックスバッファーページに同時に解放されますか? 更新1 confio-sql-server-writelog-waitスライド2と一般的なWALアーキテクチャを 読んだ後。両方のホワイトペーパーで説明されている「行が変更されたログエントリを記録する」手順は、SQL Serverがディスクではなくトランザクションログキャッシュに変更を記録することを指していることを理解しました。トランザクションが完了するか、バッファがいっぱいになると、すべてのレコードがすぐにディスクにフラッシュされます。

3
トリガーを使用せずにSQL Serverでクエリを実行するクライアントのIDを見つけますか?
現在Change Data Capture(CDC)を使用してデータの変更を追跡しています。変更を行ったクエリを送信するクライアントのホスト名とIPアドレスを追跡したいと考えています。同じユーザー名でログインしている5つの異なるクライアントがある場合、5つのうちどれがクエリを起動したかを追跡するという難題に直面します。私が見つけた他の疑わしい解決策には、次のコマンドでCDCテーブルを変更することが含まれます。 ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) ただし、これは、クエリが起動されたサーバーのホスト名を返し、クエリを起動したクライアントのホスト名は返しません。 この問題を回避する方法はありますか?クライアントのホスト名またはIPアドレス(または他の種類の一意のID)をログに記録するのに役立つもの。トリガーを使用したくありません。システムが遅くなるだけでなく、CDCがシステムテーブルを生成するため、トリガーを設定することは明らかに不可能です。

2
統計、実行計画、および「昇順の主要な問題」を理解する
統計、実行計画、ストアドプロシージャの実行の間の関係を(概念的に)よりよく理解しようとしています。 統計はストアドプロシージャの実行プランを作成するときにのみ使用され、実際の実行コンテキストでは使用されないというのは正しいことですか?つまり、これが当てはまる場合、プランが作成されたら(そしてプランが適切に再利用されていると仮定して)、「最新の」統計はどのくらい重要ですか? 特に私が読んだ記事(統計、行の見積もり、昇順の日付の列)は、クライアントのデータベースのいくつかで毎日直面しているシナリオと非常によく似たシナリオを説明しています。 特定のストアドプロシージャを使用して定期的にクエリする最大のテーブルの1つに昇順の日付/時刻列があります。 1日に10万行が追加されるときに、実行プランが古くならないようにするにはどうすればよいですか。 この問題に対処するために統計を頻繁に更新する場合、このストアドプロシージャのクエリでOPTION(RECOMPILE)ヒントを使用することは理にかなっていますか? アドバイスや推奨事項をいただければ幸いです。 更新:SQL Server 2012(SP1)を使用しています。

3
誰がレコードを削除したかに関する情報を削除トリガーに渡す
監査証跡を設定する際に、テーブルのレコードを更新または挿入している人を追跡することには問題はありませんが、レコードを削除した人を追跡することはより問題が多いようです。 挿入/更新フィールドに「UpdatedBy」を含めることで、挿入/更新を追跡できます。これにより、INSERT / UPDATEトリガーはを介して "UpdatedBy"フィールドにアクセスできますinserted.UpdatedBy。ただし、削除トリガーを使用すると、データは挿入/更新されません。誰がレコードを削除したかを知ることができるように、情報を削除トリガーに渡す方法はありますか? これは挿入/更新トリガーです ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate] ON [dbo].[MyTable] FOR INSERT, UPDATE AS INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges) VALUES (inserted.ID, inserted.LastUpdatedBy) FROM inserted SQL Server 2012の使用

5
SQL Server 2012がマシンアカウントでログインできない
IIS / SQL Serverサイトを2008年から2012年に移行していますが、認証に問題があります。Windows認証を使用してとして認証しますDOMAIN\COMPUTER$が、これは機能せず、次のエラーが表示されます。 ユーザー「DOMAIN \ COMPUTER $」のログインに失敗しました。理由:指定された名前に一致するログインが見つかりませんでした。[クライアント:<ローカルマシン>] アカウントが存在することを確認し、削除して再作成した create login "DOMAIN\COMPUTER$" from windows もう一度実行すると、応答が返されます。 メッセージ15025、レベル16、状態2、行1 サーバープリンシパル 'DOMAIN \ COMPUTER $'は既に存在します。 (DOMAIN\COMPUTER実際のドメインとコンピュータ名の代わりに使用されます) したがって、サイトはSQL Serverにクエリを実行しているようですが、SQL Serverはログインを非常に厳しく調べていません。 私は何を逃したのですか?

1
シーケンスが再利用されています
システム内のオブジェクトの追跡番号を生成するシーケンスがあります。かなり前から問題なく動作していました。 先週、値を再利用し始めていることに気づきました。 起こっているように見えるのは、夕方の異なる時点で、前日の値にロールバックすることです。その後、そのポイントから値を生成し続けます。 たとえば、次のようなものを取得できます。 10112 10113 10114 10115 10116 10117 10118 10113 10114 10115 10116 ... いつ、最初の使用から2回目の使用までの期間(わずか10分または数時間)、または何回ロールバックされるか(わずか1回から数百回)には、パターンはないようです。 トレースを実行することを検討しました(まだ実行する可能性があります)が、シーケンスオブジェクトが直接変更されているとは思わない。私がこれを信じる理由は、変更日が数日前であり、重複を試みて排除するために手動で値を上げた時を指しているからです。(それ以降、この問題は数回発生しています。) 誰もがシーケンスのロールバックを引き起こし、毎晩値を再利用する可能性があるという考えを持っていますか? 更新:コメントでいくつかの質問に答えるには: @@Version: Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)2012年10月19日13:38:57 スクリプトを作成: CREATE SEQUENCE [schemaName].[SequenceName] AS [bigint] START WITH 410014104 INCREMENT BY 1 MINVALUE 410000000 MAXVALUE 419999999 CYCLE CACHE GO 固有の制約はありません(ただし、制約を設定する予定です)。しかし、それは私がいつ値を再利用したかを知るのに役立つだけです。値がリセットされた原因ではありません。私は5分ごとに新しい値を取得し、それを節約するジョブを実行しました。時間と値のジャンプはパターンに従いません。 イベントログをチェックして、エラーがないか確認しました。起こっていると思うのはこれだけです:http : //support.microsoft.com/kb/2793634 本日修正を適用しています。これらは関連しているとは思いませんが、関連している可能性があります。

1
差分バックアップを復元すると、DEFUNCTログファイルが作成されますか?
これが私の問題です。完全な復元を介してデータベースを新しいサーバーに移動してから、差分バックアップ/復元をすばやく実行しようとしています。問題なく完全に復元できますが、差分バックアップを復元すると、次の警告が表示されます。 メッセージ3127、レベル16、状態1、行1復元されたデータベース 'DatabaseName'のファイル 'Database_Log2'は、データベースが単純復旧モデルを使用しており、ファイルが読み取り/書き込みアクセス用にマークされているため、無効な状態のままです。したがって、断片的な復元で回復できるのは読み取り専用ファイルのみです。 データベースは復元され、オンラインと見なされますが、このDEFUNCTファイルが原因でバックアップ操作が失敗し、次のエラーが発生します。 メッセージ3636、レベル16、状態2、行1データベースID 10ファイルID 6の「BackupMetadata」メタデータの処理中にエラーが発生しました。メッセージ3046、レベル16、状態2、行1一貫性のないメタデータが検出されました。可能なバックアップ操作は、WITH CONTINUE_AFTER_ERRORまたはNO_TRUNCATEオプションを使用したログ末尾のバックアップのみです。メッセージ3013、レベル16、状態1、行1 BACKUP DATABASEが異常終了しています。 フルと差分でRESTORE FILELISTONLYを実行すると、同じ出力が得られます。これは、ソースデータベースのsys.database_filesから見たものと一致します。サーバーはSQL2012 SP1のDeveloperエディションです。 フルバックアップを実行してすぐに差分を作成し、これらのファイルを同じサーバー上の別のデータベースに復元すると、まったく同じ問題が発生するため、差分の作成方法に原因があります。完全バックアップを復元して復元すると問題はありません。このファイルが以前このデータベースに存在していたかどうかはわかりませんが、このファイルが以前から存在し、かなり前に削除された可能性は十分にあります。復元されたデータベースでsys.database_filesを照会すると、DEFUNCTファイルにはdrop_lsnの値があり、これはこれを確認しているようです。現在、ソースデータベースには、ファイルグループ(PRIMARY)が1つ、データファイルが4つ、ログファイルが1つしかありません。 何か案は?

3
db_ownerがデータベースを削除できません-エラー615、SQL Server
Amazon EC2でSQL Server 2012データベースを実行しています。データベースを作成、編集、削除できるユーザーを作成しました。新しいユーザーにdbcreatorサーバーの役割を与えました。 ユーザーはリモートで接続してcreate database foo;コマンドを正常に実行できます。しかし、ユーザーdrop database foo;がコマンドを使用してデータベースを再度削除しようとすると、次のエラーで失敗します。 Warning: Fatal error 615 occurred at Feb 1 2014 5:15PM. Note the error and time, and contact your system administrator. ErrorCode: 21 選択されたデータベースは使用中ですmaster(そのため、使用中だからとは思いません)。また、管理ユーザーとしてログインして再度実行すると、コマンドは成功します。 新しく作成したデータベースを確認しましたが、ユーザーdb_ownerにはデータベース内のロールが期待どおりに割り当てられているので、作成したデータベースを削除するには、これで十分です。 http://technet.microsoft.com/en-us/library/ms178613.aspxによると、db_ownerロールは十分な権限である必要があります。「データベースのCONTROL権限、ALTER ANY DATABASE権限、またはdb_owner固定データベースロールのメンバーシップが必要です。」 エラー615を検索し、「データベーステーブルID%d、名前 '%。* ls'が見つかりませんでした。」を見つけました。私には意味がありません。http://technet.microsoft.com/en-us/library/aa937592(v=sql.80).aspx SQLサーバーのバージョン情報:Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) /n May 22 …

3
STIntersectsのパフォーマンスの向上
テーブルにT_PINは300,000のピンとT_POLYGON36,000のポリゴンがあります。T_PINこのインデックスがあります: CREATE SPATIAL INDEX [T_PIN_COORD] ON [dbo].[T_PIN] ( [Coord] )USING GEOGRAPHY_GRID WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH), CELLS_PER_OBJECT = 128, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]; T_POLYGON 持っています: …

5
未使用領域のSQL Serverテーブルの解放
SQL Server 2012 Expressに未使用のスペースが多いテーブルがあります。 データベースのスペースを解放する必要があります。 | NAME | ROWS | 予約済み| データ| INDEX_SIZE | 未使用| | ------------- | -------- | -------------- | ----------- --- | ------------ | -------------- | | MyTableName | 158890 | 8928296 KB | 5760944 KB | 2248 KB | 3165104 KB | SQLで3165104KBをリリースするにはどうすればよいですか? 私はすでに試しました: Alter table …

1
LOG_BACKUP log_reuse_wait_descを使用したSQL Server 2012シンプルリカバリモデル
私は私自身の調査をやっている間に、データベース、なぜ、誰もが知っているんSIMPLE復旧モデルを持っているLOG_BACKUPためにlog_reuse_wait_desc? SQL Server 2012 SP1。数週間前に作成されたデータベース。レプリケーションもミラーリングもログ配布もありません。 私たちは、データベースのバックアップを行なったし、それは示して、別のインスタンスに復元SIMPLEし、NOTHING中にlog_reuse_wait他のインスタンスに。しかし、別のインスタンスへの復元は、復元操作がトランザクションをロールフォワード/ロールバックするときに問題を再現する良い方法だとは思いません。

3
tempdbログファイルのベストプラクティス
tempdbデータファイルの構成方法に関するブログを何度も読みましたが、tempdbログファイルに関する情報は見つかりませんでした。 tempdbで現在使用している戦略は次のとおりです。 tempdbデータファイルを分割する方法について、Paul Randalの推奨事項を使用しました tempdbデータファイルのサイズを最大に設定し、自動拡張を無効にしました。たとえば、100 GBの空きディスク領域があり、8つのtempdbデータファイルのサイズをそれぞれ10 GBに設定します。これにより、Brent Ozarが推奨するディスクの断片化が防止され、ログファイル用に20 GBが解放されます。 しかし、私が言ったように、誰もtempdbログファイルについて話していません。どうすればいいですか?私のセットアップでは、このファイルはtempdbデータファイルと同じ場所にあります。tempdbログファイルで使用するサイズと自動拡張値は何ですか?

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