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

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

3
インデックスをパーティションに配置しないことには利点がありますか?
大規模なパーティションOLAPテーブルを管理する特権があります。この表を確認したところ、インデックスの1つがパーティションスキームと一致していないことに気付きました。著者が利用できず、注意深く作成されたGoogle検索で有用な結果が返されなかったため、これが意図的なものか偶発的なものかはわかりません。 SQL Server 2008でインデックスをパーティションアラインしない理由はありますか?

3
MS SQL Serverを入手してディスク容量を解放する
不十分に管理されたデータベーステーブルは巨大なものに成長しました。孤児のレコードの48+ギグ。私はそれをクリーンアップして、危険なほどにいっぱいになったハードドライブを通常の状態に戻そうとしています。このテーブルから約4億個のレコードを削除します。これは、私が入力しているときに実行されています。ハードドライブ領域の低下は見られませんが、システムテーブルクエリでメモリの低下が見られます。テーブルサイズを取得するために実行しています。データベースは「単純復旧モデル」を使用しています。 これに類似した多くの質問があり、データベースを縮小する必要があると回答しています。しかし、彼らは断片化されたデータなどのためにこれがどのように悪い/怖いのかを説明し続けます データベースはこのサイズであってはならないので。それを縮小するのはまだ悪いですか? これは本番データベースです。縮小すると、ダウンタイムが発生したり、データベースがロックされたりしますか? SQL Server Management Studioには、縮小、データベース、またはファイルの2つのオプションがあります。私の状況を考えると、最良の選択肢は何でしょうか? DBに必要な空き領域の割合に関するルールはありますか? 縮小のタグの説明を読んでも、私はそれをしたくありません。別の方法はありますか?

1
復元できません(エラー3456)
簡単に理解できない状況があり、このフォーラムで他の人に提案があるかどうか尋ねたいと思いました。 Windows Server 2008R2 EnterpriseでSQL Server 2008 R2 Standard SP3を実行しています。 データベースにはいくつかのメンテナンスが必要でしたが、その後、別のサーバーに復元する必要がありました。COPY_ONLYで実行される完全なdbバックアップと、4つのtlogバックアップのセットがあります。 開始する前に、tlogbackup1を作成します 以下からの変更FULLへのBULK_LOGGED復旧モデル 新しいファイルグループを追加する newfilegroupにファイルを追加する newfilegroupをデフォルトに設定 テーブルに選択(newfilegroup) 元のテーブルをドロップ 元のファイルを削除 元のファイルグループを削除する 新しいテーブルの名前を元のテーブルと一致するように変更する 元のファイルグループと一致するようにnewfilegroupのファイル名を変更する 元のファイル名と一致するようにカタログのファイル名を変更する OSレベルでファイル名を変更して元のファイル名と一致させる 既定のファイルグループを元のファイルグループに設定する dbをオンラインにする 以下からの変更BULK_LOGGEDへのFULL復旧モデル すべての手順が完了したら、tlogbackup2を作成します 復元サーバーでのドライブ文字の変更により、すべてのバックアップの復元にはWITH MOVEを使用する必要があります。 回復手順: RESTORE database SomeDB FROM DISK = 'D:\REPRO\SomeDB.bak' WITH MOVE 'SystemData' TO 'D:\SQLDATA\SomeDB.mdf' ,MOVE 'SystemDataPDS' TO 'D:\SqlData\SomeDB.ndf' ,MOVE 'SystemData_log' TO …

2
Page Life Expectancyはインスタンスについて何と言っていますか?
環境内のいくつかのSQL Serverインスタンスに監視ソフトウェアをインストールしました。ボトルネックを見つけて、パフォーマンスの問題をいくつか修正しようとしています。一部のサーバーでより多くのメモリが必要かどうかを確認したい。 1つのカウンター、ページの平均余命に興味があります。それはすべてのマシンで異なって見えます。一部のインスタンスで頻繁に変更されるのはなぜですか?それはどういう意味ですか? いくつかの異なるマシンで収集された先週のデータを見てください。各インスタンスについて何が言えますか? 頻繁に使用される本番インスタンス(1): 適度に使用されている実稼働インスタンス(2) まれに使用されるテストインスタンス(3) 頻繁に使用される本番インスタンス(4) 中程度に使用されたテストインスタンス(5) 頻繁に使用されるデータウェアハウス(6) 編集:これらのすべてのサーバーに対してSELECT @@ VERSIONの出力を追加します: Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) Instance 2: Microsoft SQL …

1
xmlパラメータを使用して複数のデータをアップサートするときにマージクエリの使用を回避する方法
値の配列でテーブルを更新しようとしています。配列の各項目には、SQL Serverデータベースのテーブルの行と一致する情報が含まれています。行がテーブルに既に存在する場合、その行を指定された配列の情報で更新します。それ以外の場合は、テーブルに新しい行を挿入します。基本的にアップサートについて説明しました。 現在、私はこれを、XMLパラメーターを受け取るストアード・プロシージャーで実現しようとしています。テーブル値パラメーターではなくXMLを使用する理由は、後者の場合、SQLでカスタムタイプを作成し、このタイプをストアドプロシージャに関連付ける必要があるためです。将来、ストアドプロシージャまたはdbスキーマの何かを変更した場合、ストアドプロシージャとカスタムタイプの両方をやり直す必要があります。このような状況は避けたいです。さらに、データ配列のサイズが1000を超えることはないため、TVPがXMLよりも優れていることは、私の状況では役に立ちません。これは、ここで提案されているソリューションを使用できないことを意味します。SQLServer 2008でXMLを使用して複数のレコードを挿入する方法 また、ここでの同様のディスカッション(UPSERT-MERGEまたは@@ rowcountのより良い代替案はありますか?)は、テーブルに複数の行をアップサートしようとしているため、私が求めているものとは異なります。 次の一連のクエリを使用して、xmlから値を更新することを望んでいました。しかし、これはうまくいきません。このアプローチは、入力が単一の行である場合にのみ機能すると想定されています。 begin tran update table with (serializable) set select * from xml_param where key = @key if @@rowcount = 0 begin insert table (key, ...) values (@key,..) end commit tran 次の代替方法は、完全なIF EXISTSまたは次の形式のバリエーションの1つを使用することです。しかし、私は次善の効率であることを理由にこれを拒否します: IF (SELECT COUNT ... ) > 0 UPDATE ELSE INSERT 次のオプションは、http://www.databasejournal.com/features/mssql/using-the-merge-statement-to-perform-an-upsert.htmlで説明されているようにMergeステートメントを使用することでした。しかし、それから私はここでマージクエリの問題について読みました:http : …

1
フェールオーバークラスターがない環境でのWindows Update後のAlwaysOn可用性グループエラー
SQL Serverサービスが今朝停止しており、一部のWebサイトが停止しました。Windowsイベントビューアを確認したところ、次のエラーが発生しました。 アップグレードステップ 'SSIS_hotfix_install.sql'でエラー942、状態4、重大度25が発生したため、データベース 'master'のスクリプトレベルのアップグレードに失敗しました マスターデータベースを回復できません。SQL Serverを実行できません。完全バックアップからマスターを復元、修復、または再構築します。masterデータベースを再構築する方法の詳細については、SQL Server Books Onlineを参照してください。 私が最初に行ったのは、Googleにエラーを報告することでした。私は最終的に正確な問題とその修正を含むフォーラムエントリを見つけました(私が解決策を探しているブログエントリでも)。この問題はAlwaysOn可用性グループと関係があり、修正には次のことが必要です。 トレースフラグ902でSQL Serverサービスを開始します。 ネットスタートMSSQL $ InstanceName / T902 SQL Server Management Studioを開き、可用性グループに移動して、可用性データベースからSSISDBを削除します 新しいクエリを開き、\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQL $ InstanceName \ MSSQLの下のインストールフォルダーにあるSSIS_hotfix_install.sqlスクリプトを実行します。 SQL Serverサービスを停止します。 ネットストップMSSQL $ InstanceName SQL Server構成マネージャーからSQL Serverサービスを開始する SSISDBを可用性グループに戻す ただし、「AlwaysOn高可用性」フォルダーを展開しようとすると次のエラーが発生したため、手順2を完了できませんでした。 このインスタンスで可用性グループを作成する前に、サーバーインスタンス 'InstanceName'の「AlwaysOn機能を有効にする必要があります。 次に、指示に従って「SQL Server構成マネージャー」と「AlwaysOn高可用性」タブに移動し、機能をオンにします。今回は機能がグレー表示され、コンピューターノードがフェールオーバークラスター内にないことを示すメッセージが表示されました。 私の質問は: …

1
T-SQL-オプション(FAST x)およびトレースフラグ8722
私は長い間検索してきましたが、それでも私の問題に対する答えが見つかりません。 私たちのDynamics AXは、クエリヒントOPTION(FAST x)でクエリを生成しています。これにより、不適切な実行プランが使用される場合があります。開発者は、それはデフォルトであり、変更するのが難しいと言います(潜在的にすべてのフォームで修正する必要があります)。 したがって、トレースフラグを使用してこれらのヒントを上書きする方法を探していました。SQL Serverに一部のクエリヒント、特にOPTION句のヒントを無視させると主張されている素敵なトレースフラグ8722を見つけました。 ただし、これは私の場合は機能しません。トレースフラグ8602(インデックスヒントを無効にする)も有効にしようとしましたが、クエリはまだFAST xヒントを使用して実行されています(実際にOPTION句を削除する場合よりもはるかに遅くなります)。 プランキャッシュもクリアしようとしましたが、役に立ちませんでした。 何か案は?何か不足していますか? PS私はトレースフラグをグローバルに有効にしました。これはSQL Server 2012 Developerエディションです

3
アセンブリ 'system.web、version = 4.0.0.0、culture = neutral、publickeytoken = b03f5f7f11d50a3a。' SQLカタログで見つかりませんでした
System.WebのHTTPUtility.UrlDecodeメソッドを使用してSQL CLR関数をデプロイしようとしていますが、デプロイできません。受け取ったエラー: .Net SqlClientデータプロバイダー:メッセージ6503、レベル16、状態12、行1アセンブリ 'system.web、version = 4.0.0.0、culture = neutral、publickeytoken = b03f5f7f11d50a3a。' SQLカタログで見つかりませんでした。 機能(SSDTプロジェクトの一部として): using System; using System.Web; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)] public static SqlString udf_UrlDecode(SqlString encodedXML) { string decodedXML; decodedXML = HttpUtility.UrlDecode(encodedXML.ToString()); return new SqlString(decodedXML); } } このスレッドに関連しています。私はVS2012 …

1
クライアントTCPポートに基づくSQL Serverトレース
アプリケーションを実行するためにRDPを介してログインするさまざまなユーザーがいるWindowsターミナルサーバーがあります。アプリケーションは、SQL Server 2008 R2インスタンスに対してユーザーごとに1つ以上の接続を作成します。すべてのユーザーは、同じSQLログインを使用して同じデータベースにアクセスします。特定のユーザーのSQLセッションを追跡できるようにしたいのですが、どのSQLセッションがどのユーザーに属しているかを判別する方法が見つかりませんでした。ただし、アプリケーションの各インスタンスが使用しているソースTCPポートを特定できます。 クライアントのTCPポートに基づいてSQLセッションをトレースする方法はありますか?


1
復元を行うときにログバックアップをテールしますか?
通常、運用サーバーから非運用サーバーへのDBの復元を実行するときは、WITH REPLACEオプションを使用します。 MSDNによれば、復元する前に実際にテールログをバックアップする必要があります。 データベースがオンラインであり、データベースで復元操作を実行する予定の場合は、まずログの末尾をバックアップします。オンラインデータベースのエラーを回避するには、BACKUP Transact-SQLステートメントの…WITH NORECOVERYオプションを使用する必要があります。 私がそれをしている方法のいくつかの危険または不利な点は何ですか?なぜ、最初にテールログをバックアップするのが有利なのですか? 私はSQL Server 2008R2を使用していますが、このクエリはほとんどの新しいバージョンのSQL Serverにも関連していると考えられるため、最初はそのようにタグ付けしていません。

1
ALTER TABLE…通常のテーブルからパーティションテーブルへの切り替えが失敗する
以下のコードは次のことを行います: C:\ TEMPにデータベースplay_partitionを作成します 2つの同一のパーティション分割テーブルplay_tableおよびarchive_play_tableを作成します play_tableパーティション1をarchive_play_tableパーティション1に切り替えます play_tableパーティション2と同じファイルグループに、play_tableと同じ構造の新しいパーティション分割されていないテーブルtemp_tableを作成します。 play_table_partition 2をtemp_tableに切り替えます temp_tableをplay_tableパーティション2に戻そうとし、失敗します メッセージ4982、レベル16、状態1、行64のALTER TABLE SWITCHステートメントが失敗しました。ソーステーブル 'play_partition.dbo.temp_table'の制約をチェックすると、ターゲットテーブル 'play_partition.dbo.play_table'のパーティション2で定義された範囲では許可されない値が許可されます。 なぜ失敗するのですか? SQL Server 2014(Enterprise Edition Trial)を使用しています。 よろしく、 コリン・デイリー http://www.colindaley.com/translator /* Playing with partitioned tables */ USE master; GO DROP DATABASE play_partition; GO CREATE DATABASE play_partition ON PRIMARY( NAME = play_partition , FILENAME = 'C:\TEMP\play_partition.mdf') ,FILEGROUP play_fg1( …

3
「データベースをSQL Azureにデプロイする」タスクがない
最近SQL Server 2014 Expressを自分のワークステーションにインストールし、SQL Azureに展開しようとしています。以前、SQL Server 2012 Expressを使用する以前のワークステーションで次のことを行っています。 データベースを右クリック> [タスク]> [SQL Azureにデータベースをデプロイ] SQL Server 2014では、このオプションは完全に欠落しており、代わりに新しいオプション「データベースをWindows Azure VMにデプロイする」に置き換えられています。 SQL Azureに展開するためのオプションがない理由を理解できません。SQL Server 2014で現在個別にインストールする必要があるものはありますか?私がオンラインで読んだことから、2014年版には両方のオプションが存在するはずです。マイクロソフトはSQL Server 2014 Expressのこのオプションを削除しましたか?

1
SQL Serverのアップグレードが失敗した後にデータベーススナップショットを「ハックドロップ」する方法
SQL Serverが2014にアップグレードされた後、データベーススナップショットを削除できない問題を処理しています。スナップショットは無効ですが、削除することはできません。 Connectアイテムには残念なコメントが含まれていますが、最終的には修正されると思います。しかし、私はこれにすぐに対処する必要があります。 このバグのために削除できないデータベーススナップショットを削除する方法はありますか?これを行うために文書化された手段をすべて使い果たしたのではないかと心配しています。ドキュメント化されていないシステムテーブルの変更が必要になる場合があります。データベース(スナップショット)を強制的に削除する方法はありますか?

2
常時スキャンには0秒または2〜3分かかります
行を返さないことが保証されている以下のようなクエリは、いずれかのサーバーで0〜160秒かかります。 select col1, col2, col3 from tab1 where 0 = 1 2週間前、これは48時間の間隔で6回発生しました。先週、同じクエリにかかった時間は〜0秒でした。アプリケーションのSQLのログはありますが、容疑者はまだ見つかりません。さらに、上位0 / where 0 = 1タイプのクエリはデータページにヒットしないので、行/ページ/テーブルレベルのデータロックに耐性があると思いましたか?スキーマは(既知の)SQLの影響を受けません。 問題が一貫しておらず、サーバーに非常に大きな負荷がかかっているため、SQLプロファイラーを接続する前に何が起こっているのかについての理論を理解したいと思います。他のクエリは、これらの遅延中に問題なく実行されます。アプリケーションの既知の問題は、動的に作成された多数のSQLクエリです-48時間にわたって合計850k(ログ)クエリのうち約200kの一意のクエリは、このような問題を引き起こす可能性がありますか? サーバーはSQL Server 2005 Standard Edition、96 GB RAM、SAN上のディスクおよび4 CPU / 16コアを実行しています。データベースファイルとファイルグループは十分に最適化されており、問題にはなりません(ただし、これについては個別に調査しています)。 どこを見ればよいかについてのポインタは大歓迎です。 編集:完璧です!クエリを再生して実行プランを追加したところ、1分35秒かかりました。クエリ期間を示す実行プランとスクリーンショットは次のとおりです。 編集2:2回目の実行の統計時間の詳細。現在、一貫して遅いようですので、プロファイラーとperfmonを接続します: SQL Server Execution Times: CPU time = 0 ms, elapsed time = 97402 ms. SQL Server parse and compile …

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