データベース管理者

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

3
70 GBのRAMを備えた強力なマシンを持っています。20 GBのOracleインスタンスはいくつ作成できますか?
70 GB RAMの強力なマシンを持っています。sga_targetとして20 GBのOracleインスタンスを1つ作成しました。sga_target > 10G最初のデータベースを停止したままでも、別のOracleインスタンスを作成できません。設定するsga_target >=10Gと、起動時に以下のエラーが発生します。 ORA-27104:共有メモリーのシステム定義の制限が正しく構成されていません ながらfree -mも利用可能な十分な記憶があることを示しています: total used free shared buffers cached Mem: 72419 34490 37928 0 618 28159 -/+ buffers/cache: 5711 66707 Swap: 2047 0 2047 スワップ領域を増やす必要がありますか?この点でのポインタは高く評価されています。 また、70 GBのメモリの場合、多くのインスタンスを作成するために、スワップ領域に最適な値は何ですか?これを計算する方法はありますか?私の目的は、それぞれに少なくとも2つのインスタンスsga_target=20Gを持ち、同時に1つのインスタンスのみを維持することです。ここに概念がない場合 出力ipcs -imは以下の通り ------ Shared Memory Limits -------- max number of segments = 4096 max seg size …

1
パーセンタイルを計算するための高速な一般的な方法
PostgreSQLでソートされていない列のn> 1パーセンタイルを検索したい。たとえば、20、40、60、80、100パーセンタイル。 明白な解決策は、列を数えて並べ替えてから調べますが、もっと良い解決策を期待しています。何か案は? PS私はMySQLの良い解決策を見つけましたが、それをpsqlに変換できません

4
本当に.LDFファイルを保持する必要がありますか?
毎月、本番データベースの月末のスナップショットを作成しています。これらの月末のスナップショットは、レポート作成のみを目的としており、挿入、更新、削除は行われていません。これらの各スナップショットには、.MDFand .LDFファイルがあります。 .LDFファイルを削除してサーバーの空き容量を増やしたい。.LDFファイルを保持する必要がある理由はありますか? 明確化: 本番データベースは、別のシステムからのファイル抽出から毎晩再作成されます。本番データベースからのレポートのみです...更新は行われません。 毎晩のプロセス: 私が言えることから... 毎晩、データベーステーブルは切り捨てられ ますテーブルは、一連の一括挿入ステートメントを介して入力 されますインデックスは再構築されます

2
Amazon RDS I / Oリクエスト-1つのクエリ= 1つの請求可能なI / O?
Amazon RDSに移行したいInnoDBデータベースがあります。 自分のサーバーでホストされている現在の実装では、月におよそ800万のクエリが表示されます。 RDSサイトによると、I / Oレートは100万リクエストあたり$ 0.10です。 1 I / O = 1クエリですか?つまり、この使用量+ RDS料金に対して月額80ドルが請求されますか?
9 mysql  innodb 

2
モンゴコレクションの「サイズ」は「ストレージサイズ」よりも*大きい*のですか?
最近、次のコマンドを使用してコレクションを圧縮しました。 db.<collectionName>.runCommand( "compact" ) そして今、私のコレクションのサイズはディスク上のサイズよりも大きいようです! SECONDARY> db.<collectionName>.stats() { "ns" : "<databaseName>.<collectionName>", "count" : 2937359, "size" : 5681676492, # 5.6 GB "avgObjSize" : 1934.2805874256433, "storageSize" : 4292853728, # 4.2 GB "numExtents" : 2, "nindexes" : 2, "lastExtentSize" : 2146426864, "paddingFactor" : 1.669999999836597, "flags" : 1, "totalIndexSize" : 220735648, "indexSizes" : { …
9 mongodb 

1
SQL * Plus、@、および相対パス
どういうわけか、SQL * Plus(少なくともWindowsでは)が呼び出され@@、パスが単一または二重のドットで始まる場合、相対パスを持つスクリプトを見つけることができないようです。 たとえばx:\some\where、次のディレクトリ構造があります。 script.sql main-dir\main-sub-dir call-script.sql script.sql つまり、2つですscript.sqlが、場所が異なります。 script.sql直下の内容x:\some\whereは単純です prompt SCRIPT root 他方script.sqlのコンテンツは prompt SCRIPT main-dir/main-subdir call-script.sql 読む @@script.sql @ script.sql 期待される出力 からSQL * Plusを起動してからx:\some\where、 @main-dir/main-sub-dir/call-scripts 出力は SCRIPT main-dir/main-subdir SCRIPT root シングル@はSQL * Plusが開始された場所@@からのパスを検索し、含まれているスクリプトのディレクトリからパスを検索することになっているため、これは予想されたものです。 予期しない出力 今、私がcall-scripts.sqlそう変更した場合: @@./script.sql @ ./script.sql double @@は、SQL * Plusが開始された場所からパスを検索するという点で、動作を変更しているように見え、出力は次のようになります。 SCRIPT root SCRIPT root これは私が期待したものではありません。 この動作はどこかに文書化されていますか、そしてもっと重要なcall-scripts.sqlことは、相対パス(@@../../other-dir/other-sub-dir/script)を正しく呼び出すように変更するにはどうすればよいですか?

5
RESTORE DATABASEイベント後にストアドプロシージャを自動的に実行する
それが持っていることが可能であるSQL Server 2008 R2の標準が自動的にされる任意のデータベースにストアド・プロシージャを実行復元またはattachcedインスタンスに? DDLイベントの後、CREATE_DATABASEまたはALTER_DATABASE起動された後に、特定のデータベースでストアドプロシージャを実行するサーバーレベルのトリガーを作成することで、ソリューションに近づきました。残念ながら、これはデータバックバックアップの復元では機能しません。 詳しく説明すると、復元するすべてのデータベースに存在する「クリーンアップ」ストアドプロシージャがあり、バックアップがインスタンスに復元されるたびにこれを自動的に実行する方法を探しています。 グーグルによって、SQL Serverで監査またはポリシーを構成してこの機能を取得するよう指示されましたが、これらの機能は一見すると非常に圧倒されるため、監査または警察が調査を開始するための手段であるかどうかわかりません。

1
sp_executesqlのセキュリティ上の意味は何ですか?
デフォルトでは、SQL Serverでは、[public]ロールはEXECUTEに対する権限を持っていsp_executesqlます。 ただし、以前のDBAがのEXECUTE権限を取り消したデータベースサーバーを継承しましたsp_executesql。 一時的な回避策として、私は必要に応じて(masterデータベースのロールを介して)にEXECUTE権利を付与していsp_executesqlます。しかし、これはメンテナンスの問題になり始めています。 私が許可した場合EXECUTE、公開に戻って、私が知っておく必要がある任意の影響がありますか。

6
実際のデータを持つデータベースの使用を開始する最も簡単な方法は何ですか?
データベースを使用することでメリットが得られるプロジェクトがありますが、データベースの経験がなく、サーバーにアクセスできず、サーバー側にあるものを操作する経験がほとんどありません。 学習曲線に取り組む必要がある場合は、幅広い適用範囲(SQLなど)で何かを学びたいと思いますが、Accessのようなものを習得することで、現在取り組んでいるタスクに対して十分に強力であれば、解決するでしょう。タックル。もちろん、私がいじくり回しているだけでそれが助けられれば、Accessに150ドルも落とさないほうがいいです。 私はLibreOffice BaseとSQLiteBrowserと呼ばれるものをダウンロードしましたが、時間を費やす前に、これらの特定のアプリケーションとSQLのフレーバーを習得する前に、これらのツールが自分のやりたいことに十分かどうかを確認したいと思いました。 次のことができるようになりたいです。 CSVまたはExcelからデータをインポートする 「これがそれであり、これがそれを含み、これらのいずれかがそれを含む」というxを選択することに等しいクエリを実行します。 指定されたクエリに一致する結果を示す新しいフィールドを書き込みます(?) 繰り返しますが、私は学習するつもりですが、データベースの学習、および必要に応じて特定のアプリケーションの詳細に集中する前に、ITに関する中間的な知識を学ぶ必要がないのはいいことです。

2
Oracleシャットダウン方法
アップグレードまたはパッチを実行する前にデータベースをシャットダウンするには、いくつかの方法があります。 shutdown immediate; または shutdown abort; startup restrict; shutdown immediate; または shutdown abort; startup restrict; shutdown; または alter system checkpoint; shutdown abort; startup restrict; shutdown immediate; もちろん、他のオプションもあります。どちらを優先する必要がありますか?その理由は?

1
SQL ServerのFILL FACTORがデフォルトで0(100%)になるのはなぜですか?
FILL FACTOR、ページ、インデックス構造を理解しているため、100%FILL FACTORがまれなベストプラクティスである理由を理解しています。それでは、なぜデフォルトで0(または100%)になっているのですか?なぜ90または95ではないのですか? 行方不明のものはありますか?

3
トランザクションログファイルを別のドライブに配置すると、パフォーマンス上のメリットはありますか?
SQL Serverデータファイルを1つのハードドライブに配置し、トランザクションログを別のハードドライブに配置することのメリットを称賛する多くのブログ投稿とベストプラクティスの記事があります。理由は、トランザクションログにはシーケンシャルな書き込みしかありませんが、データベースファイルではランダムな読み取りと書き込みが発生するためです。 しかし、何百ものデータベースがある場合はどうでしょうか?数百のトランザクションログファイルを別のディスクに配置することには、本当にパフォーマンス上のメリットがありますか 複数のトランザクションログが書き込まれている場合、トランザクションログの書き込みはデータベースの書き込みと同じくらいランダムになると思います。

2
この「マッピング」テーブルには別のId列が必要ですか?
の表Producersとの表がありProducts、どちらも次の形式です。 Id -int、主キー Name -nvarchar プロデューサーは複数の製品を運ぶことができるため、次のようなテーブルを作成しましたProducerDetails。 ProducerId -int、外部キー Producers.Id ProductId -int、外部キー Products.Id それから自分に問いかけ始めたので、専門家に聞いてみようと思いました。テーブルに追加のId(int、主キー)列がある方がデータベース設計が優れてProducerDetailsいるでしょうか?それとも不要ですか? SQL-Server 2008 R2を使用しています。 編集 -これらのテーブル間の関係は多対多だと思います。申し訳ありませんが、明確にしていません。生産者は複数のタイプの製品を運ぶことができ、同じ製品が複数の異なる生産者によって生産される可能性があります。 この質問が非常に単純である場合はお詫び申し上げます。参照整合性/データベース設計は私の強みではありません(私はそれを改善しようとしていますが)。

2
1つのステートメントでテーブルの多くの行を更新しますか?
テーブルの多くの行を更新する最も簡単な方法は何ですか?次のようなcsvファイルがあります。 |primary_key |value| | 1 | xyz| | 2 | abc| | 3 | def| ... これらの主キーを持つ行はすでにターゲットテーブルに存在します これらの値でターゲットテーブルを更新したいと思います。構文はありますか? update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3); 覗きMySQLの更新リファレンス、このサイト(MySQLの- CSV更新)、SO(更新複数行、複数のDBの更新、更新複数行)、私は答えは「ノー」であると思われるが、私が好きな確認するために、このことを本当です。
9 mysql  update  replace 

3
テーブルの列の順序を識別する方法
テーブルの列をテーブル定義順にリストする必要があります。 select * from syscolumns where id = object_id('MyTable') --order by colid 調べることでsyscolumns、テーブルの2つの列は、関連を見て:colidとcolorder。syscolumnsに関するMSDNの記事によれば、 colid | smallint | Column or parameter ID. colorder | smallint | Identified for informational purposes only. | Not supported. Future compatibility is not guaranteed. 走ってみた select * from syscolumns where colorder <> colid これは行を生成しなかったので、これらの列にはほとんどの場合同じ値があると思います。 最も安全な方法は、colidを使用することです。しかし、私は知りたいと思います:これらの2つの列の間に違いはありますか、ある場合、この違いは何ですか? また、MSDNの記事では、colidがテーブル定義の順序を反映していることは確認されていません。これが事実であると想定することは合理的ですが、そうであると確信している場合、どのようにこれがそうであるかをどのようにして知ることができますか?

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