データベース管理者

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

1
テーブルAをテーブルBに切り替えると、インデックスデータも切り替えられますか?
現在、かなり大きなテーブル(500〜700万行)があります。このテーブルは、ステージングテーブルのデータを構築し、ALTER TABLE .. SWITCH TO ..ステートメントを使用してデータを本番テーブルに切り替えるプロシージャによって定期的に再構築されます。 例: BEGIN TRAN; -- Rebuild indexes ALTER INDEX IX_NC_GroupEvent_staging_GroupName on [dbo].[GroupEvent_staging] REBUILD; ALTER INDEX IX_NC_GroupEvent_staging_Created ON [dbo].[GroupEvent_staging] REBUILD; -- Empty production table TRUNCATE TABLE [dbo].[GroupEvent]; -- Switch data from staging-table into production table ALTER TABLE [dbo].[GroupEvent_staging] SWITCH TO [dbo].[GroupEvent] COMMIT; この操作を実行すると、インデックス(または必要に応じてインデックスデータ)の現在の状態も切り替えられますか?私は2つの理由のために尋ねています: 1)SWITCH TOステートメントを実行するには、ソーステーブルとターゲットテーブルの両方に同じインデックスが含まれている必要があります。これにより、インデックスデータも切り替えられる可能性があると思いますが、これを確認する方法がわかりません。 2)この方法でテーブルを作成する主な利点は、使用中に本番テーブルで過度の作業を実行しないようにすることです。当然、ステージングテーブルでインデックスを再構築でき、再構築されたインデックスをテーブルと共に本番用インデックスに切り替えることができれば、とても嬉しく思います。

2
エラー:「1つ以上のエンティティがそれを使用して署名または暗号化されているため、証明書を削除できません。」
データベースから削除したい証明書があります。 コマンドを発行した場合 DROP CERTIFICATE <FooCert> エラーが出る The certificate cannot be dropped because one or more entities are either signed or encrypted using it Jason Strateによれば、証明書によって何が署名されているかを知ることができるはずです。 次のクエリは0行を返します。 SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id) FROM sys.certificates c INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE' AND …

2
2016へのアップグレード後、SQL Serverエージェントはインスタンスに接続できません
SQL Server 2014 Enterpriseを備えたクラスター化されたWindows 2012 R2サーバー。 2014 SP1 CU4から2016 RTMにインスタンスをアップグレードしただけで、SQL Serverエージェントを起動しようとするとこのエラーが発生します。 SQLサーバーエージェントログ 2016-06-06 11:53:58 - ? [100] Microsoft SQLServerAgent version 13.0.1601.5 (X64 unicode retail build) : Process ID 10884 2016-06-06 11:53:58 - ? [495] The SQL Server Agent startup service account is DOMAIN\USERNAME. 2016-06-06 11:54:28 - ! [150] SQL Server …

2
拡張イベントとSQL監査-パフォーマンスへの影響
UPDATE/INSERT非常にアクティビティの多い特定のテーブルのステートメントを監視するために、データベースに監査証跡のようなシステムをセットアップしたいと思います。私の目の前には、SQL Serverの組み込み監査システムを使用するか、拡張イベントを使用するという2つのオプションがあります。 SQL Server Auditは内部的に拡張イベントを使用するため、拡張イベントの代わりに直接監査を使用すると、ある種のオーバーヘッドがあると思います。 どのシステムがサーバーに影響を与えているかを分析するためのテストを行う方法はありますか?XEセッションが作成されたときに実際に何が起こるかを知ることができれば、サーバーへの影響を分析するのに役立ちます。 トリガーを検討し、オーバーヘッドのためにそのオプションを省略しました。しかし、それはインターネットからの情報に基づいて決定されました。

2
主キーを持つ「INTO」テーブルを作成する
たぶんこのコミュニティにとって私の問題は簡単ですが、私(単純なJavaプログラマー)にとってはそれは大きな問題です。 ますます多くのデータを含むBig DBがあります。したがって、外部データベース管理者は、一時テーブルに必要なデータを表示するジョブを作成しました。しかし、彼は主キーなしでテーブルを作成していました。私のJavaプロジェクトでこのテーブルを読みに行くと、エラーが発生します。 主キーが存在しないため、このテーブルを読み取ることができません。 この複雑なプロシージャの構造を変更せずに、自動インクリメンタル主キーを作成する可能性をプロシージャに挿入できますか? これは、ストアドプロシージャコードの始まりです。 USE [MYDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spSchedula_Scadenzario] as begin drop table MYDB.dbo.tmpTable select aa.* into MYDB.dbo.tmpTable from (...) 前もって感謝します

2
複数のストアドプロシージャで同じコード
最近入社しましたが、多くのストアドプロシージャに同じコードセクションが繰り返し含まれていることに気づきました。発生したすべてのSPでそのコードの小さなセクションを変更する必要があったので、気が付きました:) これはかなり大きなコードの塊で、約30行です。コードはinsertステートメントの一部であり、基本的には4つのテーブルをWHERE/AND、SP間で実際に変更されない条件と一緒に結合します。以下のようになります。 ... ... FROM <TableOne> INNER JOIN <TableTwo> ON ... AND ..... AND ..... LEFT JOIN <TableThree> ON ... AND ..... AND ..... WHERE ..... AND ..... AND ..... AND MedicalPlanCode IN ('abc', 'def', 'ghi') SPからSPに変更される唯一の部分は値('abc'、 'def'、 'ghi')です。 また、これらの値の量が異なる場合があるため、一部のSPには2つの値があり、他のSPには5つの値があります。 私が考えるすべてのことは、コードのそのセクションを動的SQLに変更し、それが価値があるかどうかはわかりません。しかし、私のプログラマはこの状況を嫌っています。 なんらかのコードの再利用を実装する必要がありますか?ROIはありますか?私のオプションは何ですか?約100のストアドプロシージャを実行する必要があり、約1時間かかりました。 100個のSPは、20以上の異なるデータベースに分散しています。ビューを作成する権限があります。

2
[0-9]は数字、[az]は文字のように、句読点に相当するT-SQLはありますか?
句読点を含む列から値をプルできるようにする[0-9]および[a-z]パターンに相当するT-SQLはありますか? 例えば: Create Table #Test ( Value VarChar(10) ) Insert Into #Test Values ('123a'), ('456b'), ('12ABC'),('AB!23'),('C?D789') Select * From #Test Where Value like '[0-9][0-9][0-9][a-z]' これは、最初の3文字が0から9までの数字で、最後の文字がaからzまでの文字である値を返すため、123aおよびなど456bの値を返しますが、の値は返しません12ABC。 句読点に相当するもの[0-9]が数字や[a-z]文字にあるかどうか知りたいので、返さAB!23れC?D789ますか? 正規表現を使用できる場合^[a-zA-Z0-9]*$、文字列内の英数字に一致する表現を使用する可能性があります。 Where Value like '^[a-zA-Z0-9]*$' これに相当するSQLはありますか? RegExで実行できるこの種のことは知っていますが、T-SQLでそれが必要です。このサーバーにカスタムアセンブリをロードできないため、正規表現を使用できません。 実際の列はvarchar(200)です。照合順序は、Latin1_General_CI_ASです。SQL Server 2012 Standard Editionを使用しています。

1
CMSサーバーリスト内の大文字と小文字を区別する順序
これには理由があると信じなければなりませんが、私の人生ではそれを理解することはできません。中央管理サーバー内のサーバー名の順序は、CMSとして機能するサーバー自体の照合に関係なく、大文字と小文字が区別されます。 添付されているのは、ローカルマシンでホストされているCMSの例で、SQL_Latin1_General_CP1_CI_ASのサーバー照合で構成されています。CIは大文字と小文字を区別しません。CMSオブジェクトを保持するシステムテーブルから選択すると、適切な順序が返されますが、このスクリーンショットでわかるように、サーバーがUIに一覧表示される方法では、順序が大文字と小文字を区別して処理されていることは明らかです。 サーバーレベルに関連していないようなので、クライアントツールに関連していると思いますが、これに影響を与える照合レベル(または大文字と小文字の区別の設定)を特定できるツール内の場所はありません。 明らかにこの質問について重要なことは何もありませんが、UIで大文字と小文字を区別しないようにする方法を誰かが知っている場合は、順序を乱すサーバー名をキャメルケースにしたいので、私はそれを感謝します。

2
シングルユーザーから「REQUIRE SSL」を適切に削除するにはどうすればよいですか。
次のようにして、1人のユーザーにREQUIRE SSLを許可しました... mysql -u"${targetMySqlUser}" -p"${targetMySqlPass}" -e "GRANT USAGE ON dbname.* TO 'dbusername'@'%' REQUIRE SSL;" しかし、ユーザーからこのフラグをREMOVINGまたはREVOKINGして、取り消しを使用すると失敗します。私は構文と戦っているようです。権限全体を取り消さずに、「取り消し」コマンドでそれを削除する適切な方法はありますか? MySQL 5.5マニュアル、このサイト、およびインターウェブは、適切な反対方向を見つけるのにまだ役立ちませんでした。 このSQLステートメントは機能します。 UPDATE mysql.user SET ssl_type = '' WHERE ssl_type = 'any' ; FLUSH PRIVILEGES; しかし、私はどこにあると信じてGRANT REQUIRE SSL、私がしなければならないREVOKE REQUIRE SSL、ありませんか?

1
ハイパースレッディングを無効にする必要がありますか
背景はかなり密接にプロセッサの活動を監視するために、SQL歩哨を使用して私を持っていた私は最近、最近、いくつかのかなり高いCXPACKETの待ち時間に見てきました。 結果として気づいたことの1つは、コンテキストの切り替えに大きなスパイクがあることです。以下は5分のサンプルですが、このパターンは1日を通して非常に一般的です。 あなたが見ることができるように、それはかなり定期的に急上昇します。これについての私の理解は、これがCPUのプレッシャーの結果であると信じるようになります。しかし、その間、かろうじて60%を超えます。 いくつかの調査の結果、これはハイパースレッディングの結果として発生していると私に思わせました。ハイパースレッディングの危険のいくつかを以前に読んだことは知っています。しかし、それはかなり前に書かれました。 長い話を短くします。ハイパースレッディングは、コンテキストの切り替えにおけるこのスパイクの原因である可能性がありますか?コンテキストの切り替えが並列クエリに悪影響を及ぼしている可能性はありますか?私の環境ではハイパースレッディングを無効にする必要がありますか? 更新この特定のことが私の環境で起こっていますが、その核心にある質問はより普遍的です。高レベルのコンテキスト切り替えは、並列クエリにどの程度影響がありますか?ハイパースレッディングはこの種の問題を引き起こす可能性がありますか? 最終的に私がインターネットで見つけたもののほとんどは、ハイパースレッディングとSQL Serverは良い友達ではないことを示唆していますが、ほとんどの場合、その情報は非常に古いものです。 私のシステム構成に関する質問がたくさんあったので、それらを除外できるようにここで取り上げます。OSとbioの両方のレベルでパフォーマンスの電源設定があります。Maxdopは8に設定され、並列処理のコストしきい値は25です。32の論理コアと16の物理コアがあります。また、これは大部分がデータウェアハウスの負荷シナリオです。

3
予期しないCASE評価ロジック
CASE前のステップが真であると評価された場合、後続のステップの評価は行われないという点で、ステートメントは「短絡」原理に基づいて機能することを常に理解していました。(この回答は、SQL Server CASEステートメントがすべての条件を評価するか、最初のTRUE条件で終了しますか?は関連していますが、この状況をカバーしておらず、SQL Serverに関連しています)。 次の例でMAX(amount)は、開始日と支払い日の間の月数に基づいて異なる月の範囲の間を計算したいと思います。 (これは明らかに構築された例ですが、ロジックは、私が問題を見る実際のコードで有効なビジネス推論を持っています)。 開始日と支払い日の間の期間が5か月未満の場合は、式1が使用されます。それ以外の場合は、式2が使用されます。 これにより、「ORA-01428:引数 '-1'は範囲外です」というエラーが発生します。これは、1つのレコードに無効なデータ条件があり、ORDER BYのBETWEEN句の開始が負の値になるためです。 クエリ1 SELECT ref_no, CASE WHEN MONTHS_BETWEEN(paid_date, start_date) < 5 THEN -- Expression 1 MAX(amount) OVER (PARTITION BY ref_no ORDER BY paid_date ASC ROWS BETWEEN MONTHS_BETWEEN(paid_date, start_date) PRECEDING AND CURRENT ROW) ELSE -- Expression 2 MAX(amount) OVER (PARTITION BY ref_no ORDER …
8 oracle 

3
sys.schemasおよびsys.synonymsに対するクエリの実行が1人のユーザーに対して非常に遅い
シナリオ:SQL Server 2014(v12.0.4100.1) .NETサービスはこのクエリを実行します。 SELECT name, base_object_name FROM sys.synonyms WHERE schema_id IN (SELECT schema_id FROM sys.schemas WHERE name = N'XXXX') ORDER BY name ...約6500行を返しますが、3分以上経過するとタイムアウトすることがよくあります。XXXX上記はありません「DBO」。 SSMSでこのクエリをUserAとして実行すると、クエリは1秒未満で返されます。 UserB(.NETサービスの接続方法)として実行すると、クエリは3〜6 分かかり、CPU使用率は(4コアの)25%になります。 UserAは、sysadminロールのドメインログインです。 UserBはSQLログインです。 EXEC sp_addrolemember N'db_datareader', N'UserB' EXEC sp_addrolemember N'db_datawriter', N'UserB' EXEC sp_addrolemember N'db_ddladmin', N'UserB' GRANT EXECUTE TO [UserB] GRANT CREATE SCHEMA TO [UserB] …

3
InnoDBテーブルの複合セカンダリインデックスの最後の列として主キーを持つことは何をしますか?
たとえば、1対Nの関係があるとし(person_id, pet_id)ます。pet_idが主キーであるテーブルがあります。 InnoDBセカンダリインデックスは基本的にBツリーであり、値は行の対応するプライマリキー値であると理解しています。 さて、一人の人が何千ものペットを持つことができ、私はしばしば人のペットをの順にしたいとしpet_idます。次に、セカンダリインデックスのレコードが並べ替えられている(person_id, pet_id)か、並べ替えられていないためのだけperson_idであるかが重要になります。後で推測。pet_idperson_id では、person_idが一意でない場合、レコードは、(person_id, pet_id)またはJUST によって物理的にソートされていpet_idますか? ありがとう

1
ネストされたループの統計I / Oを設定する
以下のクエリを考えてみましょう: CREATE PROC dbo.GetPage @orderid AS INT = 0, -- anchor sort key @pagesize AS BIGINT = 25 AS SELECT TOP (@pagesize) orderid, orderdate, custid, empid FROM dbo.Orders WHERE orderid > @orderid ORDER BY orderid; exec GetPage 25,25 上記のクエリに対してSET STATISTICS IOが返されました: (25 row(s) affected) Table 'Orders'. Scan count 1, logical …

1
この状況で、テーブル変数がクエリのパフォーマンスをどのように向上させているのですか?
この特定のケースでは、以下で説明しようとしますが、テーブル変数を使用すると、テーブル変数を使用しない場合よりもパフォーマンスが向上します。 理由を知りたいのですが、可能であれば、テーブル変数を削除します。 これは、テーブル変数を使用したクエリです。 USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …

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