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

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

2
関数がnullケース操作でハングする
開始日と終了日を受け入れる関数を作成しました。終了日はオプションです。次にCASE、終了日が渡されない場合に開始日を使用するようにフィルターにを記述しました。 CASE WHEN @dateEnd IS NULL THEN @dateStart ELSE @dateEnd END データの最新の月の関数を呼び出すと: SELECT * FROM theFunction ('2013-06-01', NULL) ...クエリがハングします。終了日を指定した場合: SELECT * FROM theFunction ('2013-06-01', '2013-06-01') ...結果は正常に返されます。関数からコードを取り出し、クエリウィンドウ内で正常に実行しました。フィドルの問題も再現できません。次のようなクエリ: SELECT * FROM theFunction ('2013-04-01', '2013-06-01') ...も正常に動作します。 NULL終了日にa が渡されたときに関数がハングする原因となる可能性のあるクエリ(下記)はありますか? SQLフィドル 実行計画についてSELECT * FROM theFunction ('2013-06-01', '2013-06-01') 見積計画についてSELECT * FROM theFunction ('2013-06-01', NULL)

3
トランザクションレプリケーションのID範囲の処理
トランザクションレプリケーションを設定すると、SQL ServerがID範囲の管理を手動に設定することに気付きました。つまり、サブスクリプションデータベースで、PKがID列であるテーブルに新しいレコードを挿入しようとすると、エラーが発生し、「1」、「2」のPKを挿入しようとしたと表示されます。 "、" 3 "などです。これは、サブスクライバーのすべてのID列の現在のID値が、パブリッシャーの状態に留まるのではなく、シード値(通常は1)にリセットされるためです。 SQL Serverがこれを行う理由を理解しました。サブスクライバーテーブルを読み取り専用のままにすることになっています。ただし、私のシナリオは少し正統ではありません-レプリケーションを通じて時々サブスクライバーを更新し、そのDBの即時バックアップを作成してから、サブスクライバーにいくつかの更新を実行して、パブリッシャーにプッシュバックされないようにします。サブスクライバを再度更新するときに、以前のバックアップからデータベースを復元し、最新の更新を取得します。これらの更新の間にサブスクライバーを更新したいので(可能であれば「一時的なデルタ」)、レプリケート時にID列が機能し、1にリセットされないようにする必要があります。 パブリケーションの設定時に自動ID範囲管理をオンにしようとしましたが、パブリケーションにテーブルを追加しようとすると、次のエラーが表示されます。 メッセージ21231、レベル16、状態1、プロシージャsp_MSrepl_addarticle、行2243 自動ID範囲のサポートは、サブスクライバーの更新を許可するパブリケーションでのみ役立ちます。 この問題を回避する方法はありますか?このレプリケーションをサブスクライバー側で読み取り専用であるかのようにSQL Serverに提示したいのですが、パブリッシャーにプッシュバックされる更新を行う予定はありませんが、一時的な更新を行います次の複製の前に消去されます。 スナップショットレプリケーションは、私の使用パターンではトランザクションレプリケーションよりも適切な方法であると考えましたが、問題は、スナップショットレプリケーションでは、更新ごとにすべてのデータベースを送信する必要があることです。最新のレプリケーションの後でDBの即時バックアップを取ることを計画しているため、毎回転送全体を実行する必要はありません。前回からの変化だけです。

1
奇妙な動作DBCC Shrinkfile
データの95%がアーカイブおよび削除されているデータベースに対して、1 GBのチャンクでdbcc圧縮ファイルを実行しようとしています。9GBがデータ/インデックスである235GBファイルを使用しています。これを50GBに縮小したいと思います。データベースファイルの圧縮は悪いことです。断片化などが発生します。データのパージ/圧縮の一部として、idnexスクリプトを再構築することもできます。 自分のワークステーション(クアッドコア、12GB RAM、2 x SATAドライブ)のデータベースに対してdbcc圧縮ファイルスクリプトを実行すると、圧縮に約8〜10分かかります。 データベースポストデータパージの同じコピーに対して同じコードを実行すると、テスト環境(80以上のコア、128GB RAM、SSD SAN)では、70分かかります。注目すべきは、縮小ファイルの実行時にこのサーバーでアクティビティがほとんどないことです。同じ結果で4回実行されました。 次に、別のアプローチをとり、残りの9GBを別のファイルグループと物理ファイルに移動しました。自分のワークステーションで空の230GBファイルに対してdbccrinkfileを実行して50GBに圧縮すると、1分未満かかります。 これと同じアプローチで、テスト環境では、70分以上かかります。 テスト環境での70分間の実行中に、Brent Ozarのスクリプトに従って前後に待機統計のスナップショットを撮りました。下の上位3行: 秒単位のサンプル時間秒単位のサンプル期間wait_type待機時間(秒)待機数待機あたりの平均ミリ秒 2013-05-28 11:24:22.893 3600 WRITELOG 160.8 143066 1.1 2013-05-28 11:24:22.893 3600 CXPACKET 20.9 13915 1.5 2013-05-28 11:24:22.893 3600 PAGELATCH_EX 11.1 443038 0.0 Windowsイベントログに異常は何も表示されません。私はこの時点でスクラッチに向かっています。スタンドアロンワークステーションと比較して、忍者ハードウェアでこれほど時間がかかるのはなぜですか。

3
ROWGUIDCOLとしてのPKまたは別のrowguid列を使用しますか?
ここで長い議論が続いているので、他の意見を聞きたいです。 uniqueidentifierがクラスター化されたPKを持つテーブルがたくさんあります。これが良いアイデアかどうかは、ここでは範囲外です(そして、すぐには変更されません)。 ここで、データベースをマージパブリッシュする必要があり、DEVは、既存のPKをROWGUIDCOLとしてマークするのではなく、個別のrowguid列の使用を推奨しています。 基本的に、彼らはアプリケーションが複製のみで使用されるものをドメインに持ち込むべきではないと述べています(それは彼らにとって「DBAのもの」だけです)。 パフォーマンスの観点からは、既存の列で実行できることを実行するために新しい列を追加する必要がある理由はわかりません。さらに、それは「DBAのもの」だけなので、DBAに選択させてみませんか? 私はDEVのポイントをある程度理解していますが、まだ同意しません。 考え? 編集:私はこの議論の中で少数派であり、私の立場に疑問を投げかけるDEVは私が尊敬し信頼する人々であることを追加したいだけです。これが私が意見を求めた理由です。 また、何かが欠けている可能性があり、その点を誤解している可能性があります。

2
子行の同じセットを持つ親行を見つける
次のような構造があるとします。 レシピ表 RecipeID Name Description RecipeIngredientsテーブル RecipeID IngredientID Quantity UOM 鍵はRecipeIngredientsです(RecipeID, IngredientID)。 重複するレシピを見つけるための良い方法は何ですか?複製レシピとは、各成分の成分と量がまったく同じであると定義されています。 FOR XML PATH成分を1つのカラムに組み合わせるために使用することを考えました。私はこれを完全に調査していませんが、成分/ UOM /数量が同じ順序で並べ替えられていて、適切なセパレーターがあることを確認すれば機能するはずです。より良いアプローチはありますか? 48Kのレシピと200Kの材料の行があります。

3
Simple Recoveryに切り替えるときのトランザクションログのメンテナンス
バックグラウンド: 最近、50以上のSQL Serverと450以上のデータベースを継承しました。毎晩のバックアップは約8 TBであり、言うまでもなく、必要以上のディスク領域を使用しています。すべてのデータベースが完全復旧に設定されており、トランザクションログがバックアップされたことがない。私はすべてのSQL Serverを調べ、夜間のバックアップのみが必要で、1日のデータ損失が許容される優先度の低いサーバーを特定しました。 質問: 多くの優先度の低いデータベースをからSIMPLEリカバリモードに切り替えていFULLます。既存のトランザクションログは切り捨てられますか(チェックポイントが作成されるとき)?既存のトランザクションログの一部は50〜100 GBです。前進するためにそれらを縮小する必要があるものを決定する上で最良のアプローチは何ですか?そんなに大きくしたくないのは明らかです。または、時間の経過とともに自然に縮小しますか(そうなるとは思いません)?

4
復元が、データベースあたりのライセンス制限10240 MBを超えています。私が本当に必要なのはDB構造だけです
お客様から.bakファイルを受け取りましたが、復元する必要がありますが、データベースごとにSQL Server 2008 R2 10240 MBのライセンス制限を超えています。私が本当に必要なのは、DB構造だけです。とにかく復元する方法はありますか、それとも構造を復元するだけですか?

1
ミラーデータベースのトランザクションログファイルを圧縮できますか?
これは、プリンシパルデータベースのログファイルを圧縮できなかった理由に関する前の質問のフォローアップ質問です。 簡単に言うと、データベースミラーリングをセットアップしましたが、トランザクションログをバックアップしたジョブが再び実行されていることを忘れて、トランザクションログがほぼ60GBに増えました。 ミラーリングがセットアップされたため、このサイズの増加はミラーリングされたサーバーに複製され、最終的にすべてのディスク領域を占有し、ミラーデータベースを使用できなくなりました。 パーこの質問ミラーデータベースのトランザクションログのメンテナンスについて、あなたは鏡にログをバックアップすることはできませんが、ときに特異的に尋ねたコメントは、ミラーデータベース上の生い茂ったログファイルを縮小する方法について、コメントをすることを残っていました これを行う1つの方法は、ミラー化されたデータベースにフェールオーバーし、そこで縮小することです。これを非本番環境で徹底的にテストして、期待どおりの動作が期待できることを確認してください。 これは、ミラー上のログファイルを圧縮する他の方法が存在する可能性があることを示唆しているようであり、この方法は、必ずしも運用サーバーで安全に実行できるとは限りません。 データベースミラー上のトランザクションログファイルを安全に縮小する方法はありますか?

3
SSISはExcelソース文字列をフロートに強制的に変更し続けます
テキストになっているはずのExcelの列がありますが、SSISはそこに数値テキストを認識し、自動的に倍精度浮動小数点数にします[DT_R8]。 出力ブランチの[外部]列と[出力]列で手動で変更できますが、エラー出力では、対応する列を変更できません。 Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)". Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)". パッケージのxmlを変更してみました。私が試したIMEX=1し、typeguessrow=0それのどれも私の問題を修正していません。これには修正がありますか?データ型を推測する前に、Excelがデフォルトの8行以上を読み取るようにレジストリを変更することを提案する記事もあります。この方法を使用したくない場合でも、パッケージを実行する予定のマシンでレジストリを変更する必要があるためです。 SQLのnvarcharフィールドにインポートされるExcelフィールドは、たとえば次のようになります。 …

3
sysjobhistoryへのSQL Server 2012 catalog.executions-それらを結合する方法は?
リソースを使い果たしましたが、ssisdb.catalogテーブルをそれらを実行するジョブに結合するための確実な方法が見つかりません。いくつかのカスタムsprocを作成して、実行時間とカタログテーブルから書き込まれた行を監視しようとすると、それらを呼び出しジョブと結び付けることができれば非常に有益です。 私は、catalog.executionsテーブルをmsdb.sysjobhistoryに結合するために使用できるテーブルがあるかどうかを確認しようとしています。SSISパッケージと呼ばれるジョブを関連付け、分析の実行にデータを使用する必要があります。

2
SQL ServerをクラッシュさせるSQLクエリをトレースする方法
SQL Server 2008データベースサーバーがあります(たまたまMSフェールオーバークラスタリングで実行されていますが、ここでは関係ないと思います)。 私たちのアプリケーションはDBアクセス用にHibernateを実行しており、最近v3.1から3.6にアップグレードして以来、SQL Serverが定期的に(24〜48時間ごとに、場合によってはさらに頻繁に)クラッシュすることを経験しています。 問題の特定の問題は、メモリに関連しているようです。サーバーがクラッシュする直前に(フェイルオーバークラスターマネージャーによって自動再起動されるようです)、次のようなエラーが表示されます。 Error: 701, Severity: 17, State: 130. There is insufficient system memory in resource pool 'internal' to run this query. また、時々(しかし定期的に)のメッセージ Error: 17300, Severity: 16, State: 1. (Params:). The error is printed in terse mode because there was error during formatting. Tracing, ETW, notifications etc …

3
SQL Serverサンドボックス
私はレポート開発者が作業を行うためのサンドボックスをセットアップしようとしています。私の現在の計画は、毎晩データベースを「リセット」することですが、どうすればよいかわかりません。リセットとは、サーバー上の1つのデータベースを除くすべてのユーザーテーブル、ビュー、ストアドプロシージャなどを基本的に削除することです。データベースを削除して再作成することもできると思いますが、適切なADグループ/ユーザーすべてへのアクセスを再度許可することになると思います。 これを実行するための最善の方法は本当にわからないので、あなたの何人かがいくつかの良いアイデア/提案を提供できることを願っています。ありがとう。 :明確にするために、我々は基本的に私達のデータベースでこれをやりたいhttp://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57。唯一の違いは、毎日ユーザーを再現したくないということです。 バージョン: SQL Server 2008 エディション: Developer&Enterprise

1
ファイル増加イベントを特定する
デフォルトの自動拡張設定(1 MBまたは10%の増分)で作成され、長期間にわたって拡張された多数のDBをポートフォリオで見つけました。各DBファイルの外部断片化の量のゲージを取得したい場合、メタデータからDBファイルのサイズが(自動拡張または手動で)変更された回数を取得できますか?明確にするために、インスタンスの再起動以降だけでなく、DBの存続期間中のDBファイルの変更履歴をメタデータから取得できますか?

2
アーカイブ目的でデータベースをデフラグ/圧縮する最良の方法
電子メールのアーカイブに使用されるSQL Serverインスタンスがあります(サードパーティのアーカイブパッケージによる)。多くの場合、ソフトウェアは新しい空のデータベースにロールオーバーされます。これまでは四半期ごとに行ってきましたが、今は毎月行う予定です。アーカイブされるデータの量は1か月あたり約15〜20 GBで、データの大部分は少数のテーブル(通常は2〜4)にのみ存在します。 新しいデータベースにロールオーバーすると、古いデータベースは完全に読み取り専用で使用されます。私がしたいことは、すべてのテーブル/インデックスが隣接しており、非常に高いFILL FACTORを持ち、データファイルの最後に多くの空スペースがない、タイトなデータファイルに最適化することです。また、このサーバーではStandard Editionを使用していますが、暗黙の制限がすべてあります(それ以外の場合は、既にデータ圧縮を使用しています)。 私が考えることができるいくつかの可能性: REBUILD / REORGANIZEインデックス、DBCC SHRINKFILE(わかりました、これは賢明なオプションではありません。DBCCSHRINKFILEは触れたものから小便を断片化するためですが、完全を期すために含めています。) 自動統計をオフにして新しいデータベースを作成します。ソースデータベースからすべてのテーブルをスクリプト化して再作成します。bcpを使用して、データをクラスターキーの順序で新しいデータベースにエクスポート/インポートします。すべてのインデックスをスクリプト化して再作成します。フルスキャンですべての統計を再計算します。 自動統計をオフにして新しいデータベースを作成します。ソースデータベースからすべてのテーブルをスクリプト化して再作成します。SSISまたはT-SQLを使用して、新しいデータベースにデータを転送します。すべてのインデックスをスクリプト化して再作成します。フルスキャンですべての統計を再計算します。 いずれの場合も、最後の手順はデータベースを読み取り専用モードに設定することです。 これを行うには他にどのような良い/良いオプションがありますか?私の懸念は、高いFILL FACTORを維持するような方法で、論理的に連続した方法でデータを移動することです。 編集: データの約75%がイメージ(LOB)列に格納されているようです。

5
選言で大きなセットを効率的にフィルタリングする
テーブルが1つあるとしましょう CREATE TABLE Ticket ( TicketId int NOT NULL, InsertDateTime datetime NOT NULL, SiteId int NOT NULL, StatusId tinyint NOT NULL, AssignedId int NULL, ReportedById int NOT NULL, CategoryId int NULL ); この例TicketIdでは主キーです。 ユーザーがこのテーブルに対して「部分的にアドホック」なクエリを作成できるようにしたい。クエリのいくつかの部分が常に修正されるので、私は部分的に言います: クエリは常に範囲フィルターを実行します InsertDateTime クエリは常に ORDER BY InsertDateTime DESC クエリは結果をページングします ユーザーは、オプションで他の列をフィルターに掛けることができます。フィルターは、なし、1つ、または多くでフィルターできます。そして、各列に対して、ユーザーは分離として適用される値のセットから選択できます。例えば: SELECT TicketId FROM ( SELECT TicketId, ROW_NUMBER() …

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