データベース管理者

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


1
ログ配布SQL Server 2012
私はDBAがいない小さなショップの開発者で、SQL Server 2012を使用してログ配布を取得しようとしています。トランザクションシステムから新しいデータウェアハウスにレポートの負荷を軽減しようとしています。このデータベースをステージング領域として使用します。 ログ配布ウィザードを実行したところ、主要なバックアップジョブとファイルコピージョブが毎回機能しました。セカンダリリストアジョブがランダムに失敗するようです。 プライマリサーバーには、1つのトランザクションログジョブしかありません。差分バックアップは無効になっています(問題かどうかは不明です)が、完全バックアップがあります。 セカンダリサーバーは、メンテナンスプラン、バックアップ、またはアクティブユーザーのいないフレッシュインストールです。 バックアップを強制的に同期させる方法はありますか、または常に同期を維持することを保証しますか? とても壊れやすいようです。お知らせ下さい。 以下の編集ログ: *Starting transaction log copy. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' Retrieving copy settings. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' Retrieved copy settings. Primary Server: '', Primary Database: 'db', Backup Source Directory: '\\server\folder', Backup Destination Directory: '\\server\folder', Last Copied File: '\\server\folder\db_20160105070002.trn' Starting transaction log restore. Secondary ID: 'b58d7ce8-2fd7-4cec-b5bd-f3c5e5d3c0f7' …

2
サイズ5kの行を更新するときの8k行オーバーフローエラー
サイズが5kの行が1つあるターゲットテーブルも、サイズが5kの行に更新しようとしています。 1行なので、行の実際のサイズを簡単に知ることができます。 select * from sys.dm_db_index_physical_stats(DB_ID('RODS_HSD_ES'), OBJECT_ID(N'TBL_BM_HSD_SUBJECT_AN_148_REPRO'), NULL, NULL, 'DETAILED') 再現する テーブルは作成以来変更されていません。失敗する理由はありません。アイデア?

3
WHERE句を更新して、値が別のテーブルにないかどうかを確認する
私が使用するクエリ持っているWHERE句を、と私は起こるまったく同じ使用することWHEREで句多く、このテーブル上のクエリ(ら)。 クエリは次のとおりです。 SELECT DATENAME(DW, [AtDateTime]) AS [Day of Week] ,COUNT(*) AS [Number of Searches] ,CAST(CAST(COUNT(*) AS DECIMAL(10, 2)) / COUNT(DISTINCT CONVERT(DATE, [AtDateTime])) AS DECIMAL(10, 2)) AS [Average Searches per Day] ,SUM(CASE WHEN [NumFound] = 0 THEN 1 ELSE 0 END) AS [Number of Searches with no Results] ,CAST(CAST(SUM(CASE WHEN [NumFound] …

2
インデックスではない列は、インデックスとともにディスク上でソートされていますか?
インデックスではないカラムは、MySQL、MyISAM、InnoDBで、インデックスと一緒にディスク上でソートされますか? 私が書き始めた誤った考え: それらは索引付けされていないので、おそらくそうではないと思います。それらがソートされた場合、それらはインデックスであることを意味します。 すべてのインデックス列が独自のコンテンツの順序で並べ替えられているため、これは正しくありませんが、対応するインデックスを持つすべての行(または一部の列のみ)の順序付けについて質問しています。 説明すると、これは、インデックスによって並べて並んでいる行の範囲をより速く選択するのに役立ちます。たとえば、select * where id >1000 and id<2000(MySQL構文に誤りがある可能性があり、よくわからない)場合、おそらく1000から2000までのセルが物理ディスク上に残っているため、id列自体をディスクからすばやく読み取ることができます。 。ただし、ID 1000から2000に対応する他の列の内容は、物理ディスク上の別の場所に書き込まれる場合があります。それらもソートされている場合、より速く読み取られます。おそらく、MySQLはそのような操作のパフォーマンスのために、物理ディスク上の列を自動的にソートします。 それらは他のタイプのデータベース(PostgreSQLなど)でソートされていますか? 12月27日:2つの回答から、クラスター化インデックス/主キーがある場合、単純な行自体が物理ディスク上でソートされていない可能性があります(私が思ったように)、クラスター化インデックスでさえもソートされていない、それがbツリーである場合、私はbツリーについて読み、そのノードが、私が理解しているように、ディスク上のランダムな場所に留まっていることを確認しました。

2
パーティション化するかしないか?
SO、外部ブログ投稿、マニュアルに関するいくつかの質問をすでに読んだことがある SO:Pgのパーティションテーブルへの外部キー制約 dba.SE:PgのパーティションテーブルへのFKのさまざまな処理方法 マニュアル:継承 マニュアル:パーティショニング 手動:制約トリガー ブログ:継承によるPostgresモデリング それでも、自分のケースを考慮してパーティション分割を行うべきかどうか疑問に思っています。 ケース-簡略化 顧客データの保存。下記の表の名前はすべて、わかりやすくするために作成されています。 顧客によって識別可能で非物理的な存在であるオブジェクト、およびオンデマンドで顧客にオブジェクトを送り返す必要がある場合にオブジェクトが実際に格納される物理オブジェクト、または他の方法でオブジェクトを処理する。それらは多対多の関係でマッピングされます。objects_nonphysical、objects_physical、objects_mapping_table。 2番目の多対多の関係は、これらの非物理オブジェクトとそのメトリックの間です。いくつかのメトリックにバインドされているオブジェクトがあります。metrics、metrics_objects_nonphysical 非物理オブジェクトと物理オブジェクトの両方に、子と親の関係である階層テーブルがあります。objects_nonphysical_hierarchy、objects_physical_hierarchy 各顧客のニーズと要件に応じて、物理オブジェクトに関するデータを提供することも、ゼロから作成する必要がある場合もあります。基本的に、私がする必要があるのは: 高速のための社内体制の維持INSERTおよびSELECTマッピングが場所を取るために起こっているのはここであるため、ステートメントを。 外部顧客が非物理オブジェクトを表示および操作できるようにシステムを維持します -データの高速検索。ステートメントの効率に対する強いニーズSELECT -このデータは、多くの顧客がいつでも検索できるようになっています。 私の配慮 データにアクセスし、データを表示して操作する顧客がいる可能性がありますが、それは、データを取得したり、データを処理している請負業者である必要はありません。 これにより、システムにテーブルパーティション分割を導入し、どのパーティションデータが該当するか(請負業者のパーティション分割)を常に把握していることを考慮し、次に、顧客のパーティション分割が必要な外部顧客向けのメインテナンスシステムに進みました。(これは、自動化ツールと一連のルールを使用して顧客の方法でデータを書き換えるのを遅らせるため、顧客ごとにテーブルごとに1つのパーティションのみをスキャンします。 データ量 特に新しい顧客のオブジェクトとメトリックをインポートする場合、私のデータは常に増加します。システムに到着する新しいデータのペースは、長期的に見て現時点では予測できません。誰が次の顧客になるかがわからない場合、実際に測定する方法はありません。現在、2つの顧客があり、各テーブルのすべての顧客に対して100万行が多かれ少なかれあります。しかし、将来的には、新規顧客の数が1,000万人になると予測しています行程度になるています。 ご質問 これらの質問はすべて互いに関連しています。 ここでパーティショニングを本当に考慮すべきですか、それとも過剰ですか?私は常に正確に1つをスキャンしているので、それは役に立つと考えていますパーティションを。 パーティショニングがFK最適な方法である場合、自分のニーズを考慮して最も効果的に制約を適用するにはどうすればよいですか?私は行くべきconstraint triggersですか、それとも内部システムのアプリケーション層に保つべきですか、それとも他の方法でしょうか? パーティショニングがうまくいかない場合、何に飛び込むべきですか? 十分なデータが提供されていない場合は、下のコメントでお知らせください。

2
透過的なデータ暗号化
SQL Server 2008でTDEを構成する際のベストプラクティスはありますか?SQLMagの記事「透過的データ暗号化に関するFAQ」では、CPUの使用率が最大30%増加した可能性があるとありますか? サーバーの処理能力を追加する以外に、TDEをオンにするときにDBAが通常行うことは他にありますか?

2
ADODB.Connectionを使用した、TLS 1.0を使用しないSQL Server 2014へのクラシックASP接続
PCIコンプライアンスという名目でTLS 1.0が無効になっているため、32ビットのクラシックASPアプリケーションを動作させることができません。 MS / Stack Exchangeの推奨事項に従って、私はインストールしました: SQL Server 2014 SP1 CU1 .NET Framework 4.6 これにより、ASP.NETアプリケーション/ SSMSが実行されます。しかし、ADODB.Connectionオブジェクトを使用するクラシックASPアプリケーションは機能しません。 を使用する接続文字列を試しましたがProvider=SQLNCLI11;、それも役に立たないようです。共有メモリプロバイダーは、パイプの反対側に何もないことに不満を抱いています。エラーメッセージ: Microsoft SQL Server Native Client 11.0エラー「80004005」 共有メモリプロバイダー:パイプの反対側にプロセスはありません。 また、接続文字列で名前付きパイプを使用してみたところ、Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;次のエラーメッセージが表示されました。 Microsoft SQL Server Native Client 11.0エラー「80004005」 名前付きパイププロバイダー:パイプの反対側にプロセスはありません。 注意が必要なADODBのパッチはありますか?名前付きパイプを他の方法などで使用することを検討すべきですか?(ただし、TLS設定に関係なく、共有メモリが機能しない理由については少し困惑しています) コメントからの更新: WebサーバーとSQL Serverは同じボックスにあります。 これはSQLExpress名前付きインスタンスです。TLS 1.0を有効にして動作する接続文字列は次のとおりです。 "Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;" 私も試しました: "Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;" TLS …

1
条件付きの一意の識別子フィールド
私は稼働していないデータベースを持っているので、メインテーブルはCustodyDetailsで、このテーブルにはID int IDENTITY(1,1) PRIMARY KEY列があり、他のテーブルで参照されていない別の一意の識別子を追加する方法を探しています。アカウントの内容は、正確にはIDキーではありません。 ただし、この新しいID列にはいくつかの具体的な詳細があり、ここから問題が始まります。フォーマットは次のとおりです。XX/YYどこXXはリセットが/すべての新しい年に再起動することを自動incrementable値であり、YYは現在の年の最後の2桁ですSELECT RIGHT(YEAR(GETDATE()), 2)。 したがって、たとえば、レコードから開始日追加されたふりをすることができます1 28/12/2015終了2016年3月1日には、カラムは次のようになります。 ID ID2 DATE_ADDED 1 1/15 2015-12-28 2 2/15 2015-12-29 3 3/15 2015-12-30 4 4/15 2015-12-31 5 1/16 2016-01-01 6 2/16 2016-01-02 7 3/16 2016-01-03 フロントエンドを使用してコンポジットID(例ではID2)を解析し、最後の2桁を取得して現在の年の最後の2桁と比較し、新しい相関を開始するかどうかを決定することを考えました。もちろん、データベース側でそれをすべて実行できることは素晴らしいことです。 編集1:ところで、私は人々が並列のIDキーを格納するためだけに別々のテーブルを使用しているのを見たので、1つのテーブルのIDキーは2番目のテーブルのセカンダリキーになります、これは少しおかしな話に聞こえますが、おそらくこれはそのような実装が行われるケースですか? 編集2:この追加の IDは、すべてのファイル/レコードにラベルを付けるレガシードキュメント参照です。私はそれをメインIDの特別なエイリアスと考えることができると思います。 このデータベースが毎年処理するレコードの数は、過去20年間で100を超えていません。もちろん、99を超えるとフィールドでできることはほとんどありません(実際には、非常に非常に)。追加の桁で続行すると、フロントエンド/手順は99を超えることができるため、状況が変わることはありません。 もちろん、最初に言及しなかったこれらの詳細の一部は、特定のニーズに合わせてソリューションの可能性を絞り込むだけなので、問題の範囲をより広く保つことを試みました。

3
同じデータベースの別個のOracle rmanアーカイブログバックアップを同時に実行することで潜在的な問題はありますか?
このシナリオでは、RMANアーカイブログのバックアップが2時間ごとにテープ(TSM)にスケジュールされます。スケジューリングにより、このようなバックアップは相互に排他的な方法で実行されます。独立したcrontabベースのメカニズムが(無関係なチームによって)導入され、その結果、「同一の」RMANアーカイブログバックアップが同時に実行される場合があります。 後続の復元操作に関して、これに潜在的な問題はありますか?
8 oracle  rman 

2
SQL Server Witnessのバージョンは重要ですか?
ミラーよりもSQL Serverのバージョンが高いミラーセットアップでSQL Serverの監視を使用できますか? つまり。ミラーはSQL Server 2012 Standard上にあり、ミラーリング監視サーバーはSQL Server 2014 Expressを使用しています。

2
postgresqlの複数のレコードタイプのgenerate_series
私は、クエリにしたい2つのテーブルがありますpest_countsし、pestsどのように見えます: CREATE TABLE pests(id,name) AS VALUES (1,'Thrip'), (2,'Fungus Gnosts'); CREATE TABLE pest_counts(id,pest_id,date,count) AS VALUES (1,1,'2015-01-01'::date,14), (2,2,'2015-01-02'::date,5); postgresを使用generate_seriesして、日付シリーズで見つかった各タイプの害虫の数を表示します。 予期された結果 name | date | count -------------+------------+------- Thrip | 2015-01-01 | 14 Thrip | 2015-01-02 | 0 .... Fungus Gnats | 2015-01-01 | 0 Fungus Gnats | 2015-01-02 | 5 ... 次のようなものが必要になることはわかっていますが、残りの方法が正確にわかりません。 SELECT …

1
スタンバイファイルなしでスタンバイ/読み取り専用からSQLデータベースを回復できますか?
「スタンバイファイル」がない場合、SQLデータベースをスタンバイ/読み取り専用モードから回復する方法はありますか? (ログ配布シナリオでこれをTUFファイルと呼ぶ参照がいくつかありますが、私の場合、それは手動の復元であり、スタンバイファイルにはBAK拡張子が付いていました。) 「RESTORE DATABASE foo WITH RECOVERY」を実行すると、致命的なエラーが発生します。 During startup of warm standby database 'foo', its standby file ('path\filename.bak') was inaccessible to the RESTORE statement. The operating system error was '5(Access is denied.)'. Diagnose the operating system error, correct the problem, and retry startup. 復元は少し前に行われましたが、残念ながらスタンバイファイルはバックアップフォルダーにあり、フォルダーのクリーンアップルーチンによって削除されました。他のメディアにはファイルのコピーはありません。この時点まで復元するために使用された元のバックアップもなくなりました。 幸い、これは私たちにとって大した問題ではありませんが(一時的な復元でした)、「このファイルを削除しないでください」以外に、この質問に関して他の有用な参照を見つけることができませんでした。 それが原因である場合は、データベース全体をスクリプト化するか、SSISを使用してすべてのオブジェクトを新しいデータベースコンテナーにコピーできると思います。目の前にデータベースの読み取り専用コピーがあるからです。 この問題を修正する方法はありますか?「復元」に戻して、その後の復元などを続行できるとは思いませんが、現在の状態で通常のオンラインモードに強制的に切り替えて、アクセス許可の変更、回復モードの変更、新しい完全バックアップなどを実行します。

3
複数の結合を使用したクエリのチューニング
私はこのクエリを持っています.. 214実行/分、44.42平均CPU(ms)はそれをはるかに速くする方法があります SELECT P.Id id0, P.ProgramId ProgramId1, P.ProgramName ProgramName2, P.ProgramLevel ProgramLevel3, P.Department Department4, P.Track Track5, P.AcademicYear AcademicYear6, P.StartTerm StartTerm7, P.Delivery Delivery8, P.Fee Fee9, P.City City10, P.STATE State11, P.StartDate StartDate12, P.Deadline Deadline13, P.DeadlineDisplay DeadlineDisplay14, P.ProgramType ProgramType15, O.Id as OrganizationId16, O.NAME OrganizationName17, P.ApplicationType ApplicationType18, P.Concentration Concentration19, P.ZipCode ZipCode20, P.Campus Campus21, P.WADisplayName WADisplayName22, …

2
新しいデータセンターへのデータベースの移動
私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップが私たちのニーズに最適であるように見えます。 詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。 トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか? 私の計画: (完了)現在のデータベースとログを新しいサーバーに転送し、SQL Serverの新しいインスタンスにアタッチします 開発データベースマシンでディストリビューターをセットアップし、本番データベースからそれに発行します。 毎晩1回、ディストリビューターからプッシュされる更新を受け入れる新しいデータベースマシンでサブスクライバーを作成します。 私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryのセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。 そして一般的に、私はこれらの概念を正しく把握していますか?

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