データベース管理者

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

3
SQL Server CDCでの変更の日時のキャプチャ
そこで、本番データベースの1つで変更データキャプチャを使用して調査を開始しました。各変更の日時を知りたいのですが。ウォークスルーやチュートリアルなどを読むと、標準的なアプローチは、LSNを使用してcdc.lsn_time_mappingシステムテーブルに関連付けることです。このアプローチは機能しますが、1日に数十万の変更について話す場合、それほど単純ではなく、効率的でもありません。 テスト環境で、変更トラックテーブルに次の調整を行いました。ALTER TABLE末尾に列を追加するステートメントを発行し、[__ChangeDateTime]それをデフォルト値にしましたGetDate()。アプローチは機能しているようですが、変更の追跡は引き続き正常に機能し、日時が取得されています。 しかし、システムテーブルをいじくり回すと、少し緊張します。 これがMicrosoftが最初から追加したシステムフィールドでない場合は、理由があったはずです。代わりに、LSNからcdc.lsn_time_mappingへのアプローチを選択したので、この方法で独自のハックを作成することで、問題に備えていますか? 更新: テスト中にGetDate()が時々私たちのニーズに対して十分に正確ではないことが発見されました-同じ時間を共有する複数の変更。sysdatetime()およびdatetime2を使用して値をナノ秒に移動することをお勧めします。2008+のオプションのみ明らかに。

3
SQL Server Management Studio Expressをスタンドアロンでインストールできますか?
リモートデータベースに接続するために、SQL Server Management Studio Express(主にMicrosoft SQL Server用)がスタンドアロンマシン(SQLサービスやその他のものなし)にインストールされているかどうか疑問に思っていましたか? SQL Server 2012を実行しています。特定のユーザーがクエリを実行したり、データベースを更新したりするためのWeb UIを作成することを望んでいると、マネージャーの1人から言われました。これは私のPHPの能力の範囲内です。しかし、私は簡単にするために考えていました。サーバー管理者には多くの時間を要しますが、データベースに接続/管理するためにSMSEをネットワークマシンにインストールするので、Web UIの必要性をなくすことができますか? これは可能ですか?または、スキーマやテーブルなどを表示するWebUIを作成するという面倒なタスクを実行する必要があります。

3
SQL Serverのクラスター化インデックスとOracleのインデックス構成テーブル
私はSQL ServerからOracleへのデータベース開発者としての移行を行っており、ここですでに素晴らしいリソースを見つけました( OracleへのSQL ServerのDBAからの移行を行うためにどのように?とDBAとして、どのように私は、OracleからSQL Serverへの移行については行くだろう?)しかし、Oracleでのインデックス構成テーブルの使用に関する適切な情報を見つけるのに苦労しています。 以前の人生では、OLTP風のデータマートでSQL Serverのクラスター化インデックスを広範囲に使用して大きな成功を収めました。索引構成表は、Oracleの便利なツールですか?

2
TempDBをCPUの数に等しい複数のファイルに分割する
記事「SQL Server tempdbのベストプラクティスパフォーマンスの向上」ではtempdb、コアの数に等しい数のファイルに分割する必要があることを示唆しています。したがって、4つのコアで4つのファイルを取得します。 ファイル数を増やすことで、SQL Serverが一度にディスクにプッシュできる物理I / O操作の数を増やすことができます。SQL ServerがディスクレベルにプッシュダウンできるI / Oが多いほど、データベースの実行が高速になります。標準データベースでは、SQL Serverは必要な大量のデータをメモリにキャッシュできます。tempdbは書き込みの性質が高いため、メモリにキャッシュする前に、データをディスクに書き込む必要があります。 理論的には良さそうに聞こえますが、それは一般的な最適化として本当にそれでいいのでしょうか IOが非常に高い特定のシステムにのみ適用されるものですか?

2
クラウド内のSQL Serverトランザクションログ
トランザクションログ(*.ldf)をデータベースファイル(*.mdf、*.ndf)とは別の物理ディスクシステムに配置するのが一般的です。 仮想マシンクラウド環境で、トランザクションログを他のデータファイルと同じドライブ文字に配置しても問題ありませんか?これは、今日の一般的なクラウド仮想マシン環境で通常どのように処理されますか。 注:SQL Azureは使用しません。フルアクセスが可能なWindows仮想マシンを使用する。

2
SQLサーバーでこれらのディスクをBI構成用に構成するにはどうすればよいですか?
一定メモリ(32GB)とCPU(4)、2 xディスクアレイを想定すると、次のディスクがあります 2 x 150(10,000) 6 x 150(15,000) これらはすべてローカルディスクです。 私の要件 私のDBは350GBであり、デフォルトの10%増加に設定されています 私のOSとSQL Serverはサーバー2k8R2です(C:ドライブOS +ページ+アプリケーション= 55Gb) ログ要件は約70GBで、デフォルトの10%の増加に設定されており、定期的に切り捨てられます 私のTempDbは現在約12GBで、デフォルトの10%増加に設定されています 私の問題は、TempDBとOSおよびログをどこに配置すべきかを理解しようとしていることです。私の経験は、これら2つの最適な構成では制限されています これはオンライントランザクションシステムではありません。大量のデータの書き込み(新しいデータ+インデックスの再構築/再編成)と、大量のデータの読み取り(約50/50と見積もっています)処理が約13時間あり、その後は静かです。 私の理解では、TEMPDBはログと比較して通常の処理中に頻繁に使用されます。 私の考えは次のとおりです 2 x 150g(15k)RAID 1 = 150g for OS + TempDB 2 x 150g(10k)RAID 1 = 150g(LOGより遅いディスクに注意) 4 x 150g(15k)RAID 5 = 150g(データ用) これは良い考えのように聞こえますか?その後、必要に応じてLog + TempDBを交換できます。 ページングの問題によりTempDBをOSディスクに配置しない、またはデータよりも遅いディスクにログを配置しないなどの基本的なルールに違反していますか? 編集: また、システムにはSSASがあり、エンドユーザーはキューブにのみアクセスします。上記の50%の読み取りは、SSASデータベースの処理にかかる時間に基づいています。

1
SQL Server 2012でNVARCHAR列の同等クエリが複数の結果を生成する
ペットプロジェクトをPostgreSQL(9.2.2)からSQL Server(2012 Standard)に移行中です。 Unicodeの単語をクエリするときに、興味深い現象に気づきました。定義を考えると: CREATE TABLE [word]( [id] [int] IDENTITY(0,1) NOT NULL, [value] [nvarchar](255) NULL ); そしてデータ: insert into word (value) values (N'ῥύπῳ'); insert into word (value) values (N'ἀπὸ'); insert into word (value) values (N'ἀπό'); insert into word (value) values (N'ἐπὶ'); insert into word (value) values (N'ἐπί'); insert into word …

2
SQL Server選択カウントREAD_COMMITTED_SNAPSHOT QUESTION
特定のテーブルでselect count(*)を実行すると、多くのデッドロックが発生しているようです。私はすでにすべての必要なパラメーターを変更し、それらを行のみのロックにしています。 また、READ_COMMITTED_SNAPSHOT分離を使用するようにデータベースを変更しました。 ただし、select count(*)where column =?テーブル上でデッドロックまたはテーブル上のロックをトリガーします。 select count(*)は中間行にのみアクセスする必要があることは正しいのでしょうか?しかし、それはそのようには見えず、依然としてデッドロックが発生しています。適切な索引付けはおそらく役立つでしょう。 問題は、SQL Server 2008 R2は、read_committed_snapshotがonに設定されている場合でも、select count(*)中にテーブルに共有ロックを設定しますか? ありがとう

3
SQL更新の処理に非常に長い時間がかかる/ディスク使用率が高い
はい、それは非常に一般的な問題のように聞こえますが、私はまだそれをあまり絞り込むことができませんでした。 したがって、SQLバッチファイルにUPDATEステートメントがあります。 UPDATE A SET A.X = B.X FROM A JOIN B ON A.B_ID = B.ID Bには40kレコード、Aには4Mレコードがあり、A.B_IDを介して1対nに関連付けられていますが、2つの間にFKはありません。 したがって、基本的にはデータマイニングの目的でフィールドを事前に計算しています。この質問のためにテーブルの名前を変更しましたが、ステートメントは変更しませんでした。それは本当に簡単です。 実行には数時間かかるため、すべてをキャンセルすることにしました。DBが破損したので、それを削除し、ステートメントを実行する直前に行ったバックアップを復元し、カーソルで詳細に進むことにしました。 DECLARE CursorB CURSOR FOR SELECT ID FROM B ORDER BY ID DESC -- Descending order OPEN CursorB DECLARE @Id INT FETCH NEXT FROM CursorB INTO @Id WHILE @@FETCH_STATUS = 0 BEGIN …

1
Postgres 9.2のストリーミングレプリケーションは、スキーマの変更と初期テーブル設定をどのように処理しますか?
プライマリ物理データベースサーバーのすぐ下にある物理サーバーにバックアップデータベースをセットアップしたいと考えています。私はPostgres 9.2を使用しており、同期のストリーミングレプリケーション(アトミック性のため)を使用したいのですが、A)初期テーブルセットアップがサーバー1からサーバー2に転送される(たとえば、syncdbサーバー1)に一連のテーブルを作成する私のDjangoアプリから、およびB)サーバー1からサーバー2への継続的なスキーマ変更の実行方法(たとえば、Django South移行をALTER TABLE実行し、クエリを送信するだけでなく、追加/インデックスの削除など)。これらはストリーミングレプリケーションで透過的に処理されますか、それとも両方のサーバー間でこの変更に影響を与えるために何かしなければならないことがありますか?

4
Active Directoryに存在しないアカウントを削除するSQL Serverスクリプト
SQL Server 2000があり、間もなくSQL Server 2005に移行されます。ActiveDirectoryに存在しないWindows認証アカウントが何年も作成されているため、データベースコピーウィザードがこれらのアカウントを新しいサーバーに作成できません。 Active Directoryに存在しないアカウントを削除するスクリプトまたは自動化された方法はありますか? 編集:明確にするために、削除する必要があるログインはSQL Server 2000上にあり、このDROP LOGINコマンドはサポートされていません。 それとは別に、SQL Server 2000でログインを手動で削除することは(exec sp_droplogin 'loginname'おそらく)で行われますが、私の場合、「domain \ loginname」または「loginname」のどちらを使用しても、ログイン名が見つかりません 混乱を増すだけで、exec sp_revokelogin 'domain\loginname'動作しているように見えます。 編集2:最後に問題を解決しました。問題のあるログオンの多くはプログラムによってデータベースに追加され、ユーザーが接続できるという意味で機能していましたが、SQL Serverがドメインを予期していない場合、ユーザー名とNTログイン名はドメインプレフィックスのログオンが一致しませんでした。その逆。 これを解決するために、エラーになったチェックの1つを削除するようにsp_droploginプロシージャを変更しました。 SQL Server 2000で動作するので、自分の回答を受け入れます。

1
PostgreSQLのインストールに必要な権限
PostgreSQLデータベースは初めてです。自分のマシンにインストールする必要があります。 私はシステムの管理者ではありません。 非管理者がインストールできる場合、誰かが提案できますか? .exe以外にインストールする方法が他にある場合は、お知らせください。 前もって感謝します。

2
インデックスの断片化とSSDディスク
パフォーマンスの問題は初めてですが、SSDディスクがインデックスの断片化によって引き起こされるパフォーマンスの問題を解決するという議論がありました。誰かこれを経験しましたか?ハードウェアの変更を考えており、それが役立つか迷っています

1
サーバークラッシュ後にレプリケーションを復元する方法
1つのSQL Server 2005インスタンスに2つのデータベースがあり、それらの間でトランザクションレプリケーションが行われていました(記事として3つのテーブル)。このサーバーは、パブリッシャーとディストリビューターの両方として機能しました。 次に、サーバーのRAIDに障害が発生しました。しかし.mdf、クラッシュする前に、ほぼすべてのファイルを切り離してコピーすることができました。 システムの復元後、SQL Serverを再インストールし、システムデータベース(master、model、msdb)を復元して、.mdfファイルを同じパスに配置しました。それで始まった。 レプリケーションで問題が発生しました。ローカルパブリケーションのフォルダは、空であったけれどもローカルサブスクリプション問題のサブスクリプションが含まれていたフォルダ。私が新しい出版物を追加しようとしたとき、私は得ました: 新しいパブリケーションウィザードで、パブリケーション名の取得中に1つ以上のエラーが発生しました。 Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。(Microsoft.SqlServer.ConnectionInfo) 無効なオブジェクト名 'dbo.syspublications'。(Microsoft SQL Server、エラー:208) 左側のサブスクリプション(最終的にはなんとか管理できました)を削除して、サーバーでの公開と配布を無効にすることを試みることにしました。 SQL Serverは 'someserver'での公開と配布を無効にできませんでした。 無効なオブジェクト名 'dbo.syssubscriptions'。EXECUTEの後のトランザクション数は、COMMITまたはROLLBACK TRANSACTIONステートメントが欠落していることを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。EXECUTE後のトランザクションカウントは、COMMITまたはROLLBACK TRANSACTIONステートメントがないことを示しています。以前のカウント= 0、現在のカウント=1。データベースコンテキストを「マスター」に変更しました。(Microsoft SQL Server、エラー:208) システムデータベースバックアップから一部の情報が復元されなかったようです(おそらくdistributionデータベースに何かが欠落している可能性があります)。 また、公開と配布を無効にできないという質問に答えるようにしました。しかし、成功しませんでした。私が作成しようとしたsyspublicationsの両方をmasterしてdistribution、何も変わっていません。 では、このサーバーでレプリケーションを機能させるにはどうすればよいですか? サーバー上で他のデータベースを公開しようとしましたが、うまくいきました。したがって、問題は公開されたデータベースに関連しているようです。どうすればそれをクリアして、その上に新しいパブリケーションを作成できますか? System Tables 問題のあるデータベースのサブフォルダは、データベースがパブリッシュされたときに作成されるレプリケーションテーブルを見逃します。 レプリケーションモニターでは、これらの古いサブスクリプションを確認できますが、レプリケーションフォルダーでは使用できません 。

2
SQL Serverは、再起動するまで時間が経過すると遅くなります
OLAP / OLTPのワークロードが混在するデータベースがあります。クエリは非常にアドホックであり、中間層アプリケーションサーバーで動的に作成されます。サーバーを起動すると、パフォーマンスは許容範囲内ですが、使用可能なすべてのメモリ(30GB)がなくなるまで、メモリ消費量はどんどん増えます。その後、システムはますます遅くなります。 のようなコマンドDbcc freeproccacheは効果がありません。 トランザクションは多くありませんselect * from sys.dm_tran_session_transactions(システムが正常な場合を超えない)。このリストが空の場合もあります。 の最初の結果dbcc memorystatusは VM Reserved 42136628 VM Committed 1487176 Locked Pages Allocated 24994048 Reserved Memory 1024 Reserved Memory In Use 0 SQL Serverを再起動すると、しばらくの間問題が解決します。 この動作の原因は何ですか?どうすればそれを回避できますか? 原因の実際の解決策が難しすぎる場合、DBMSを完全に再起動せずにSQL Serverにすべてのメモリを実際に解放させるコマンドはありますか? サーバーは専用のハードウェア(VMではなく)で実行されています。スケジュールされたジョブがいくつかありましたが、変更なしでしばらく無効にしました。同じサーバー上で実行されている他の中間層アプリケーションがありますが、それらは2GB以下のメモリ、ごくわずかなCPU、ほとんどI / Oを使用しません。そのようなアプリケーションはすべて変更せずに再起動しました。

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