データベース管理者

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

3
SSMS接続ダイアログにリストされるサーバーの順序を制御するにはどうすればよいですか?
私の現在のプロジェクトでは、SQL 2008-> 2012からアップグレードし、ハードウェアのタスクをやり直して、繰り返し、データベースのシャッフルを行います。 マイナーな問題の1つは、SSMSの接続ダイアログがサーバーの順序を入れ替えて最新のものを最優先することです。特定の日に6〜10台のDBサーバーに接続していて、リストから特定のサーバーをすばやく見つけたいと考えると、この動作はヘルプよりもはるかに邪魔になります。 この動作を無効にして、サーバーをアルファベット順に、または追加された順序で、またはサーバーに接続するたびに変更されないものがあるようにする方法はありますか? それを除いて、それらのリスト/ファームから特定のサーバーへの接続をよりよく管理するための完全に異なる方法はありますか? SQL 2012にSSMSを使用しています(2008ソリューションにも興味があります)。
11 sql-server  ssms  tools 

3
MS SQLデータベースで相互に関連するストアドプロシージャの巨大なWebを文書化する:どのツールまたは形式ですか?
これは「1000ページの本を読む」よりも短い答えの質問であるといいのですが、それが本当の状況なら、私をそれに当てはめてください。 私は本物のDBAではありません。私はDBAが必要だと気づいているソフトウェア開発者ですが、私が働いている店にはDBAがいません。ただし、いくつかのコアストアドプロシージャを含むMS SQLデータベースの設計は、大きな混乱です。ストアドプロシージャは遅く、バグがあると思われますが、どのように機能することが予想されるのかさえわからないため、修正方法もわかりません。 最初に、すべての機能がどのように機能するかを文書化し、ユニットテストを開始して、ストアドプロシージャが実際に機能することを証明する一連のユニットテストを構築することにしました。彼らが実行するロジックは、私たちのアプリケーションの重要な部分です。つまり、それは当社の主要製品の「宝石」であり、その動作方法は完全に文書化されていません。 私は、プロのDBAが相互に呼び出すストアドプロシージャの巨大なWebを理解するために、既存の、または必要に応じて自分で作成することを期待している可能性がある特定の技術ドキュメントを探しています。 大きなストアドプロシージャを文書化するための通常の形式は何ですか?各Inパラメータの期待値の説明(つまり、「前提条件」、「事後条件」、つまりブールパラメータの場合、オンまたはオフにすると何が変わるかなど) 通常、それをどのように文書化しますか?SQLコメントのみ?目的に固有の外部ツールですか?外部の「ドキュメント」?MS SQL Management Studio以外にSQLツールはありませんが、環境の理解、文書化、およびテストを改善するツールがあるかどうか疑問に思っています。多分それが私の質問をするより良い方法です。混乱を解決するには、どのツールが必要ですか? 私たちの目標は、次のことができるようにすることです。 A.生成されたドキュメント、または環境に追加したツールを使用して、プロシージャがどのように機能するかを理解し、ストアドプロシージャの単体テストカバレッジを作成できるようにします。 B.これらの複雑なストアドプロシージャをそれぞれ適切に呼び出す方法をクライアントアプリ開発者に示す。 C.ストアドプロシージャの単体テスト。

2
データベースリンクを介したクエリのタイムアウトはありますか?
編集/序文: DBリンククエリのタイムアウトに関する質問に特に関心があるため、この質問はSOから移行されました。SOから提供される回避策は多少問題ありませんが、質問自体に本当に興味があります。 動機: データベースリンクを使用して、クエリを「永久に」(2日以上、セッションを終了するまで)実行しました。問題は、リモートデータベースが利用できなくなり、まだ知られていない理由でノーORA-02068が発生し(ここでは説明しません)、クエリが待機して待機したことです。 (クエリは、PL / SQLパッケージのプロシージャを実行するdbms_schedulerジョブによって発行されます。その結果、ジョブもスタックしました。ただし、この質問の中心には特に関係ありません) 私は、テストDBの1つを静止モードにして、データベースリンクを介してクエリを実行することにより、この状況をシミュレートしました。予想どおり、クエリは手動でキャンセルされるか、リモートDBが静止解除されるまで待機していました。 質問: リモートデータベースの動作と稼働時間を制御できないため、データベースリンクを使用しているクエリにタイムアウトを設定する可能性を模索しています。 私はすでにプロファイル(CPU_PER_CALLなど)、sqlnet.oraパラメーター、ローカルの名前付けパラメーターを接続文字列に直接追加((connect_timeout=10)データベースリンク定義への追加など)、コマンドを... for update wait 1で実行していますが、ビジーセッションまたはアイドルセッションで機能しますが、待機中のセッション。 したがって、データベースリンクの「ローカル」側で、データベースリンクを介したクエリのタイムアウトを設定するオプションを探しています。 以下のようないくつかの解決策alter session set xyzかはselect ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)、私はこれらの特定のDBにはDBA権限を持っていないとして、高く評価されるだろう。 私は現在10gR2を使用していますが、数週間で11gR2にアップグレードするので、これらのバージョンのアイデアは役に立ちます。

2
postgresql pg_ *コマンドの特定のバージョン(8.4、9.1)を実行する方法(例:pg_dump)
Postgresqlバージョン8.4および9.1がインストールされています。特定のPostgresqlコマンドについて、実行するコマンドの特定のバージョンを指定するにはどうすればよいですか?(例えば、psql、pg_dump、pg_ctlcluster、pg_restore、...) 私の質問は、8.4から9.1へのアップグレードの準備としてpg_dumpを実行したいという動機であり、実行しているpg_dumpのバージョンを知りたいです。 Ubuntu 10.04 Nattyで実行しています。

5
SQL ServerはOracle RACの機能と同等ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、データベース管理者のスタック交換のトピックになるようにします。 5年前に閉鎖されました。 私はグーグルをやったが、この質問に対する答えが数年前よりも最近に見つからなかったので、私は質問したいと思った。OracleのRAC機能は、読み取りトランザクションと書き込みトランザクションの両方にロードバランシングを提供するだけでなく、ダウンタイムなしのスケールアウトと高可用性を提供します(少なくとも、私が理解しているように、私たちはRACを使用する最初のデータベースを導入しようとしています。それがどうなるか見てみましょう)。 同等の機能を提供するSQL Server機能セット(または上にインストールできるサードパーティコンポーネント)はありますか?私たちは常にWindowsクラスタリングを使用してきました。フェイルオーバーイベントが発生すると、SQLのダウンタイムが約20〜30秒発生します。これは常に許容できますが、理想的ではありません。現在、SQL 2012のAlwaysOnにより、SQL Serverはそれを約15秒に短縮し、読み取り専用のセカンダリデータベースの概念を追加しますが、書き込みトランザクションは単一の接続ポイントを通じて制限される必要があります(多くのトランザクションが読むだけですが、実際にはロードバランシングではありません)。ノード障害やパッチの必要性が発生した場合でも、ダウンタイムが発生します。 私はそれがより好奇心であると思います-これはSQL ServerがOracleに遅れをとっている唯一の領域であるように感じます(少なくとも私が個人的に使用したのを見た機能の中で)。Microsoftの同等の機能が追加されるのを待つ間、そのギャップを埋め、独自のSQL Serverの展開を改善するオプションがあるかどうかを確認したいと思いました。

2
1つのメインジョブから複数のSQL Serverエージェントジョブを順番に呼び出す良い方法は?
順次実行する必要があるSQL Serverエージェントジョブがいくつかあります。実行する必要があるジョブの概要をわかりやすくするために、への呼び出しで他のジョブを呼び出すメインジョブを作成しましたEXEC msdb.dbo.sp_start_job N'TEST1'。はsp_start_job即座に終了しますが(ジョブステップ1)、TEST1次のジョブを呼び出す前に、ジョブが終了するまでメインジョブを待機させます。 そのため、ジョブが呼び出された直後に実行を開始し(ジョブステップ2)、メインジョブを強制的にサブジョブが完了するまで待機させる次の小さなスクリプトを記述しました。 WHILE 1 = 1 BEGIN WAITFOR DELAY '00:05:00.000'; SELECT * INTO #jobs FROM OPENROWSET('SQLNCLI', 'Server=TESTSERVER;Trusted_Connection=yes;', 'EXEC msdb.dbo.sp_help_job @job_name = N''TEST1'', @execution_status = 0, @job_aspect = N''JOB'''); IF NOT (EXISTS (SELECT top 1 * FROM #jobs)) BEGIN BREAK END; DROP TABLE #jobs; END; これは十分に機能します。しかし、私はよりスマートで安全な(WHILE 1 = …

5
100mmレコードでJOINを使用して更新します。これをより適切に行う方法は?(T-SQL)
実際には、1つのテーブルの1億レコードを更新する必要があります。つまり、列のvarchar値を単にIDに置き換えることでテーブルを正規化します。(「置換」と言いますが、実際にはIDを別の列に書き込んでいます。) 私が達成しようとしているのは、データセットを正規化することです。まだ正規化されていないデータにはインデックスがありません。私の考えは、更新が完了した後、varchar値をtinyint値で置き換える外部キーにインデックスを付けるのを待つ代わりに、生の値にインデックスを構築しないことでした。 UPDATE A SET A.AutoClassID = B.AutoClassID FROM AutoDataImportStaging.dbo.Automobile as A JOIN AutoData.dbo.AutoClass as B on (A.AutoClassName = B.AutoClassName) バックグラウンド サーバー2008 R2でMSSQL 2008 R2を使用 サーバーには8 GBのRAMがあります サーバーには1つのRAID10、7200 RPM SATAがあります(すばらしいですが、本番環境ではこれはデータの読み取りのみを行い、データの書き込みは行いません。さらに、最近のHDの不足により、コストのためにこれが必要になりました)。 サーバーにはデュアルクアッドコアXeon CPUが搭載されています マシンは他に何もしていません(現在は開発専用で、このプロセスのみ) 単純なロギングがオン(?-しかし、ロールバックできるようにログを記録しますか?) クエリは2つの異なるDBを参照することに注意してください。 更新されるテーブルのレコードの「幅」は455バイトです 実行中のリソース 物理RAMがいっぱいです ディスクI / Oが最大になりました CPUはほとんど何もしていません(チョークポイントはI / Oです) 実行時間は14時間で、カウントされています! 正規化の更新後に列(AutoClassName)を削除する場合でも、生データのインデックスが必要になるなど、いくつかのことが疑われます。また、JOINを開始するときにばかげて見えたJOINではなく、一度に1レコードずつテーブルをループダウンする必要があるのか​​どうかも疑問に思っていましたが、今はもっと高速だったようです。 残りの正規化更新(これと同様)の方法をより迅速に変更するにはどうすればよいですか?

2
ファイル(BLOB)が多すぎるSQL Server DBを処理する方法は?
シナリオ: ASP.NETアプリケーションにサービスを提供するSQL Server 2005データベース(別のWebサーバー上)。 データベース: DBには、約5GBの「通常の」データと約15GBの「ファイル」があります(例:画像(BLOB)として保存された200k PDFなど)。より多くのファイルがユーザーによってアップロードされており、急速に多くのディスク領域を消費しています(DBは、今後数か月で50GBに増加する可能性があり、ほとんどがファイルです)。 懸念事項: DBに非常に多くのファイルを保存すると、既に問題が発生しています(例:データベースの合計サイズが大きいと、DB全体のバックアップと展開が時々難しくなります。)。 そして、さらに問題が発生するのではないかと心配しています。(例:パフォーマンスの問題-おそらく、DB全体をRAMに保持できないことが原因でしょうか?) 質問: この問題に対してどのような技術的解決策を提案しますか?ファイルをファイルシステムに保存しますか?データベースを2つに分割し、ファイル用に大きくて遅いファイルを持っていますか? 必要に応じてさらに詳細: これらのファイルはそれほど重要ではなく、非常に高速なアクセス時間を必要としません。現在、数秒で十分ですが、現在1時間あたり数十の選択があります。DBの他の「通常の」データには、毎秒何回も必要な情報が含まれています。

1
頻繁にクエリされる100,000レコードのMySQLテーブル
私はさまざまな種類の情報を格納するために、約100個のテーブルの単一のデータベースを持っています。 最も重要なテーブルは、顧客の注文を格納するために使用される注文テーブルであり、現在および増加している現在では10万件を超えるレコードです。 このテーブルは、リアルタイム注文ダッシュボード、統計、分析などから必要な情報のさまざまな部分について、データベースで最もクエリの多いテーブルです。 私は定期的にデータベースを監視しており、問題を追跡するためにデータベースで遅いクエリを有効にしています。 私はmysqltunerのようなスクリプトを使用して、毎日クエリを吐き出しています。 また、mysqlslaを使用して、データベース内の最も遅い10個のクエリに関する情報を収集します。 sample stat Count : 11.48k (30.66%) Time : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max (18.64%) 95% of Time : 5.246833 s total, 481 µs avg, 239 µs to 1.095 ms max Lock Time (s) : 14.460071 s total, …

1
InnoDB INSERTパフォーマンスの機能
こんにちは、Percona Serverの最新バージョンを実行しています。 サーバーのバージョン:5.5.24-55 Percona Server(GPL)、リリース26.0 私はこれらの特性の10 cpuボックスを持っています。 processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 9 model name : AMD Opteron(tm) Processor 6128 stepping : 1 microcode : 0x10000d9 cpu MHz : 800.000 cache size : 512 KB SSDと64GBのRAMを搭載しています。Innodbは約10GBであるため、innodb_buffer_pool_sizeは10GBに設定されています。 次のようなテーブルがあります。 create table TODAY ( symbol_id integer …

1
実際の最低の正のREAL番号は何ですか
MSDNによると、REAL番号の範囲は-3.40E + 38から-1.18E-38、0および1.18E-38から3.40E + 38です。明らかに、実際の下限ははるかに低いです。次のスクリプトは、REAL列に1.401298E-45を入力します。 CREATE TABLE a ( r1 REAL NULL , r2 REAL NULL , r3 REAL NULL ) ; GO INSERT INTO a ( r1, r2 ) VALUES ( 1.18E-37, 10 ) ; GO DECLARE @i INT ; SET @i = 1 ; WHILE @i < 20 …

2
すべてのデータベースでSQLクエリを実行する
cPanelとphpmyadminを使用する1つのホスティングアカウントを持っています。 このアカウントの下に50のデータベースがあり、すべてWordPressです。 このクエリを変更して、すべてのデータベースを実行してパスワードを更新する必要があります。 UPDATE 'wp_users' SET 'user_pass' = MD5( 'somepassword')WHERE 'user_login' = 'admin' LIMIT 1; データベースを1つずつ経由する必要がなく、すべてのデータベースをターゲットにできるソリューションを期待しています。 ありがとうございました
11 mysql  phpmyadmin 

1
RAISERRORでのFLOATの使用
私はRAISERROR()いくつかの基本的な単体テスト機能を提供するために(ここに示すように)使用FLOATsしていますが、エラーメッセージで使用できないことに不満を感じています。フロートを文字列にキャストできることはわかっていますがRAISERROR、すべての単体テストで使用しています。すべてのテストに別のコード行を追加したくありません。(私の単体テストはすでに十分に説明が豊富です!)パラメーターリスト内でインラインキャスト/変換を実行する方法はありRAISERRORますか?または、この欠陥を回避する別の方法はありますか? 更新: 最終的に私ができることは次のとおりです。 RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) 残念ながら、RAISERROR一般的に%fまたはfloatを処理しません。だから私は代わりにこれをしなければなりません: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ...何十もの単体テストに散らばっているときは、混乱のように見えます。だから私はそれを次のようなものに要約したいと思います: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) しかし、それは私にIncorrect syntax near 'CAST'メッセージを送ります。それが違法である理由はわかりませんが、違法です。代わりにここで使用できる別の「ワンライナー」はありますか?
11 sql-server  t-sql 

2
毎日99%のインデックスの断片化を防ぐ方法
1日2回挿入される100.000プレーヤー用のハイスコアテーブルがあり、プレーヤーごとに1つのレコードがあります。1日の終わりに、そのテーブルのインデックスのインデックスの断片化は99%です。設定を微調整してこれを防ぐ方法はありますか? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS …

3
mongodb用のubuntuのアップスタートスクリプト
Linuxとmongodbは初めてです。私はすでにubuntuにmongodbをインストールしていますが、別のポートでもう1つのインスタンスを実行したいと思います。他の質問やフォーラムからわかったように、upstartスクリプトが必要です。 /programming/7300109/ubuntu-start-upstart-second-instance-of-mongodb しかし、サーバーでupstartスクリプトを見つけられない、または見つけられません。upstartスクリプトを作成した場合、サービスとして開始するためにどこに見つければよいですか。 または、同じサーバーでポートが異なるmongodbの別のインスタンスを起動するための適切で簡単な方法は他にもありますか?

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