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

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

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

2
SQL CLRを使用したセキュリティまたはパフォーマンスのリスク[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 SQL ServerでCLRを使用する際に、特定のセキュリティまたはパフォーマンスのリスクはありますか?


3
参照するすべての外部キーへの主キー更新のカスケード
それを参照するすべての外部キー間で更新をカスケードして主キー列の値を更新することは可能ですか? #編集1: followinqクエリを実行すると select * from sys.foreign_keys where referenced_object_id=OBJECT_ID('myTable') 、update_referential_actionが0に設定されていることがわかります。したがって、主キー列を更新した後は何も行われません。外部キーを更新してCASCADE UPDATEでそれらを作成するにはどうすればよいですか? #EDIT 2: スキーマ内のすべての外部キーの作成または削除をスクリプト化するには、次のスクリプトを実行します(ここから取得) DECLARE @schema_name sysname; DECLARE @table_name sysname; DECLARE @constraint_name sysname; DECLARE @constraint_object_id int; DECLARE @referenced_object_name sysname; DECLARE @is_disabled bit; DECLARE @is_not_for_replication bit; DECLARE @is_not_trusted bit; DECLARE @delete_referential_action tinyint; DECLARE @update_referential_action tinyint; DECLARE @tsql nvarchar(4000); DECLARE @tsql2 nvarchar(4000); …

2
PARTITION BYなしのROW_NUMBER()でもセグメントイテレータが生成される
私は、ランク付けおよび集計ウィンドウ関数、特にセグメントおよびシーケンスプロジェクトイテレータに関する私のブログ投稿を書いています。私が理解している方法は、Segmentがグループの終了/開始を構成するストリーム内の行を識別するため、次のクエリです。 SELECT ROW_NUMBER() OVER (PARTITION BY someGroup ORDER BY someOrder) セグメントを使用して、行が前の行以外の別のグループに属していることを通知します。次に、Sequence Projectイテレーターは、Segmentイテレーターの出力に基づいて、実際の行番号を計算します。 ただし、そのロジックを使用する次のクエリには、セグメント式がないため、セグメントを含める必要はありません。 SELECT ROW_NUMBER() OVER (ORDER BY someGroup, someOrder) ただし、この仮説を試すと、これらのクエリは両方ともセグメント演算子を使用します。唯一の違いは、2番目のクエリはGroupByセグメントにa を必要としないことです。そもそもセグメントの必要性を排除していませんか? 例 CREATE TABLE dbo.someTable ( someGroup int NOT NULL, someOrder int NOT NULL, someValue numeric(8, 2) NOT NULL, PRIMARY KEY CLUSTERED (someGroup, someOrder) ); --- Query 1: SELECT …

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
Sch-M WAITはSQL Server 2014でSch-Sをブロックしますが、SQL Server 2008 R2ではブロックしませんか?
最近、実稼働インスタンスをSQL 2008 R2から新しいSQL 2014サーバーに移行しました。Service Brokerの使用法で明らかになった興味深いシナリオを次に示します。でデータベースを考えてみましょうBroker Enabled = trueとMyServiceしてMyQueue。このキューでは、有害メッセージの処理が無効になっています。キューにメッセージがあるアクティブな会話が2つ以上あります。 1つのプロセス(SPID 100)で実行します。 BEGIN TRANSACTION; DECLARE @conversation_group_id UNIQUEIDENTIFIER; RECEIVE TOP (1) @conversation_group_id = conversation_handle FROM MyQueue; トランザクションは開いたままにしていることに注意してください。これは、外部リソースで長時間待機している.NETプログラムであると想像してください。経てsys.dm_tran_locks、私たちは、このSPIDがキューにIXロックが付与されていることがわかります。 | type | resource_id | mode | status | spid | | OBJECT | 277576027 | IX | GRANT | 100 | 別のプロセス(SPID 101)で5回実行します。 BEGIN TRANSACTION; …


1
SQL Server 2014 ExpressとAdvanced Servicesは実際に全文検索をサポートしていますか?
SQL Server 2014 Expressエディションと高度なサービスをインストールしました。全文検索機能を試してみたいと思っていました。ここで、全文検索が2014 Express Editionでサポートされていることを読みました。しかし、フルテキストインデックスをインストールして作成しようとすると、このバージョンのSQLサーバーではフルテキストインデックスがサポートされていないというエラーが表示されます。 全文索引は実際にサポートされていますか?間違ったバージョン(高度なサービスではない)をインストールする可能性はありますか?念のため、アンインストールと再インストールを2回行いましたが、どちらも同じ問題です。Advanced Servicesインストーラーを使用してインストールすることに同意します。 Windows 7、64ビットを使用しています。

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
削除ステートメントのデッドロック
SQL Serverジョブを実行すると、デッドロックが発生します。デッドロックは、単純なDELETEステートメントで発生します。デッドロックを引き起こすためにSELECT / UPDATEクエリを実行する必要があると思いましたか?しかし、それはDELETE / DELETEデッドロックのように見えます... 私が探しているのは、DELETE / DELETEデッドロックが発生する理由です。(私の知る限りでは)異なるパラメーターを渡すことです。 何か案は?ありがとう。 deadlock-list 2014-05-20 07:30:09.66 spid25s deadlock victim=process409048 2014-05-20 07:30:09.66 spid25s process-list 2014-05-20 07:30:09.66 spid25s process id=process409048 taskpriority=0 logused=0 waitresource=PAGE: 12:1:7127294 waittime=4352 ownerId=629860973 transactionname=DELETE lasttranstarted=2014-05-20T07:30:05.307 XDES=0x397219620 lockMode=U schedulerid=5 kpid=3792 status=suspended spid=150 sbid=0 ecid=3 priority=0 trancount=0 lastbatchstarted=2014-05-20T07:30:05.307 lastbatchcompleted=2014-05-20T07:30:05.307 clientapp=QSQL25 hostname=MORRIS hostpid=1528 isolationlevel=read committed …

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つしかありません。 何か案は?

2
別のSQLアカウントとして実行されるSQLジョブステップ
別のSQLログインアカウントとして実行されるSQLジョブステップを設定する方法に興味があります。既存の資格情報を必要とする新しいプロキシアカウントを設定する必要があるようです。資格情報を作成するときの唯一の選択肢は、Windowsログイン資格情報を使用することです。 私が実行しようとしているジョブは以下のとおりです。他にもステートメントがありますが、SQLログインとして実行するようにジョブステップを設定すると失敗します。 insert into [dbo].[TableA] SELECT ss.[Ref_ID] ,mm.[studentID] ,mm.[studentPersonID] ,mm.[studentFirstname] FROM [dbo].[TableB] mm left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID where ss.Ref_ID is not null; これがSQLジョブステップを介して実行されると、失敗します。 Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE …

1
バースト使用のためのIO要件の見積もり
SQLデータベースを1日中定期的に照会するアプリケーションがあります。比較的大量のデータに対する個々のリクエストが散在する、ゼロまたはわずかなアクティビティの期間があります。これらの要求が発生した場合、主な目的はデータを迅速に提供することであり、副次的な目的はそれを費用対効果の高い方法で行うことです。アプリケーションの性質上、データ/インデックスが前のクエリ(異なるユーザー、データの異なる部分で作業)からRAMにキャッシュされることはほとんどありません。 比較的安定した使用を経験するシステムの場合、ディスクキューの長さを観察し、その数を比較的小さく保つという経験則を聞きました。これは特にAWSで実行され、100 IOPSあたり1のディスクキューの長さが妥当であるという経験則を確認しました。 そのようなシステムのIO要件をどのように見積もることができますか?個別のバースト性のあるクエリを処理する場合、ディスクキューの長さは信頼できる指標ですか?考慮すべき他の指標はありますか?

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