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

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

1
SQL Server 2014-すべてをリセット
ソフトウェアを再インストールする前に、SQLインスタンスを使用して「ゼロから始める」簡単な方法はありますか?つまり、つまり: 作成されたすべてのログオンを削除し、 追加されたデータベースをすべて削除し、 システムデータベースをリセットします。 新しい構成を削除し、 SQL Serverエージェント構成をリセットする オンラインでこれを行う方法は見つかりません。

1
SQL Server 2000のすべてのテーブル、ビュー、プロシージャへのアクセス許可を付与する
T-SQLをSQL Server 2000構文で使用して、特定のデータベースのすべてのTABLESおよびVIEWSに対してGRANT SELECT、INSERT、UPDATE、DELETEを実行し、100を超えるオブジェクトのうち2つまたは3つを除外するかなり効率的な方法があるかどうか疑問に思いました。また、すべてのストアドプロシージャに対するEXEC権限を付与できるようにしたいと考えています。 現在、以下のコードを使用して、1つずつ変更しています。約100のテーブルと100のビューに対してこれを行うと、時間がかかりすぎ、GUIでさらに時間がかかります(私が間違っている場合を除きます)。 use [DATABASE_NAME] GO GRANT DELETE ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT INSERT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT SELECT ON [dbo].[table_name]TO [user_name] GO use [DATABASE_NAME] GO GRANT UPDATE ON [dbo].[table_name]TO [user_name] GO T-SQLを使用して、すべてのユーザーテーブルとビューを循環させ、カップルオブジェクトを除外しながら特定の特権を付与するにはどうすればよいですか?

1
SQL Server、TOP対ROW_NUMBER
私は実行計画について学び、さまざまなクエリを試し、それらのパフォーマンスを比較して、これに遭遇しました: SELECT StatisticID FROM ( SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn FROM FTCatalog.Statistic ) AS T WHERE T.rn <= 1000 ORDER BY rn SELECT TOP 1000 StatisticID FROM FTCatalog.Statistic ORDER BY StatisticID どちらも同じ結果セットを返しますが、最初の方が実行速度が速く、リソースの消費量も少なくなります(少なくともSSMSはそれを教えてくれます)。ここでは実行計画を示します。 SQLクエリプランエクスプローラーとの比較: 実際に舞台裏で何が起こっているのか、なぜ結果が異なるのかについて誰かに洞察を与えることはできますか?他に必要なものがあれば、お知らせください。 ありがとう、エヴァルダス。

1
共有ドライブでのファイルの初期化
以前にこれと似たような質問をしましたが、以前はバックアップを共有の場所に移動することについて質問していました。今回は気になります。共有ドライブにデータベースを復元する場合、そのサーバーまたはSQL Serverを実行しているサーバーだけでIFIを有効にする必要がありますか? 私が尋ねる理由は、かなり大きなデータベースを復元していて、過去2、3時間は100%で停止してしまったためです。の待機タイプsp_whoisactiveは次のとおりです。 (28472716ms) `PREEMPTIVE_OS_WRITEFILEGATHER. 私が見たのは、IFIがオンになっていないときだけですが、SQL Serverでは有効になっていますが、共有ドライブサーバーでは有効になっていません。

2
ジョブステップの出力全体を確認するにはどうすればよいですか?
かなり長い出力を作成するPowerShellを実行するSQLエージェントジョブがあります(とりわけrobocopy出力があります)。 SQLエージェントジョブ履歴では、この出力の最初の1,000文字程度しか表示されません。 出力全体を表示できる別の場所はありますか? 完全な出力を表示するために使用する必要がある別のアプローチはありますか?

1
SQL Serverのページの期待寿命が高すぎることはありますか?
SQL ServerのPage Life Expectancyと、それが何を意味し、どのような情報からそれを収集できるかについて、いくつかの記事を読みました。私が読んだこれらの記事のほとんどでは、一般的で健全なPLE値は、約1000〜2000秒です。約300秒に達すると、RAMが少なくなる可能性があることを読んだことがあります。 最近、ハードウェアをアップグレードして、RAMを64 GBにしました(14 GBから)。14GBでは、私のPLEは約300秒で、1秒あたり5〜6回のメモリ許可が保留されていました。それで、それは悪いことであり、RAMを増やしました。今、私のPLEははるかに高く、約5000秒であり、保留中のメモリ許可はありません。思い出せば7000秒見たよ。これは私が読んだ何よりもはるかに高いです。 高いPLEは悪いことですか?それとも高いほど良いですか? 編集:すみません、私のPLEは7000秒ではなく、70,000秒でした!ただ、現時点では7000程度まで下がっています。 データベースのサイズは約160GBです。いくつかのテーブルには500万以上の行があります。 max_server_memory は2147483647に設定されています。

2
SQL Serverの累積的な更新-Windows Updateでは表示されません
可能なすべてのWindowsアップデートをWS2008R2 / SQL2012インスタンスにインストールしました。私が走るとき SELECT @@VERSION 私は得る Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) による http://sqlserverbuilds.blogspot.com/ およびMicrosoftのWebサイトでは、SQL Server 2012 SP2で利用可能な4つの累積的な更新があり、最新のビルドは11.00.9000です。 なぜWindows Updateも累積的な更新を取得しなかったのですか?手動でダウンロードしてインストールする必要がありますか?

9
エラー:SSPIコンテキストを生成できません
誰かがSQL Serverインスタンスに接続しようとすると、エラーが表示されます。 SSPIコンテキストを生成することはできません。 昨日、停電があり(この表現を英語でどう言うかわからない)、サーバーをシャットダウンする必要がありました。 答えを探して、私はこれを見つけました: SQL Server 2008の接続の問題:SSPIコンテキストを生成できません しかし、彼らは昨日までうまく機能しているので、私には役に立ちません。何も変えたくない。しかし、もし必要なら、私はそれを変えます。 Obs:サーバーを再起動できません。 編集:私の回答以来、エラーは発生していません。

1
SSRSレポートで複数値の文字を渡す方法は?
1つのデータソースから供給される3つのデータセットを含むSSRSレポートがあります。メインデータセットは、他の2つのデータセットを利用した一連のパラメーターに基づいて一部のデータを集約するストアドプロシージャです。 このレポートを強化するメインのストアドプロシージャには、4つのパラメーターがあります。1つはデータの種類のID、2つは開始日と終了日のID、3つ目は単なるフラグパラメーターです。フラグパラメーターは、VARCHAR値でもある複数のフラグ値を渡したい複数値パラメーターです。 @Flagパラメータのストアドプロシージャには、次の共通点があります。 WHERE [Flag] IN (@Flag) 次に、もちろん、SSRSレポートの@Flagパラメーターを設定して、ディメンションテーブルからそれらの@Flag値をプルしているクエリからも入力される「複数の値」を許可します。 私の問題 INT値を処理する場合、ほとんどの場合、同じ手法を使用すると機能します。ただし、文字値を処理していると失敗します。1つのフラグを選択すると、レポートは魔法のように機能します。複数のフラグを選択すると、フラグがストアドプロシージャに正しく渡されず、結果が返されません。 ストアドプロシージャで複数値フラグを直接テストする場合: WHERE [Flag] IN ('A', 'B', 'C') ストアドプロシージャは正しく動作します。したがって、問題はストアドプロシージャではなく、SSRSが複数値の値を@Flagパラメータに渡す方法です。 試したソリューション この@FlagパラメータのSSRSデータセットに次の調整を試みました。 =join(Parameters!<your param name>.Value,",") そしてこれも: =SPLIT(JOIN(Parameters!<your param name>.Value,","),",") これらはすべて単一値で機能しますが、複数値では機能しません。 ここで何が欠けていますか?

4
非常に大きいが単純なテーブルを分割または分割する必要があるのはどの時点ですか
私たちのサイトには、統計情報のためのいくつかの大きくて単純な(INT、INT、DATE)テーブルがあります。各テーブルには最大300,000,000行があり、毎日大きくなります。 ホスティングプロバイダーは、テーブルを分割またはパーティション分割することを提案しており、この推奨事項を他の場所で何度も見ました。 しかしながら... 私はこのアドバイスをSQL Serverの最大容量 -524,272テラバイトのデータベースサイズと調整し、テーブルの行は「利用可能なストレージ」によってのみ制限されます。 これらの数値に基づいて、上記の表は数百万行(10の303乗)を簡単に持つことができます。 ああ、あなたは言うかもしれませんが、能力とパフォーマンスには違いがあります。 しかし、SQL Serverのパフォーマンスに関するほぼすべての質問で、答えは「テーブルの設計とクエリの設計によって異なります」です。 それが私がこの質問をしている理由です。テーブルの設計はこれほど単純ではありません。インデックス付きIDフィールドに基づく単純なcount(*)操作であるクエリもできません。

3
ストアドプロシージャを異なるユーザーが同時に実行できる場合は、一時テーブルを使用することをお勧めしますか?
ActiveGUIDからobjectGUIDを取得するストアドプロシージャに取り組んでいます。結果を一時テーブルに格納し、他のプロセスで使用するために出力パラメーターに値を返します。SPは、さまざまなストアドプロシージャ、およびWebアプリケーションのPHP、ASP Classic、ASP.Netから呼び出されます。 私はそれをここに読んだ(一時テーブルに関して): ストアドプロシージャ内で作成された場合、それらはストアドプロシージャの完了時に破棄されます。さらに、特定の一時テーブルのスコープは、それが作成されたセッションです。つまり、現在のユーザーにのみ表示されます。複数のユーザーが#TableXという名前の一時テーブルを作成でき、同時に実行されるクエリは互いに影響しません。ユーザーは自律型トランザクションのままであり、テーブルは自律型オブジェクトのままです。サンプルの一時テーブル名が「#」記号で始まっていることに気付くでしょう。 私は行ってもいいように思えますが、私が知らない落とし穴がないことを確認するためにいくつかのアドバイスを求めたかったのです。こちらがSPです。 前もって感謝します。 CREATE PROCEDURE stp_adlookup @user varchar(100), @objectGUID varbinary(256) OUTPUT AS SET NOCOUNT ON; DECLARE @qry char(1000) CREATE TABLE #tmp( objectGUID nvarchar(256) ) SET @qry = 'SELECT * FROM openquery(ADSI, '' SELECT objectGUID FROM ''''LDAP://mydomaincontroller.com'''' WHERE sAMAccountName = ''''' + @user + ''''' '')' INSERT INTO …

2
SQL Server:特定のホスト名またはIPアドレスからのみアクセスできるユーザーを作成する方法
依存している愚かなアプリが1つあります。このアプリには、接続文字列がハードコードされています。 SQL Serverのセキュリティを高めるために、SQLユーザーをアプリ内にハードコーディングされたものと同じにしたいのですが、そのユーザーが特定のホスト(IPアドレス)からのみSQL Serverを使用できるようにしたいと考えています。

2
SQLサーバーテーブルの挿入パフォーマンスの最適化
設定 データウェアハウスでは、ファクトテーブルを20ディメンションに結合しています。ファクトテーブルには、3,200万行と30列があります。これは一時的なステージングテーブルなので、他のユーザーがテーブルを読み書きする必要はありません。ベーステーブルから10列、それぞれのディメンションから20列を選択します。ディメンションテーブルは小さい(3〜15.000行)。結合されるフィールドは、整数とnvarcharの両方です。SELECT ... INTOステートメントを使用しています。テーブルにインデックスはありません。 このクエリの実行速度は遅すぎるため、役に立ちません。 試してみたソリューション クエリの処理に時間がかかりすぎるため、次の解決策を試しました。 20の結合を5つのテーブルの4つの結合に分割します。ただし、クエリのパフォーマンスは低いままです。 外部キー列にインデックスを配置します。時間の大幅な短縮はありません。 結合条件のフィールドが整数であることを確認してください。パフォーマンスが25%向上しました。私が探しているものではありません。 select intoではなく、insert intoステートメントを使用します。データベースは単純復旧モードですが、ログファイルの増大によりパフォーマンスが低下します。 これらの調査結果から、コストの89%が表の挿入にあるという実際の実行計画を含めることにしました。その他のコストは、ファクトテーブルの8%のテーブルスキャンと、内部結合のハッシュマッチングの2%です。 ご質問 遅いテーブル挿入の考えられる理由は何ですか? 実行計画なしでこのボトルネックを特定する方法は何ですか? テーブル挿入のコストを削減するためにどのようなアクションを実行できますか?

1
ビューでの集計操作はインデックスを無視する[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 5年前休業。 シナリオ かつては、ETLプロセスに参加し、多数のサードパーティソースからのさまざまな形式のファイルの受信カタログとして機能するステージングデータベースが小さな会社にありました。EはDTSパッケージを介して処理され、監査または制御のための制御構造はほとんどありませんでしたが、「十分十分」と見なされ、すべての意図および目的はそうでした。 E部分によって提供されるデータは、少数の若くて有能なプログラマーによって開発および管理される単一のアプリケーションによる消費を目的としています。当時のデータウェアハウジング技術に関する経験や知識はありませんが、アプリケーションコードから独自のTおよびLプロセスを設定および作成しました。驚いたことに、これらの未熟なソフトウェアエンジニアは、部外者が「理想的とは言えない車輪」と呼ぶものを発明しましたが、「現在十分」を常に存在するサービスレベルとして、運用フレームワークを提供することができました。 しばらくの間、密に結合された領域ではすべてが順調で、ステージングカタログは12のサードパーティのデータをごちそうし、アプリケーションによって供給されていました。アプリケーションが成長するにつれて、その欲求も大きくなりましたが、熟練した白人の騎士の開発者がシステムを監視しているため、これらの欲求は、多くの場合、迅速に対処されました。 しかし、もちろん黄金時代は永遠に続くことはできませんでした。アプリケーションの成功によって繁栄がもたらされ、ビジネスはどんどん成長しました。それが成長するにつれて、ステージング環境とアプリケーションはそれとともに成長することを余儀なくされました。すべての警戒のために、ほんの一握りのヒーロー開発者は、現在の拡張システムを維持するのに追いつくことができず、消費者は自分のデータを受け取る資格がありました。もはやそれは彼らが必要とするもの、あるいは望んでいるものの問題ではなかったが、大衆は彼らがそれに値するだけでもっと多くを要求すると感じた。 ビジネスは盗品でいっぱいの金庫で武装して、市場に手を差し伸べ、成長し続けるシステムをサポートするのを助けるために開発者と管理者を雇いました。あらゆる精神の傭兵が会社に集まりましたが、この成長により、利用可能な専門家のガイダンスにはほとんど影響がありませんでした。新しい開発者と管理者は、欲求不満のせいですべての戦争が起きるまで、自家製のスイートの複雑さを理解するのに苦労しました。各部門はすべての問題を単独で解決しようと試み始め、お互いに取り組むよりもお互いに取り組むためにより多くのことをしました。単一のプロジェクトまたはイニシアチブは、それぞれがわずかに異なるいくつかの異なる方法で実装されます。そのすべての緊張は白い騎士の一部にとっては大きすぎることが判明し、彼らが倒れると帝国は崩壊しました。間もなく、システムは混乱状態になりました。 スパゲッティコードの悪質な約束に対するこれらの分野の変化にもかかわらず、会社は耐えました。結局のところ、それは「十分に良い」でした。 チャレンジ いくつかの政権交代と後の採用担当者の採用で、私は会社の雇用に気づきました。大戦から長い年月が経ちましたが、被害は依然として非常に目に見えます。システムのE部分のいくつかの弱点に対処し、DTSパッケージをSSISにアップグレードすることを装っていくつかのコントロールテーブルを追加できました。これらは現在、実際のデータウェアハウジングの専門家が通常の作成時に使用しています文書化されたTおよびLの交換。 最初のハードルは、値を切り捨てたり、ネイティブデータタイプを変更したりすることなく、再ロードとパージのためのいくつかの制御キーを含める方法で、サードパーティのファイルからデータをインポートすることでした。これはすべてうまくいきましたが、アプリケーションはこれらの新しいテーブルにシームレスで透過的な方法でアクセスできる必要がありました。DTSパッケージはテーブルにデータを入力し、アプリケーションによって直接読み取られます。SSISのアップグレードはQAの理由で並行して実行する必要がありますが、これらの新しいパッケージにはさまざまな制御キーが含まれ、パーティションスキームも活用します。実際のメタデータの変更だけでなく、いずれにしても新しいテーブルを完全に保証できるほど重要になる可能性があるため、新しいSSISパッケージには新しいテーブルが使用されました。 信頼性の高いデータインポートが機能し、倉庫チームによって使用されているため、実際の課題は、ステージング環境に直接アクセスするアプリケーションに新しいデータを提供することであり、アプリケーションコードへの影響は最小限(「いいえ」)です。このため、私はビューを使用することを選択しました。テーブルの名前をdbo.DailyTransactionto などに変更し、ビューdbo.DailyTranscation_LEGACYのdbo.DailyTransactionオブジェクト名を再利用します。LEGACY指定されたテーブル。これらのテーブルに含まれる長年のデータを再ロードすることはビジネスの観点からの選択肢ではないため、新しいSSISで作成されパーティション化されたテーブルが本番環境に移行するため、古いDTSインポートはオフになり、アプリケーションは新しいテーブルの新しいデータにもアクセスします。この時点で、ビューは更新され、新しいテーブル(dbo.DailyTransactionCompleteたとえば)からデータを選択できるようになります(使用できない場合はレガシーテーブルから選択します)。 実際、次のようなことが行われています。 CREATE VIEW dbo.DailyTransaction AS SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransactionComplete UNION ALL SELECT DailyTransaction_PK, FileDate, Foo FROM dbo.DailyTransaction_LEGACY l WHERE NOT EXISTS ( SELECT 1 FROM dbo.DailyTransactionComplete t WHERE t.FileDate = l.FileDate ); …

5
varcharデータ型をdatetimeデータ型に変換すると、範囲外の値が発生しました
11月に作成されたすべての行を取得する簡単なクエリを実行しようとしています。 SELECT COUNT(*) FROM dbo.profile WHERE [Created] BETWEEN '2014-11-01 00:00:00.000' AND '2014-11-30 23:59:59.997'; SMSSは次を返します: varcharデータ型をdatetimeデータ型に変換すると、値が範囲外になりました。 'Created'がdatetimeに設定されているときに、データがvarcharからdatetimeに変換される理由がわかりません。 「作成済み」が日時であることをサーバーに通知する必要がありますか?そうでない場合、なぜこのvarcharメッセージが表示されるのですか? 編集:データベースの値はでしたYYYY-MM-DD。以下の@SqlZimからの返信は、convert()を使用してSQLにdbの日付の形式を伝え、スペース文字を文字Tで置き換える必要があることを示しています。 select count(*) from dbo.profile where [created] between convert(datetime,'2014-11-01T00:00:00.000') and convert(datetime,'2014-11-30T23:59:59.997');`

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