データベース管理者

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

1
IO_STALLの質問と理解
5分ごとにsys.dm_io_virtual_file_statsからIO_STALLSを収集してから、デルタを実行して、IOの影響を最も受けているファイルを確認しています。 1つの5分の期間で、5826331ミリ秒のデルタ、つまり97分が得られます。 私はこれに少し混乱しています。これは、97分前に開始された操作がその時点で終了し、その待機時間を記録したということですか? ありがとう 要求に応じてコードを追加: /* USE [SysDBA] GO */ /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* DROP TABLE [dbo].[DISKIOPS] GO */ --Create the table /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO …

2
デフォルトのトレースは有効ですがアクティブではありません
デフォルトのトレースの構成を照会すると、有効になっていることが表示されます。 exec sp_configure 'default trace enabled'; --> name minimum maximum config_value run_value default trace enabled 0 1 1 1 しかしsys.traces、パスを照会すると、空の行セットが返されます。 select * from sys.traces; 有効なトレースが存在しない理由は何ですか?

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)

2
MySQLレプリケーション:「PRIMARYキーの重複したエントリ」
完全に再同期した後、スレーブサーバーで「PRIMARYキーの重複したエントリ」が表示される理由を教えてください。 基本的に、「mysqldump」はほぼ一晩実行されていたため、復元プロセスには数時間かかったので、スレーブを起動したとき、マスターから約63874秒遅れていました。 スレーブサーバーは読み取り専用(read_only)であり、再同期プロセス中に書き込みがなかったため、重複したキーがある理由がわかりません。 マスターでバイナリログ形式がMIXEDに設定されています。 DBのバックアップに使用されるコマンド: mysqldump --opt --single-transaction -Q --master-data=2 db | bzip2 -cz > db.sql.bz2 スレーブは、次のオプションを使用して、マスター(db-> db_backup)から1つのデータベースのみを複製します。 replicate-wild-do-table = db_backup.% replicate-rewrite-db = db->db_backup

2
すべてのテーブルへの読み取りアクセスを許可するデータベースロールを作成します。一部への書き込みアクセス
1000以上のテーブルを持つデータベースがあります。すべてのテーブルの読み取り専用と、2つの特定のテーブルへの書き込みアクセスを許可するロールを作成する必要があります。 私はデータベースロールをいじくり回していましたが、テーブルを追加しようとするたびに、すべて1000を手動で選択する必要がありました...これを行うより良い方法はありますか?

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です。前進するためにそれらを縮小する必要があるものを決定する上で最良のアプローチは何ですか?そんなに大きくしたくないのは明らかです。または、時間の経過とともに自然に縮小しますか(そうなるとは思いません)?

3
Oracle 11をすばやく起動/シャットダウンする方法
Oracle DBデーモン(テストマシンにインストールされたOracle 11.2)を適切に起動/シャットダウンする最も速い方法は何でしょうか。 OCI / Pro * C APIを使用するC / C ++プログラムに必要です。 PostgreSQLの起動速度に慣れており、デーモンがテストケースでのみ(オンデマンドで)起動される仮想マシンで実行されるため、これが必要です。 現在私はそれをこのようにスクリプト化しています-スタートアップ: sqlplus /nolog <<EOF connect / as sysdba startup quit EOF lsnrctl start emctl start dbconsole そしてシャットダウン: emctl stop dbconsole lsnrctl stop sqlplus /nolog <<EOF connect / as sysdba shutdown quit EOF これは機能します-プログラムは期待どおりに機能しますが、この手順は非常に低速です。 Oracle DBはCentOS 6.3で動作し、無料(ビールのまま)の「標準バージョン」です。

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

3
非Unicode文字列をUnicode文字列SSISに変換する
データベースからデータを空のExcelファイルにエクスポートするパッケージを作成しています。ソースコンポーネントと宛先コンポーネントのみを追加してパッケージを実行すると、出力列と列 "A"はUnicodeと非Unicodeの文字列データ型の間で変換できないという変換エラーが発生しました。 これを修正するために、データ変換コンポーネントを追加し、すべての列を 「Unicode文字列[DT_WSTR]」 エラーはもう発生しません。唯一の問題は、約50列あり、1つずつ移動して、ドロップダウンリストから[Unicode String [DT_WSTR]]を選択する必要があることです。次に、宛先コンポーネントに移動し、新しく変換された列をExcelファイルにマップする必要がありました。 私の質問は、他の誰かがこれに遭遇した場合、すべての手動の​​データ型変換を行わなければならないより効率的な方法はありますか?すべての列を1つずつ変換してマップする必要があるのは、特に行数が多い場合は現実的ではないようです。 Excelファイルはデータのインポートとエクスポートに最適な方法ではないことを理解していますが、この特定のケースではExcelファイルが必要です。 フラットテキストファイルにエクスポートして、パッケージの最後のステップとしてExcelに変換する方法を探す場合があります。私はこれが同じユニコード/非ユニコード変換エラーを引き起こさないことを期待しています。

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

2
2つの関連する「多数」のテーブルがあるテーブルの結果をフラット化する方法は?
データベース内のいくつかのテーブルをより柔軟に再編成しましたが、SQLを記述してそこから意味のあるデータを抽出する方法がよくわかりません。 次の表があります(より明確な例のために多少省略しています)。 CREATE TABLE Loans( Id int, SchemaId int, LoanNumber nvarchar(100) ); CREATE TABLE SchemaFields( Id int, SchemaId int, FieldName nvarchar(255) ); CREATE TABLE LoanFields( Id int, LoanId int, SchemaFieldId int, FieldValue nvarchar(4000) ); 次のデータで: INSERT INTO Loans (Id, SchemaId, LoanNumber) VALUES (1, 1, 'ABC123'); INSERT INTO SchemaFields (Id, SchemaId, …

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