データベース管理者

データベースのスキルを向上させ、コミュニティの他の人から学びたいデータベースの専門家向けのQ&A

2
SQLサーバーのバッチ中止エラーのリスト
SQL Serverでは、XACT_ABORTがオフの場合、いくつかのエラーが現在のステートメントを終了し(たとえば、一部のパラメーターを受け取るストアドプロシージャに不正なパラメーターの数を指定)、一部のエラーはバッチ全体を中止します(たとえば、ストアにパラメーターを指定します)パラメータを取らない手続き)。[参照]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 私が知りたいのは、どのエラーがバッチアボートであり、どのエラーがステートメントの終了であるかの明確なリストがあるかどうかです。

3
Always Onクラスターがクォーラムを失った場合はどうしますか?
私は会社のDR手順を確認していて、Always On Clusterのクォーラムを失う解決策をオンラインで探したときと比較しました。失われたクォーラムの件名に軽く触れるだけの件名クラスタリングvs.トランザクションレプリケーションvs.可用性グループに関する最初のSEの投稿を見つける前に、Googleの結果を3ページ読みました。 クォーラムを失うことは悪いことであり、可能性を減らすためのいくつかの提案がありますが、それでも起こりえます。Always Onクラスターのクォーラムの損失から回復するための最良の方法に対する、ピアレビューされた適切な回答を探しています。

1
SQL Server 2012で2つの大きな結果セットを比較する最も効率的な方法は何ですか
2つの大きな結果/行セットを比較する最も効率的な方法に対する現在のアドバイスは、EXCEPT演算子を使用することです。以下のこの自己完結型SQLスクリプトは、行サイズが大きくなる(@last値を変更する)と、非常に非効率になります。結合されたテーブルで一意のエントリを見つけようとしましたが、改善はありませんでした。 DECLARE @first AS INT, @step AS INT, @last AS INT; -- This script is comparing two record sets using EXCEPT -- I want to find additions from OLD to NEW -- As number of rows increase performance gets terrible -- I don't have to use two tables. I could …

5
シークを期待しながらスキャンを取得
SELECTステートメントを最適化する必要がありますが、SQL Serverはシークではなく常にインデックススキャンを実行します。これはもちろん、ストアドプロシージャ内にあるクエリです。 CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL AND ( @IsUserGotAnActiveDirectoryUser = …

1
ORDER BYと文字と数字の混合文字列の比較
通常は「自然に」ソートする必要がある数字と文字の混合ストリングである値について、いくつかのレポートを作成する必要があります。たとえば、「P7B18」や「P12B3」など。@文字列は主に文字と数字が交互になったシーケンスです。ただし、これらのセグメントの数とそれぞれの長さは異なる場合があります。 これらの数値部分を数値順にソートしてください。明らかに、これらの文字列値をで直接処理する場合ORDER BY、「P12B3」は「P7B18」の前に来るでしょう。 「P12」。 範囲の比較などもできるようにしたいと思い@bin < 'P13S6'ます。浮動小数点数や負の数を処理する必要はありません。これらは厳密に私たちが扱っている負でない整数になります。文字列の長さとセグメント数は、上限が固定されていないため、潜在的に任意である可能性があります。 私たちのケースでは、文字列の大文字小文字の区別は重要ではありませんが、照合に対応した方法でこれを行う方法がある場合、他の人が便利だと思うかもしれません。これらすべての最も醜い部分は、WHERE句で順序付けと範囲フィルタリングの両方を実行できるようにしたいです。 これをC#で実行している場合、それは非常に単純なタスクです。いくつかの解析を行ってアルファを数値から分離し、IComparableを実装すれば、基本的にはこれで完了です。もちろん、SQL Serverは、少なくとも私の知る限り、同様の機能を提供していないようです。 誰かがこれを機能させるための良いトリックを知っていますか?IComparableを実装し、これを期待どおりに動作させるカスタムCLR型を作成する、あまり公表されていない機能はありますか?私はまた、愚かなXMLトリック(「リストの連結」も参照)に反対していません。また、サーバーでCLR正規表現のマッチング/抽出/置換ラッパー関数も使用できます。 編集: もう少し詳細な例として、データがこのような動作をするようにしたいと思います。 SELECT bin FROM bins ORDER BY bin bin -------------------- M7R16L P8RF6JJ P16B5 PR7S19 PR7S19L S2F3 S12F0 つまり、文字列をすべての文字またはすべての数字のトークンに分割し、アルファベット順または数値順に並べ替えます。左端のトークンが最も重要な並べ替え条件です。先ほど触れたように、IComparableを実装した場合の.NETの簡単な説明ですが、SQL Serverでそのようなことを行う方法(またはその方法)がわかりません。それは確かに私がこれまでに10年ほどの作業で遭遇したものではありません。

2
可用性グループリスナー
AlwaysOn可用性グループを調べています。よく見ると、可用性リスナーグループが単一障害点であるように見えます。リスナーは実際にはどこで実行されますか?別のサーバー、プライマリSQLサーバー、それらすべて? 2番目のデータセンターにアプリケーションスタック全体があるとします。リスナーが両方のサイトで実行され、アプリケーションが独自のローカルコピーをポイントするようにリスナーを構成するにはどうすればよいですか? 私はここで何かが欠けていると確信していますが、私は何がわかりません。

2
MySQLワークベンチをMySQLコンテナーに接続する
DockerhubからMySQLコンテナーをプルし、次のように私のMacbook Proで実行しています。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12cd3deaa3f0 mysql:latest "/entrypoint.sh mysql" 47 hours ago Up 10 minutes 3306/tcp mysqldb 次に、MySQLワークベンチをダウンロードし、それをMySQLコンテナーに接続しようとしましたが、機能しません。接続エラーが表示されます。 Your connection attempt failed for user 'root' from your host to server at 192.168.99.102:3306: Can't connect to MySQL server on '192.168.99.102' (60) DockerマシンからのIPは docker-machine ip default 192.168.99.100 …

2
SQL実行プランのTOPオペレーションはなぜですか
しばらく探してみたところ、答えが見つからなかったためこの質問を投稿し、似たような質問/回答があった場合は謝罪することにしました。 同じように設定された2つのSQLサーバーで以下のクエリを実行すると、パフォーマンスに影響する異なる実行プランが発生するため、原因を特定する必要があります。 クエリ: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp サーバーAの実行計画 サーバーBの実行計画 サーバーB http://s2.postimg.org/z9fjrfv4n/server_B.png サーバーBの実際の実行計画ではTOPの物理演算があり、その理由を理解しようとしていることがわかります。両方のクエリは、インデックスシークで同じインデックスを使用します。 サーバーAとサーバーBの詳細は次のとおりです サーバーAとBは両方とも Windows Server 2008 R2 Standard Service Pack 1 24GB RAM 64ビットオペレーティングシステム (SELECT SERVERPROPERTY( 'ProductVersion'))を使用して取得したSQL Server 2012のバージョン サーバーA SQLバージョン11.0.3000.0 サーバーB SQLバージョン11.0.5058.0 私たちが試したこと プロシージャキャッシュのクリア インデックスの再構築 統計の更新 行カウントを0に設定 サーバーBの実行プランにTOPがあるのはなぜですか?この単純なクエリの例では実際の問題はありませんが、大きなクエリではTOPのコストが上昇し、パフォーマンスに影響が出ます。これをデバッグする助けがあれば大歓迎ですし、私たちはあなたが助ける必要があるかもしれない追加の情報を得ることができます。

3
Always On可用性グループ、常にユーザーを読み取り専用インスタンスにリダイレクトする
プライマリと読み取りが有効なセカンダリを持つAlways On可用性グループがあります。データベースを使用して、データベースに入れる予定のデータの正確性をチェックする実装チームのユーザーがいます。 ユーザーはデータベースから読み取る権限のみを持っていますが、AGリスナーを介して(SSMSを介して)接続する場合、常にアクティブノードに接続します。 私は彼らに直接読み取り専用インスタンスにアクセスするように試みましたが、彼らは彼らの方法で立ち往生しており、1日か2日後に彼らは再びアクティブノードに戻ってきました。 SQL Serverがこのユーザーを常に読み取り専用のインテントにして、そこにリダイレクトする方法を教えてください。 注:追加の接続パラメーターで 'ApplicationIntent = ReadOnly'を設定しようとしましたが、これはセカンダリノードにリダイレクトされないようであり、新しいスターター用に設定することを忘れるので、理想的なソリューションではありません。 SQL Server 2012 Enterprise、可用性グループ1プライマリ、同期コミット付きの読み取り可能なセカンダリ1。 ユーザーがリンクサーバーに接続したり、他のサーバーを介して接続したりするつもりはありません。ユーザーはSSMS(他のアプリケーションはありません)を介してデータベースに直接接続します。AGリスナー(またはその周辺)が利用可能であれば、そのユーザーをセカンダリノードに誘導できるようにします(読み取りアクセスしかできないため)。プライマリにアクセスしても意味がありません)ユーザーはマシンを移動し、アプリケーションインテントを追加するのを忘れるので、ユーザーは何もする必要がありません。また、それを追加の接続パラメーターに追加しても、常にセカンダリノードに移動するとは限りません。

1
SELECT COUNT()クエリ実行プランに左結合テーブルが含まれているのはなぜですか?
SQL Server 2012では、別のテーブルに結合するテーブル値関数があり、この「テーブル値関数」の行数をカウントする必要があります。実行プランを調べると、左側の結合テーブルが表示されています。どうして?左結合テーブルは、返される行数にどのように影響しますか?私は、dbエンジンがSELECT count(..)クエリで左結合テーブルを評価する必要がないことを期待します。 Select count(realtyId) FROM [dbo].[GetFilteredRealtyFulltext]('"praha"') 実行計画: テーブル値関数: CREATE FUNCTION [dbo].[GetFilteredRealtyFulltext] (@criteria nvarchar(4000)) RETURNS TABLE AS RETURN (SELECT realty.Id AS realtyId, realty.OwnerId, realty.Caption AS realtyCaption, realty.BusinessCategory, realty.Created, realty.LastChanged, realty.LastChangedType, realty.Price, realty.Pricing, realty.PriceCurrency, realty.PriceNote, realty.PricePlus, realty.OfferState, realty.OrderCode, realty.PublishAddress, realty.PublishMap, realty.AreaLand, realty.AreaCover, realty.AreaFloor, realty.Views, realty.TopPoints, realty.Radius, COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as …

1
プロファイラーなしで、クエリがロックの待機に費やした時間を表示するにはどうすればよいですか?
断続的に時間がかかるクエリを診断しようとしています。ロックを取得しようとしてブロックされている可能性があります。問題が発生している環境でプロファイラーを使用する権限がありません。 外部プロファイラーを使用せずに、この個々のクエリがブロックされている時間に関する統計を取得する方法はありますか?

1
PAGELATCH_ *待機タイプで待機しているブロックされたセッション?
編集:セッションレポートがブロックされているがPAGELATCH_*、LCK_M_関連する待機タイプではなく、で待機しているのはなぜですか? 以前は、SQLサーバーはブロッキングセッションのみをblocking_session_Id列で報告すると想定していました。ブロックされたセッションが論理ロックを待機していて、などのほかのものがなかった場合PAGELATCH_*。

2
Oracle USING INDEX句に相当するSQL Server
OracleのUSING INDEX句に相当するSQL Server 2008はありますか?具体的には、構成: CREATE TABLE c(c1 INT, c2 INT); CREATE INDEX ci ON c (c1, c2); ALTER TABLE c ADD CONSTRAINT cpk PRIMARY KEY (c1) USING INDEX ci; Sql Server Documentation on Unique Indexsには、次のように記載されています(強調を追加)。 一意のインデックスは、次の方法で実装されます。 PRIMARY KEYまたはUNIQUE制約 PRIMARY KEY制約を作成すると、テーブルにクラスター化インデックスがまだ存在せず、一意の非クラスター化インデックスを指定しない場合、列に一意のクラスター化インデックスが自動的に作成されます。主キー列はNULL値を許可できません。 これは、主キーに使用するインデックスを指定する方法があることを意味しているようです。

2
ユーザーごとのアクティブなMySQL接続を表示する
特定のユーザーに対して、特定のデータベースへのアクティブな接続数または開いている接続数を取得するクエリが必要です。私は何時間も探していましたが、今のところ何も思いつきませんでした。私は近いので、ここで私が試したことがあります。 SHOW STATUS WHERE `variable_name` = 'Threads_connected'; SHOW STATUS LIKE '%onn%'; SELECT * FROM information_schema.processlist WHERE USER='database_user'; 私はWebホスティング会社で働いており、クライアントの1つが彼のmax_user_connections限界に達し続けているため、ユーザーが共有サーバーではないため、ユーザーが現在使用している接続の数を知る必要がある理由をトラブルシューティングします。現在、MySQL(InnoDB)バージョン5.5.36を使用しています。どんな助けでも大歓迎です!

2
SSIS Excel接続マネージャーエラー0xC0209303を解決するにはどうすればよいですか?
ExcelファイルをSQL ServerテーブルにインポートするSSISパッケージを作成しました。 SSISパッケージを自分のマシンでローカルに実行すると問題なく実行されますが、パッケージがスケジュールされるサーバーで実行すると、次のエラーが発生します(テキストファイルから、SSISログを使用してエラーを出力しています)。 調査した後、私が見つけた唯一の推奨事項は、Run64BitRuntimeプロパティをfalseに設定することでしたが、それでもうまくいきませんでした。私が見つけた記事のように、エラーが64ビットに関して何も指定していないため、これが私のエラーの原因であるとは思いません。 また、サーバーに適切なExcelドライバーがないことも考えられますが、通常はエラーメッセージにドライバーが登録されていないというメッセージが表示されるため、そうではありません。 現在、サーバーへのリモートアクセスがありません。パッケージをフォルダーにアップロードするだけで、アプリケーションによって実行されるため、表示されるエラーメッセージは、作成したテキストエラーログの内容だけです。 エラーコードDTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。接続マネージャ "Envision"へのAcquireConnectionメソッドの呼び出しは、エラーコード0xC0209303で失敗しました。この前に、AcquireConnectionメソッドの呼び出しが失敗した理由の詳細を含むエラーメッセージが表示される場合があります。 "Envision"は、私のExcel接続マネージャーの名前です。 式を使用してExcelファイルパスと接続文字列を入力します。 接続文字列式は次のようになります。 "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + @ [User :: SourceFilePath] + "; Extended Properties = \" EXCEL 12.0 XML; HDR = YES \ ";" SSIS Pacakgeは、Windowsのユーザー名/アカウントによって実行されます。Webサービスアカウントの可能性があります。(BDS_sprtIIS) ローカルマシンでのみ機能するパッケージのこの問題を解決する方法に関する解決策や提案はありますか?パッケージが展開される実際のサーバーでは機能しませんか? 私は別のフォーラムで以下の回答を見つけました、それが私の問題の原因である可能性がありますか?彼らは基本的に、Excel接続マネージャーが何らかの理由でユーザーの一時フォルダーにアクセスしようとし、そのフォルダーへのアクセス権がない場合は失敗することを言っています。 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- manager-failed-with?forum = sqlintegrationservices Microsoft.JET.OLEDB.4.0ドライバーが、ログインしているユーザーのプロファイルの下にある一時ディレクトリを読み取ろうとすることにも気付きました。 。 ...下位レベルのドメインアカウントを使用してSQLエージェントを実行し、プロキシアカウントを使用してSSISパッケージを実行します。プロクモンも私のためにそれを確認したので、あなたは正しいです。プロキシアカウントにプロファイルの一時ディレクトリ(C:\ Documents and Settings …

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