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

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

2
「包含」データベースを復元する方法は?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のStack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 最近、ネットワークインスタンスからバックアップをローカル開発SQL Serverに復元しようとしました。驚いたことに、次のエラーメッセージが表示されました。 メッセージ12824、レベル16、状態1、行3 sp_configure値 'contained database authentication'は、包含データベースを復元するために1に設定する必要があります。value_in_useを設定するには、RECONFIGUREを使用する必要がある場合があります。メッセージ3013、レベル16、状態1、行3 RESTORE DATABASEが異常終了しています。 データベースを正常に復元するには、どの手順に従う必要がありますか?

3
SQLSERVERAGENT仮想アカウントへのファイルシステムアクセスを許可する
この質問でNT Service\SQLSERVERAGENTマークされた回答に基づいて、Windowsアカウントのファイルシステムアクセスを許可しようとしています。これは仮想サービスアカウントであり、コントロールパネル->ユーザーアカウント領域には表示されないと思います。 このサービスアカウントにファイルシステムへのアクセスを許可するにはどうすればよいですか?具体的には、Windows 7。 私はいくつかのアプローチを読みましたが、私には選択肢がないようです。PowerShellのアプローチを試しましたが、ADコマンドは有効なコマンドではありませんでした。これらのコマンドに必要なWindowsパッチをダウンロードしてインストールしました。また、SQL Server構成マネージャーまたはManagement Studioを介してこれを行うことができるはずであることも読みました。ただし、これらのアクセス許可を調整する場所はわかりません。 SQL Serverエージェントプロセスの開始に失敗し、次のエラーメッセージが表示されます。 Login failed for user 'NT SERVICE\SQLSERVERAGENT'. Reason: Failed to open the explicitly specified database 'msdb'. [CLIENT: <local machine>] 私のグーグルに基づいて、それはこのアカウントの許可に関係しています。 データベースが破損しているかどうかはわかりませんが、データベースが正常な状態にあると表示されます。SQL Serverエージェントのログインは、sysadminとpublicグループの一部です。

3
実行計画で統計が欠落している場合の警告
私には理解できない状況があります。SQL Serverの実行計画では、テーブルの統計が欠落していると表示されますが、統計は既に作成されています。 しかし、テーブルを見ると、自動的に作成された統計があることがわかります。 誰かがそれがどのようになり得るかを理解するのを助けることができますか? Auto_UpdateおよびAuto_Create統計は、現在のDBでオンになっています。 SQL Server 2014を使用しています。


2
既存の非パーティションテーブルをパーティション化する方法
データのある既存のテーブルがあります: dbo.Test (col1,col2,col3....) ON [PRIMARY] このようにパーティション分割されるようにこのテーブルを変更する必要があります。 dbo.Test(col1,col2,col3....) ON Ps_Date(Col2) テーブルをドロップして再作成せずにこれを達成するにはどうすればよいですか?

1
行を削除すると、非クラスター化インデックスがより多くのスペースを使用するのはなぜですか?
75億行と5つのインデックスを持つ大きなテーブルがあります。約1,000万行を削除すると、非クラスター化インデックスが格納されているページ数を増やすように見えることに気付きました。 私はdm_db_partition_statsページの違いを報告するためのクエリを書きました(後-前): インデックス1はクラスター化インデックス、インデックス2は主キーです。その他は非クラスター化され、一意ではありません。 これらの非クラスター化インデックスでページが増えているのはなぜですか? 数値は最悪でも同じままになると予想していました。 削除中にパフォーマンスカウンターがページ分割の増加を報告するのを見ます。 削除するとき、ゴーストレコードは別のページに移動する必要がありますか?これは「一意性」と関係がありますか? 私たちはRCSIの展開を進めていますが、現在、RCSIはオフになっています。 これは、可用性グループのプライマリノードです。私はスナップショットがセカンダリで何らかの形で使用されていることを知っています。それが関連していた場合、私は驚くでしょう。これを掘り下げて(dbccページの出力を調べて)詳細を調べる予定です。誰かが似たようなものを見たことを願っています。

3
サーバーの再起動後にSQL Server分散可用性グループデータベースが同期しない
SQL Serverで大規模なアップグレードを実行する準備ができており、先に進む前に解決しようとしている分散可用性グループの異常な動作に気付いています。 先月、リモートセカンダリサーバーをSQL Server 2016からSQL Server 2017にアップグレードしました。このサーバーは、複数の分散可用性グループ(DAG)と個別の可用性グループ(AG)の一部です。このサーバーをアップグレードしたときに、サーバーが読み取り不能な状態になることを認識していなかったため、この1か月間はプライマリサーバーのみに依存していました。 今後のアップグレードの一環として、CU 4パッチをサーバーに適用し、再起動しました。サーバーがオンラインに戻ったとき、パッチを適用したばかりのセカンダリは、すべてのDAG / AGが問題なく同期していることを示しました。 ただし、プライマリーは非常に異なるストーリーを示していました。報告していた 別のAGが問題なく同期していた しかし、DAGは非同期/非正常状態でした 最初にパニックに陥った後、次のことを試みて、DAGで再び同期を取りました。 プライマリから、データの移動を停止して再開しました。これはデータの同期を開始しませんでした。 セカンダリ(パッチを適用したばかりの)ALTER DATABASE [<database] SET HADR RESUME;で実行しました-エラーなしで実行されますが、同期は再開されませんでした データを再び同期する最後の試みは、セカンダリにログインし、SQL Serverサービスを手動で再起動することでした。サービスを手動で再起動するのは少し極端に思えます。サーバーを再起動すれば十分だったと思うからです。 再起動後にDAGがセカンダリへの同期を開始しないという問題に誰かが遭遇しましたか?もしそうなら、それはどのように解決されましたか? SQL Serverのエラーログとセカンダリサーバーのイベントビューアーの両方を確認しましたが、目に見える異常はありませんでした。

4
インデックススペースをデータスペースより大きくするのは悪いですか?
多くの場合、適切なインデックスを持たない大きなテーブルに対してクエリを実行する必要があります。そこで、DBAにそのようなインデックスを作成するように依頼します。彼が最初に行うことは、テーブル統計とインデックススペースのサイズを確認することです。 「インデックスはすでにテーブルよりも大きい」ため、多くの場合、代替ソリューションを見つけるように言われます。彼は、インデックスをデータよりも小さくする必要があると感じています。「本でインデックスを見たことがありますか?本自体よりもはるかに小さいので、テーブルインデックスがどうあるべきか」と私に言ったからです。 彼の哲学は正しいとは思わないが、彼は主任DBAであり、私は開発者だから挑戦できない。クエリにインデックスが必要な場合は、読み取り不可能で維持できないSPを作成する「回避策」を見つけるのではなく、インデックスを作成する必要があります。 必要な列のみを選択しています。問題は、日付でフィルタリングしているため、エンジンが列を一致させるために必ずテーブルスキャンを実行することです。クエリは、統計を収集するために1日に1回、夜に実行されますが、実行には15分かかります(別の厳格なルールがあります。手順は3分以上かかりません)。 DBAはインデックスの統計を教えてくれました。そのテーブルには約10個のインデックスがあり、そのうち6個しか使用されていませんでした(統計では4個のヒットがゼロでした)。これは20人以上の開発者が参加する大規模なシステムです。インデックスは何らかの理由で作成されたため、おそらく使用されなくなりました。 SQL Server 2008をサポートする必要があります。これは、テストDBが実行されているためです。ただし、クライアントはすべて2014年と2016年です。
22 sql-server  index 

2
トリガーは毎回コンパイルされますか?
CPU使用率が高いサーバーのトラブルシューティングを行っています。クエリが実際に原因ではないことがわかった後、コンパイルを検討し始めました。 パフォーマンスモニターは、50コンパイル/秒未満および15再コンパイル/秒未満を示しています。 XEセッションを実行してコンパイルを探した後、毎秒数千のコンパイルが発生しています。 このシステムは、トリガーを使用して変更を監査しています。ほとんどのコンパイルはトリガーによるものです。トリガーはsys.dm_tran_active_transactionsを参照します。 最初に考えたのは、トリガーでDMVを参照すると毎回コンパイルされるか、この特定のDMVだけでトリガーされる可能性があるということでした。それで、私はその理論をテストし始めました。毎回コンパイルしますが、DMVを参照せず、代わりに値をハードコードするときにトリガーがトリガーされるたびにコンパイルされるかどうかはチェックしていませんでした。トリガーされるたびにコンパイルされていました。トリガーをドロップすると、コンパイルが停止します。 XEセッションでsqlserver.query_pre_execution_showplanを使用してコンパイルを追跡しています。なぜそれとPerfMonカウンターの間に矛盾があるのですか? トリガーが実行されるたびにコンパイルイベントを取得するのは正常ですか? 再現スクリプト: CREATE TABLE t1 (transaction_id int, Column2 varchar(100)); CREATE TABLE t2 (Column1 varchar(max), Column2 varchar(100)); GO CREATE TRIGGER t2_ins ON t2 AFTER INSERT AS INSERT INTO t1 SELECT (SELECT TOP 1 transaction_id FROM sys.dm_tran_active_transactions), Column2 FROM inserted; GO --Both of these show compilation …

2
MAXテキストまたはより具体的で小さいタイプの使用
彼らが見たとき、誰かが私が使用して見て、提案されたテーブルを作成するための私のDDLコードをレビューしてたVARCHAR(256)私がすべきことを、私は最初の名前または何のような、かなり小さいことが予想されるテキストのフィールドを常にだけ使用VARCHAR(MAX)し、リンクを使用する理由は何もなく、varchar型(最大)。私はそれを読みましたが、2005年に焦点を当てていたため、日付があり、すべてのテキストフィールドで1行あたり最大2GBを割り当てる可能性を実際に正当化するようには思われませんでした。 パフォーマンス、ストレージなどの観点から、VARCHAR(MAX)最新バージョンのSQL Serverで使用するか、より小さな特定のタイプを使用するかを決定するにはどうすればよいですか?(例:2008、2012、2014)

1
インデックスを再構築するときにsort_in_tempdbを使用する場合
DWテーブルにSORT_IN_TEMPDBオプションを使用するかどうかを議論しています。私の理解では、このオプションを使用した場合、書き込みはより多くなりますが、それらはよりシーケンシャルです。SANがあります(これは時々悪名高くなっています)。この場合、書き込みの数を可能な限り制限したいと思います。tempdbは別のLUN(ディスクのセット)上にあると思います。 データファイルとtempdbファイルに十分なディスク領域があります。この場合、SORT_IN_TEMPDBを使用するメリットはありますか? 私を驚かせたのは、この回答に対するこのコメントです インデックスを再構築する場合、ソートにインデックスの2倍のスペース+ 20%が必要になります。したがって、一般に、データベース内のすべてのインデックスを再構築するには、データベース内の最大インデックスの120%のみが必要です。SORT_IN_TEMPDBを使用する場合、20%しか勝ちませんが、データファイルにはさらに100%が必要です。さらに、tempdbでsortを使用すると、データファイルに1回インデックスを書き込む代わりに、tempdbに1回書き込み、データファイルに書き込むため、IO負荷が大幅に増加します。だから、それは常に理想的ではありません。 SANの構成が遅い/構成が間違っている可能性があるため、IO負荷を絶対に増やしたくありません。 これをテストする最良の方法は何でしょうか?オプションを使用して、または使用せずにテーブルを再構築し、時間を記録するだけですか? 編集:8つのtempdbファイルがあり、それぞれ15GBです。TF 1117/1118フラグが設定されており、IFIが有効になっています。現在、sort_in_tempdbオプションを使用する場合と使用しない場合の再構築を混合しています。 ありがとう! SQL Server 2012エンタープライズ

1
シークし、パーティションテーブルでスキャンします…
Itzik Ben-Ganの PCMagでこれらの記事を読みました。 シークし、スキャンしますパートI:オプティマイザがシークを最適化しない場合、 スキャンしますパートII:昇順キー 現在、すべてのパーティションテーブルで「グループ化された最大」問題が発生しています。Itzik Ben-Ganが提供するトリックを使用して max(ID)を取得しますが、実行されない場合があります。 DECLARE @MaxIDPartitionTable BIGINT SELECT @MaxIDPartitionTable = ISNULL(MAX(IDPartitionedTable), 0) FROM ( SELECT * FROM ( SELECT partition_number PartitionNumber FROM sys.partitions WHERE object_id = OBJECT_ID('fct.MyTable') AND index_id = 1 ) T1 CROSS APPLY ( SELECT ISNULL(MAX(UpdatedID), 0) AS IDPartitionedTable FROM fct.MyTable s WHERE $PARTITION.PF_MyTable(s.PCTimeStamp) …

4
SSMSで改行を削除する方法は?
私は次のように見えるSQLを扱っています create procedure as begin asとの間の大きなギャップに注意してくださいbegin。 これらを削除するにはどうすればよいですか?SQLフォーマッターを使用しましたが、これは機能しません。
22 sql-server  ssms 

1
SQL Server Unicode / NVARCHAR文字列を絵文字または補助文字に設定するにはどうすればよいですか?
Unicodeコードポイントに基づいて特定の文字にUnicode文字列変数を設定します。 65535を超えるコードポイントを使用したいのですが、SQL Server 2008 R2データベースにはの照合順序がありSQL_Latin1_General_CP1_CI_ASます。 MicrosoftのNCHARドキュメントによると、NCHAR関数は次のように整数を取ります。 integer_expression データベースの照合に補助文字(SC)フラグが含まれていない場合、これは0〜65535(0〜0xFFFF)の正の整数です。この範囲外の値を指定すると、NULLが返されます。補助文字の詳細については、照合とUnicodeサポートを参照してください。 データベースの照合が補助文字(SC)フラグをサポートしている場合、これは0〜1114111(0〜0x10FFFF)の正の整数です。この範囲外の値を指定すると、NULLが返されます。 したがって、このコード: SELECT NCHAR(128512); NULLこのデータベースに戻ります。 これと同じものを返したい: SELECT N'😀'; 照合に「補助文字(SC)フラグが含まれていない」データベースで、コードを使用して(実際の絵文字を使用せずに)Unicode文字列変数(nvarcharなど)を絵文字に設定するにはどうすればよいですか? 絵文字Unicodeコードポイントの全リスト (最終的には、すべてのキャラクターが機能するようにします。参照しやすいように絵文字を選択しました。) (サーバーはSQL Server 2008 R2ですが、それ以降のバージョンのソリューションについても興味があります。) 方法がないと仮定して、適切な照合を備えた別のデータベースのインラインユーザー定義関数を参照できますか? 「補足文字」フラグを持つ照合を見つけるにはどうすればよいですか? これにより、サーバー上のレコードは返されません。 SELECT * FROM sys.fn_helpcollations() WHERE name LIKE 'SQL%[_]SC'; 動作するSQL Server 2012が導入されLatin1_General_100_CI_AS_SCたようです。古いインスタンスに照合をインストールできますか? 照合参照: SQL Serverのchar、nchar、varchar、nvarcharの違いは何ですか? マイクロソフトの補助文字照合情報 MicrosoftのSQL Server 2008 R2照合リスト 照合に関係なく、SQL Serverが拡張文字を理解して処理できる理由についての説明はありNCHARますか?


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