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

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

3
WHERE句を更新して、値が別のテーブルにないかどうかを確認する
私が使用するクエリ持っているWHERE句を、と私は起こるまったく同じ使用することWHEREで句多く、このテーブル上のクエリ(ら)。 クエリは次のとおりです。 SELECT DATENAME(DW, [AtDateTime]) AS [Day of Week] ,COUNT(*) AS [Number of Searches] ,CAST(CAST(COUNT(*) AS DECIMAL(10, 2)) / COUNT(DISTINCT CONVERT(DATE, [AtDateTime])) AS DECIMAL(10, 2)) AS [Average Searches per Day] ,SUM(CASE WHEN [NumFound] = 0 THEN 1 ELSE 0 END) AS [Number of Searches with no Results] ,CAST(CAST(SUM(CASE WHEN [NumFound] …

2
透過的なデータ暗号化
SQL Server 2008でTDEを構成する際のベストプラクティスはありますか?SQLMagの記事「透過的データ暗号化に関するFAQ」では、CPUの使用率が最大30%増加した可能性があるとありますか? サーバーの処理能力を追加する以外に、TDEをオンにするときにDBAが通常行うことは他にありますか?

2
ADODB.Connectionを使用した、TLS 1.0を使用しないSQL Server 2014へのクラシックASP接続
PCIコンプライアンスという名目でTLS 1.0が無効になっているため、32ビットのクラシックASPアプリケーションを動作させることができません。 MS / Stack Exchangeの推奨事項に従って、私はインストールしました: SQL Server 2014 SP1 CU1 .NET Framework 4.6 これにより、ASP.NETアプリケーション/ SSMSが実行されます。しかし、ADODB.Connectionオブジェクトを使用するクラシックASPアプリケーションは機能しません。 を使用する接続文字列を試しましたがProvider=SQLNCLI11;、それも役に立たないようです。共有メモリプロバイダーは、パイプの反対側に何もないことに不満を抱いています。エラーメッセージ: Microsoft SQL Server Native Client 11.0エラー「80004005」 共有メモリプロバイダー:パイプの反対側にプロセスはありません。 また、接続文字列で名前付きパイプを使用してみたところ、Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;次のエラーメッセージが表示されました。 Microsoft SQL Server Native Client 11.0エラー「80004005」 名前付きパイププロバイダー:パイプの反対側にプロセスはありません。 注意が必要なADODBのパッチはありますか?名前付きパイプを他の方法などで使用することを検討すべきですか?(ただし、TLS設定に関係なく、共有メモリが機能しない理由については少し困惑しています) コメントからの更新: WebサーバーとSQL Serverは同じボックスにあります。 これはSQLExpress名前付きインスタンスです。TLS 1.0を有効にして動作する接続文字列は次のとおりです。 "Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;" 私も試しました: "Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;" TLS …

1
条件付きの一意の識別子フィールド
私は稼働していないデータベースを持っているので、メインテーブルはCustodyDetailsで、このテーブルにはID int IDENTITY(1,1) PRIMARY KEY列があり、他のテーブルで参照されていない別の一意の識別子を追加する方法を探しています。アカウントの内容は、正確にはIDキーではありません。 ただし、この新しいID列にはいくつかの具体的な詳細があり、ここから問題が始まります。フォーマットは次のとおりです。XX/YYどこXXはリセットが/すべての新しい年に再起動することを自動incrementable値であり、YYは現在の年の最後の2桁ですSELECT RIGHT(YEAR(GETDATE()), 2)。 したがって、たとえば、レコードから開始日追加されたふりをすることができます1 28/12/2015終了2016年3月1日には、カラムは次のようになります。 ID ID2 DATE_ADDED 1 1/15 2015-12-28 2 2/15 2015-12-29 3 3/15 2015-12-30 4 4/15 2015-12-31 5 1/16 2016-01-01 6 2/16 2016-01-02 7 3/16 2016-01-03 フロントエンドを使用してコンポジットID(例ではID2)を解析し、最後の2桁を取得して現在の年の最後の2桁と比較し、新しい相関を開始するかどうかを決定することを考えました。もちろん、データベース側でそれをすべて実行できることは素晴らしいことです。 編集1:ところで、私は人々が並列のIDキーを格納するためだけに別々のテーブルを使用しているのを見たので、1つのテーブルのIDキーは2番目のテーブルのセカンダリキーになります、これは少しおかしな話に聞こえますが、おそらくこれはそのような実装が行われるケースですか? 編集2:この追加の IDは、すべてのファイル/レコードにラベルを付けるレガシードキュメント参照です。私はそれをメインIDの特別なエイリアスと考えることができると思います。 このデータベースが毎年処理するレコードの数は、過去20年間で100を超えていません。もちろん、99を超えるとフィールドでできることはほとんどありません(実際には、非常に非常に)。追加の桁で続行すると、フロントエンド/手順は99を超えることができるため、状況が変わることはありません。 もちろん、最初に言及しなかったこれらの詳細の一部は、特定のニーズに合わせてソリューションの可能性を絞り込むだけなので、問題の範囲をより広く保つことを試みました。

2
SQL Server Witnessのバージョンは重要ですか?
ミラーよりもSQL Serverのバージョンが高いミラーセットアップでSQL Serverの監視を使用できますか? つまり。ミラーはSQL Server 2012 Standard上にあり、ミラーリング監視サーバーはSQL Server 2014 Expressを使用しています。

1
スタンバイファイルなしでスタンバイ/読み取り専用からSQLデータベースを回復できますか?
「スタンバイファイル」がない場合、SQLデータベースをスタンバイ/読み取り専用モードから回復する方法はありますか? (ログ配布シナリオでこれをTUFファイルと呼ぶ参照がいくつかありますが、私の場合、それは手動の復元であり、スタンバイファイルにはBAK拡張子が付いていました。) 「RESTORE DATABASE foo WITH RECOVERY」を実行すると、致命的なエラーが発生します。 During startup of warm standby database 'foo', its standby file ('path\filename.bak') was inaccessible to the RESTORE statement. The operating system error was '5(Access is denied.)'. Diagnose the operating system error, correct the problem, and retry startup. 復元は少し前に行われましたが、残念ながらスタンバイファイルはバックアップフォルダーにあり、フォルダーのクリーンアップルーチンによって削除されました。他のメディアにはファイルのコピーはありません。この時点まで復元するために使用された元のバックアップもなくなりました。 幸い、これは私たちにとって大した問題ではありませんが(一時的な復元でした)、「このファイルを削除しないでください」以外に、この質問に関して他の有用な参照を見つけることができませんでした。 それが原因である場合は、データベース全体をスクリプト化するか、SSISを使用してすべてのオブジェクトを新しいデータベースコンテナーにコピーできると思います。目の前にデータベースの読み取り専用コピーがあるからです。 この問題を修正する方法はありますか?「復元」に戻して、その後の復元などを続行できるとは思いませんが、現在の状態で通常のオンラインモードに強制的に切り替えて、アクセス許可の変更、回復モードの変更、新しい完全バックアップなどを実行します。

3
複数の結合を使用したクエリのチューニング
私はこのクエリを持っています.. 214実行/分、44.42平均CPU(ms)はそれをはるかに速くする方法があります SELECT P.Id id0, P.ProgramId ProgramId1, P.ProgramName ProgramName2, P.ProgramLevel ProgramLevel3, P.Department Department4, P.Track Track5, P.AcademicYear AcademicYear6, P.StartTerm StartTerm7, P.Delivery Delivery8, P.Fee Fee9, P.City City10, P.STATE State11, P.StartDate StartDate12, P.Deadline Deadline13, P.DeadlineDisplay DeadlineDisplay14, P.ProgramType ProgramType15, O.Id as OrganizationId16, O.NAME OrganizationName17, P.ApplicationType ApplicationType18, P.Concentration Concentration19, P.ZipCode ZipCode20, P.Campus Campus21, P.WADisplayName WADisplayName22, …

2
新しいデータセンターへのデータベースの移動
私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップが私たちのニーズに最適であるように見えます。 詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。 トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか? 私の計画: (完了)現在のデータベースとログを新しいサーバーに転送し、SQL Serverの新しいインスタンスにアタッチします 開発データベースマシンでディストリビューターをセットアップし、本番データベースからそれに発行します。 毎晩1回、ディストリビューターからプッシュされる更新を受け入れる新しいデータベースマシンでサブスクライバーを作成します。 私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryのセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。 そして一般的に、私はこれらの概念を正しく把握していますか?

1
SQL Serverの次のバージョンのリリース予定日[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 マイクロソフトは、次のバージョンのロードマップを公開して、計画されたリリース日を特定していますか? そうでない場合、次のバージョンが本番環境に対応できるようになるまでにどのくらいかかりますか?

2
SSMSなどの個別の行数を取得するにはどうすればよいですか?
InfoMessageイベントでとエラー出力ExectueNonQueryをキャッチすることPRINTを含め、を介してストアドプロシージャを実行しているクライアントc#プログラムがあります。正常に動作しますが、変なことに気づきました。 SSMSからストアドプロシージャを実行すると、[メッセージ]タブで実行された個々のSQLステートメントの行数が表示されます(InfoMessageから送信されたかのように)。ただし、他の同じ出力はすべてキャッチしますが、プログラムはこれらのメッセージを表示しません。代わりに、ExecuteNonQuery関数の結果で影響を受ける行を返します。これは、個々の行カウントのすべての合計です(これは一種の役に立たないものです)。 たとえば、この手順は次のとおりです。 use [tempdb] go SELECT * INTO MyCols FROM sys.columns go CREATE PROC foo As UPDATE MyCols SET name = name + N'' -- SSMS shows (662 row(s) affected) UPDATE MyCols SET name = name + N'' WHERE name like '%x%' -- SSMS shows (59 row(s) affected) PRINT …

2
複数のディスクに完全バックアップを作成できますか?
現在、私は1つのバックアップファイルIMTDB.bakしか持っておらず、それはデータベース自体と同じHDDにあります。このDBバックアップを本質的に別のディスクに「コピー」して冗長性を高めたいのですが、「サーバーのバックアップに失敗しました。メディアは2つのメディアファミリをサポートするようにフォーマットされています」というエラーが表示されます。これは、バックアップを作成したときに、1つのドライブにバックアップを配置することのみを目的としており、遡って追加することはできないことを意味していると思います。バックアップをこの別のドライブに移行したいのですが(実際にはコピーするだけです)、現在のバックアップを削除する必要はありません。 私は何をしますか?IMTDB.bakを他のドライブのフォルダーにコピーするだけで安全ですか?

6
インデックスの再構築時間は断片化レベルに依存しますか?
インデックスの再構築に必要な時間は、断片化のレベルに依存していますか? 80%フラグメント化されたインデックスの再構築は、40%フラグメント化された同じインデックスの再構築に1分かかる場合、約2分かかりますか? 特定の状況でどのアクションが必要かについてではなく、必要なアクションを実行するために必要となる可能性があるRUNTIME(たとえば、秒単位)を求めています。インデックスの再編成または再構築/統計の更新を行う必要がある場合の基本的なベストプラクティスを知っています。 この質問では、REORGおよびREORGとREBUILDの違いについては尋ねられません。 背景:さまざまなインデックスメンテナンスジョブ(毎晩、週末は重いジョブ)のセットアップのため、毎日の「非常に負荷の高い」オフラインインデックスメンテナンスジョブは、中程度の断片化されたインデックスでより適切に実行して、オフタイムが小さい-またはそれは問題ではなく、80%フラグメント化されたインデックスでの再構築は、40%フラグメント化された同じインデックスでの同じ操作と同じオフタイムを取る可能性があります。 私は提案に従い、何が起こっているのかを自分で見つけようとしました。私の実験的なセットアップ:他にNOTHINGを実行し、他の誰にも使用されていないテストサーバーで、いくつかの追加の列と異なるデータ型[2つの数値、9つの日時、 2 varchar(1000)]と単純に行を追加しました。提示されたテストでは、約305,000行を追加しました。 次に、更新コマンドを使用して、整数値でフィルタリングする行の範囲をランダムに更新し、文字列値を変更してVarChar列の1つを変更し、断片化を作成しました。その後、で現在のavg_fragmentation_in_percentレベルを確認しましたsys.dm_db_index_physical_stats。ベンチマークに「新しい」断片化を作成するたびに、この値を含めてこの値を追加しました。これにphysical_page_countは、次の図を構成する記録が含まれています。 それから私は走りました:そして私の録音に使用することによってAlter index ... Rebuild with (online=on); つかみましCPU timeたSTATISTICS TIME ON。 私の期待:私は少なくとも、断片化レベルとCPU時間の間の依存関係を示す一種の線形曲線の兆候を見ることを期待していました。 これはそうではありません。この手順が良い結果に本当に適切かどうかはわかりません。行/ページの数が少なすぎるのではないですか? しかし、結果は、私の元の質問に対する答えが間違いなくNOになることを示しています。SQL Serverがインデックスを再構築するために必要なCPU時間は、断片化レベルにも基になるインデックスのページ数にも依存していないようです。 最初のグラフは、以前の断片化レベルと比較した、インデックスの再構築に必要なCPU時間を示しています。ご覧のとおり、平均線は比較的一定であり、断片化と必要なCPU時間の間に観察可能な関係はまったくありません。 再構築に多少の時間を必要とする可能性がある、更新後のインデックス内のページ数の変化の影響を尊重するために、FRAGMENTATION LEVEL * PAGES COUNTを計算し、必要なCPU時間の関係を示す2番目のグラフでこの値を使用しました対断片化とページ数。 ご覧のとおり、これは、ページ数が変わっても、再構築に必要な時間がフラグメント化の影響を受けることを示していません。 これらのステートメントを作成した後、巨大で高度にフラグメント化されたインデックスを再構築するために必要なCPU時間は行の数によってのみ影響を受ける可能性があるため、手順が間違っていると思います。私はこの理論を本当に信じていません。 だから、私は本当にこれを絶対に知りたいので、それ以上のコメントや提案は大歓迎です。

5
動的SQLを使用したデータベース間の切り替え
複数のデータベース間でさまざまなコマンドを実行するプロセスがありますが、動的SQLを使用して 'use @var'でDBを変更しても、実際にはデータベースは変更されません。 これを[test_db]で実行: declare @currentDB varchar(max) declare @sql varchar(max) set @currentDB = DB_NAME() set @sql = 'use [' + @currentDB +']' use master exec(@sql) select DB_NAME() [マスター]を現在のデータベース名として返します- use [test_db]動的ではなくコマンドとして入力すると、正しい名前が返されます。 これを実行してデータベースを正しく切り替える方法はありますか?

2
DBエンジンの盗まれたサーバーのメモリが高すぎる
System Center Operations Manager(SCOM)からエラーが発生します。 このエラーを解決するには? SQL DB 2012エンジンの盗まれたサーバーのメモリが高すぎます。 クエリを実行してこのカウンターを取得します。 ╔═══════════════════════════════╦═════════════╗ ║ Stolen Server Memory (MB) ║ 7354.773437 ║ ║ Lock Memory (MB) ║ 106.195312 ║ ║ Free Memory (MB) ║ 64.632812 ║ ║ Connection Memory (MB) ║ 24.203125 ║ ║ Log Pool Memory (MB) ║ 14.085937 ║ ║ Optimizer Memory …

1
修飾されていないインデックス付きビューでのクラスター化インデックス挿入演算子の防止
誰かがこれの回避策を知っていますか?本質的に、ストアドプロシージャは、行が修飾されていなくても、インデックス付きビューに対して挿入演算子を強制します。その結果、キャストエラーが発生します。ただし、アドホックの場合、sqlはビューを考慮から正しく除外します。 次のスキーマを検討してください。 create table testdata ( testid int identity(1,1) primary key , kind varchar(50) , data nvarchar(4000)) go create view integer_testdata with schemabinding as select cast(a.data as int) data, a.kind, a.testid from dbo.testdata a where a.kind = 'integer' go create unique clustered index cl_intdata on integer_testdata(data) go create procedure insert_testdata …

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