データベース管理者

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

5
何百万もの行があるテーブルの列定義を変更する最も効率的な方法は何ですか
何百万もの行を含むテーブルで、列をNOT NULLからNULLに変更する必要があります。私は簡単に試しました alter table Table1 ALTER COLUMN Column1 XML NULL しかし、それは永遠にかかります。だからここに私の質問があります: 変更を適用するのになぜこれほど時間がかかるのですか? それを行うより良い方法はありますか?

1
Oracleのマテリアライズドビュー
マテリアライズドビューはオラクルでどのように実装されていますか?オラクルでマテリアライズドビューを作成しました。私が今見ているのは、仕事のあるかなり普通のテーブルです。マテリアライズドビューはオラクルのテーブルとジョブに変換されますか?
9 oracle  view 

4
このMySQLクエリをさらに最適化するにはどうすればよいですか?
クエリの実行に非常に長い時間(15秒以上)を要するクエリがあり、データセットが大きくなるにつれて、時間の経過とともに悪化します。私は過去にこれを最適化し、インデックス、コードレベルの並べ替え、その他の最適化を追加しましたが、さらに改良する必要があります。 SELECT sounds.*, avg(ratings.rating) AS avg_rating, count(ratings.rating) AS votes FROM `sounds` INNER JOIN ratings ON sounds.id = ratings.rateable_id WHERE (ratings.rateable_type = 'Sound' AND sounds.blacklisted = false AND sounds.ready_for_deployment = true AND sounds.deployed = true AND sounds.type = "Sound" AND sounds.created_at > "2011-03-26 21:25:49") GROUP BY ratings.rateable_id クエリの目的はsound id、最新のリリースされたサウンドのと平均評価を取得することです。約1500の音と200万の評価があります。 私はいくつかの指標を持っています sounds …

3
Management Studio T-SQLクエリで接続を指定する
ユーザーをロールとしてDBサーバーに追加する場合、GUIから「このアクションのスクリプトを作成する」機能をよく使用します。次に、「接続::接続の変更」に移動して、他のサーバーでも同じことを行います。 スクリプトアクションで接続を指定できる方法はあるので、2番目の接続の変更手順を実行する必要はありませんか?

1
ミラーの解除と復元
ミラーのセカンダリノードでメンテナンスを行う必要があります。これは、ネットワークが短時間停止した後にミラーが再確立されている間にサイトが遅くなった結果です。安全のためにミラーを無効にし、問題のサーバーで突っ込んだ後で再度有効にします。 私が今持っている計画は: ミラーを無効にする 潜在的に危険なトラブルシューティングを行う 失われたトランザクションログをすべて復元する ミラーを再確立します これは、ミラーを解除/再確立するための最も安全な方法ですか?気を付けるべき落とし穴はありますか?

4
MySQLはなぜメモリ不足だと言っているのですか?
INSERT...SELECTJDBCを使用してMySQLでかなり大きなサイズを実行しようとしましたが、次の例外が発生しました。 Exception in thread "main" java.sql.SQLException: Out of memory (Needed 1073741824 bytes) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 実際にはResultSetオブジェクトを返すわけではないので、Javaヒープ領域は問題にならないはずです。しかし、とにかくそれを上げようとしたところ、うまくいきませんでした。次に、MySQL Workbenchでステートメントを実行しようとすると、基本的に同じものが得られました。 Error Code 5: Out of memory (Needed 1073741816 bytes) これらの操作を完了するには十分なRAMが必要です(選択するテーブル全体に収まるほど)が、すべてのメモリを活用するために微調整する必要のあるさまざまな設定があると思います。Amazon EC2 ハイメモリダブルエクストララージインスタンスをWindows Server 2008 AMIで実行しています。my.iniファイルをいじって、より良い設定を使用しようとしましたが、すべての状況で、状況がさらに悪化した可能性があることはわかっています。これがそのファイルのダンプです。 [client] port=3306 [mysql] default-character-set=latin1 [mysqld] port=3306 basedir="C:/Program Files/MySQL/MySQL Server 5.5/" datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" character-set-server=latin1 default-storage-engine=INNODB sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" max_connections=100 query_cache_size=1024M table_cache=256 …

2
Server Management Studioでのクエリプランの表示
SQLサーバーに関する別の質問:カウンターがリセットされて以来、最もCPUを集中的に使用するSQLを提供する簡単なクエリがあります。 select top 10 sum(qs.total_worker_time) as total_cpu_time, sum(qs.execution_count) as total_execution_count, qs.plan_handle, st.text from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle) as st group by qs.plan_handle, st.text order by sum(qs.total_worker_time) desc 質問1:正確には何plan_handleですか?Oracleのように、計画のハッシュではないように見えます。発言の計画に変化があった状況を発見したいのでお願いします。 質問2:plan_handleを取得したら、実際の計画に興味があります。だから私は、例えば: select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000) query_plan列には、クリックするとXMLドキュメントを表示するリンクが表示されます。それをwhatever.sqlplanとしてディスクに保存すると、Windowsでそれをダブルクリックでき、Management Studioで正しく表示されます。きっとこのステップを回避する方法があるに違いない!? 質問3:SET SHOWPLAN_TEXTの昔のように、XMLをテキスト形式に戻す方法はありますか?グラフィカルに表示できるようにしたいが、意味のある方法で差分を自動化したい。 ありがとう!

2
一時テーブルまたはテーブル変数を使用してSQL ServerストアドプロシージャをOracleに移行する方法
SQL Serverストアドプロシージャを作成するよう経営陣に勧められたC#開発者は、このようなプロシージャを生成することがよくあります。 create table #t1 (...); insert into #t1 Select ... from table_a where ...; insert into #t1 Select ... from table_b where ...; update #t1 Set ... = ... where ... Select * from #t1; 単一のステートメントはかなり単純であり、この方法により、正しい結果が生成されます。 多くの場合、私の仕事はそのような手順をOracleに移行することです。 次の事実に直面しましょう。 SQL Serverの異なる一時テーブルは完全に独立しており、任意のアドホック構造を持つことができます。 Oracleグローバル共通テーブルはグローバルオブジェクトであり、すべての用途で同じテーブル構造を共有します。この構造はどこでも使用されていますが、変更することはできません。 Oracle dbaから学んだことの1つは、可能な場合は常に一時テーブルの使用を避けることでした。SQLサーバーのパフォーマンスでさえ、このような変更の恩恵を受けます。 個々のインサートをユニオンに置き換える 最も単純なケースでは、上記は次のようなものに変換できます。 select case when ... …

2
効果的な方法でページングを実装する方法は?
大きな結果セットになるデータベースクエリがあります。データを表示するクライアントはネットワークを介してデータを受信するため、データベースから最初の50件の結果のみを取得してクライアントに送信することにより、転送されるデータの量を最小限に抑えるという考えでした。次に、2番目のページにジャンプして次の50件の結果などを取得する可能性を提供します(例:グーグルが提供するものと同様のもの) 問題は、ページングを実装する効果的な方法は何ですか。mssqlが可能な限りキャッシュを使用し、ページングを変更するたびに同じことが再度実行されないようにしたいと思います。 同時にデータベースをクエリしているクライアントが他にもあります。使用されているSQLエンジン:MS SQL 2005 私の考えは: 準備されたSQLステートメントを使用して、実行プランの共有を確保する ROW_COUNT変数を使用して、必要な行のみを取得します しかし、それは本当に最も効果的な方法でしょうか?または、結果セット全体を取得して、データをクライアントに送信するコードにページングを実装する方が良いと思いますか? ヒントをありがとう! よろしく、トーマス

1
SQL ServerのトリガーをOracleの書き込みトリガーに書き換えるにはどうすればよいですか?
元々Oracle用に作成されたトリガーをSQL Server用に書き換える方法を教えてください。 これが私のOracleトリガーコードです: CREATE OR REPLACE TRIGGER P000KUL_TEST BEFORE INSERT ON P000KUL REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN SELECT TO_CHAR(SYSDATE, 'dd/mm/RRRR') INTO :NEW.SYSTEM_DATE FROM DUAL; SELECT TO_CHAR(SYSDATE, 'hh:mi') INTO :NEW.SYSTEM_TIME FROM DUAL; END;

1
OracleデータベースのコンテンツをVisioにインポートしてエンティティ関係図を作成するにはどうすればよいですか?
Oracleデータベースがあり、Visio 2007 ProでERDを作成したいと考えています。 これまで、DDLを生成するためのDBMS_METADATA.GET_DDLコマンドを見てきました。Access DBをVisioにインポートできることはわかっていますが、AccessはOracleとは異なるSQL方言を理解しているようなので、データ型を変更するには、すべてのCreate Tableコマンドを微調整する必要があります。 Visio Pro 2007でDDLを使用してERDを作成する簡単な方法はありますか?
9 oracle  import  erd  ddl  visio 

4
コメントでPostgreSQLスキーマをバージョン管理する方法は?
コード、ドキュメント、システム構成など、Gitでの作業のほとんどをバージョン管理しています。私の貴重な仕事はすべてテキストファイルとして保存されているので、私はそれを行うことができます。 また、Postgresデータベース用の多くのSQLスキーマを作成して処理しています。スキーマにはビュー、SQL関数が含まれており、Postgres関数はRプログラミング言語で(PL / Rを介して)作成します。 私と共同編集者が作成したチャンクスキーマをコピーして貼り付けようとしていましたが、忘れていました。コピーと過去のアクションは反復的でエラーが発生しやすくなります。 pg_dump / pg_restoreメソッドはコメントを失うため機能しません。 理想的には、現在のスキーマを1つまたは複数のファイルに抽出し、コメントを保持してバージョン管理を行うための方法が欲しいです。 コメント付きのスキーマをバージョン管理するためのベストプラクティスは何ですか?

3
複数のOracleインスタンス—これは良い方法ですか?
私のクライアントの1つが、Oracleのインスタンスが3つあるSolarisマシンに製品のdbを配備しました。したがって、現在、同じマシン上でOracleのインスタンスが4つ実行されています。そして今、パフォーマンスの問題が発生しています。 私は他のインスタンスやマシンにアクセスできず、私が持っているすべてのツールはalert.log、AWR、ADDMです。複数のインスタンスに関連するものがあることはわかっていますが、それを証明することはできません。 それで、私の質問は、あなたは同じような状況を経験しましたか?どのように対処すればよいですか?複数のインスタンスに関連するパフォーマンスの問題の原因を特定するにはどうすればよいですか?

2
SQL ServerはRANGEをサポートすべきではありませんか?
Webサイトを開発し、SQL Serverを少し実行する人として、SQL Serverが結果に特定の範囲の行のみを含める必要があることを示す単純な句をサポートする必要があることは、私には何の問題もないようです。たとえば、行30〜39です。 現状では、SQL Serverにページングを実装することは、主にSQLに焦点を当てていない場合、実際には多くのWeb開発者の能力を少し超えています。 さらに、結合やその他の条件が原因ですでに複雑になっている可能性のあるクエリが大幅に簡略化されます。 それに加えて、ロジックは完全にMicrosoftの制御下にあるため、そのような句は時間の経過とともに内部で最適化される可能性が高くなると私は考えています。 私は少し前に別のフォーラムでこれを取り上げました、そして、多くの返信はこれが望ましくないことを示唆しているようでした。 ページングの既存の技法がそのまま残されることを考えると、そのような句を追加しない理由として考えられるのはどのようなものでしょうか?そして、それは私のような人々にとってとても良いでしょう。 マイクロソフトがこれを行わなかった正当な理由の誰かができますか?

4
友情関係を格納するための関係データベーステーブルを設計する方法
Webプロジェクトに友情関係を格納するテーブルを設計したい 少なくとも次の4つの条件を満たす必要があります。 友達追加リクエストを送信したユーザー(例:A TO Bの場合、この列はAになります) 友達追加リクエストを受け取ったユーザー(例:A TO Bの場合、この列はBになります) 現在のステータスeg(0は拒否を示しますが、1は受け入れ済み、2は未処理を示します 私たちの友人関係は二国間です あなたがこれを経験したことがあれば、どんな提案も歓迎します 私の現在の設計は、(私は今、悪い右を考えて)このようなもので 、これらは列です frienshipId fromUserId toUserId status requestTime

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