タグ付けされた質問 「oracle」

Oracleデータベースのすべてのバージョン。質問でそのコンテキストが重要な場合は、oracle-11g-r2のようなバージョン固有のタグを追加します。アプリケーションやミドルウェアなどのOracle製品や、MySQLやBerkeleyDBなど、Oracleが所有するその他のデータベース製品には使用しないでください。

6
Oracleで非常に大きなレコードセットを削除する最良の方法
私は、非常に大きな(1つのテーブルに5億行を超える1TBに近いデータ)Oracleデータベースバックエンドを持つアプリケーションを管理しています。データベースは実際には何もしません(SProcsもトリガーも何もしません)、それは単なるデータストアです。 毎月、2つのメインテーブルからレコードを削除する必要があります。パージの基準はさまざまで、行の経過時間といくつかのステータスフィールドの組み合わせです。通常、1か月あたり1,000〜5,000万行をパージします(インポートにより、週に約300〜500万行を追加します)。 現在、この削除は約50,000行のバッチで実行する必要があります(つまり、50000の削除、comit、50000の削除、コミット、繰り返し)。バッチ全体を一度にすべて削除しようとすると、データベースが約1時間応答しなくなります(行数によって異なります)。このようなバッチで行を削除することはシステム上で非常に大雑把であり、通常、1週間にわたって「時間の許す限り」それを行う必要があります。スクリプトを継続的に実行できるようにすると、ユーザーが受け入れられないパフォーマンスの低下を招く可能性があります。 この種のバッチ削除もインデックスのパフォーマンスを低下させ、最終的にデータベースのパフォーマンスを低下させる他の影響があると考えています。1つのテーブルに34個のインデックスがあり、インデックスデータのサイズは実際にはデータ自体よりも大きくなっています。 ITスタッフの1人がこのパージを行うために使用するスクリプトを次に示します。 BEGIN LOOP delete FROM tbl_raw where dist_event_date < to_date('[date]','mm/dd/yyyy') and rownum < 50000; exit when SQL%rowcount < 49999; commit; END LOOP; commit; END; このデータベースは 99.99999%増加している必要があり、年に一度だけ2日間のメンテナンスウィンドウがあります。 これらのレコードを削除するためのより良い方法を探していますが、まだ見つかっていません。助言がありますか?

1
Oracleデータベースユーザーを複製する
Oracleデータベースのレビューを行うために、外部の監査人が来ます。レビューを実行するためのツールを実行するため、データベースに接続してそこから情報を取得できるユーザーIDが必要です。 このためにデータベースに既存のユーザーがいます。ただし、これは実稼働IDであり、ロックアウトすることはできません。ロールと権限を含むこのIDを複製/複製したいと思います。 Oracleでこれを行う方法はありますか?
17 oracle 

1
Oracle 11gリスナーがORA-12514およびORA-12505エラーで失敗する
開発マシンでOracle 11gのインスタンスをローカルで実行し、SqlPlusを介してローカルインスタンスに直接接続できます。 c:\>sqlplus ace SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 11 11:50:20 2013 Copyright (c) 1982, 2010, Oracle. All rights reserved. Enter password: Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - Beta SQL> select count(*) from my_table ; COUNT(*) ---------- 5297 しかし、リスナーを介して接続することはできません。 c:\>sqlplus -L "user/pw@(DESCRIPTION = (ADDRESS …

3
JOIN条件とWHERE条件の実行に違いはありますか?
これら2つのクエリ例の間にパフォーマンスの違いはありますか? クエリ1: select count(*) from table1 a join table2 b on b.key_col=a.key_col where b.tag = 'Y' クエリ2。 select count(*) from table1 a join table2 b on b.key_col=a.key_col and b.tag = 'Y' 唯一の違いは補足条件の配置であることに注意してください。最初はWHERE句を使用し、2番目は条件をON句に追加します。 Teradataシステムでこれらのクエリを実行すると、Explainプランは同一であり、JOINステップはそれぞれの場合に追加の条件を示します。しかし、MySQLに関するこのSOの質問では、回答の1つはWHERE、結合が行われた後に処理が行われるため、2番目のスタイルが好ましいことを示唆しています。 このようなクエリをコーディングする際に従うべき一般的なルールはありますか?データベースに明らかに影響を与えないため、プラットフォームに依存する必要があると思いますが、おそらくそれはTeradataの単なる機能です。また、プラットフォームに依存する場合は、いくつかのドキュメントリファレンスを入手してください。何を探すべきか本当に分かりません。

3
NVLは何を表していますか?
何のNVL略ですか?私は、クエリ結果からNULL以外の値を除外するために使用されるOracleおよびInformix(おそらく他のいくつかの場合もある)関数について話している(COALESCE他のデータベースと同様)。

1
1行のテーブルの用語?
1の基数との関係を表す特定の用語はありますか? 特に、RDBMSの「特別な」1行テーブル、たとえばDUAL(Oracle)、SYSIBM.SYSDUMMY1(DB2、Derby)、RDB$DATABASE(Interbase、Firebird)について考えています。

7
複合インデックス:最も選択的な列が最初ですか?
私は読んでいてcomposite indexes、注文について少し混乱しています。このドキュメント(半分以下)が言います 一般に、最も頻繁に使用されると予想される列をインデックスの最初に配置する必要があります。 しかし、それが言った直後 最も選択的な列を最初に置く複合インデックスを作成します。つまり、値が最も多い列です。 オラクルはまた、ここで言い換えると すべてのキーがWHERE句で同じ頻度で使用される場合、CREATE INDEXステートメントでこれらのキーを最も選択性の高いものから最も選択性の低いものに並べると、クエリのパフォーマンスが向上します。 しかし、私は違う答えをするSOの答えを見つけました。それは言う 列を最も選択性の低い列を最初に、最も選択性の高い列を最後に配置します。単独で使用される可能性が高いカラムとのタイリードの場合。 私が参照した最初のドキュメントは、最も頻繁に使用されるものを最初に確認する必要があると述べていますが、SOの答えは、タイブレークのみであるべきだと述べています。次に、順序も異なります。 このドキュメントはまた語るskip scanningと言います スキップスキャンは、複合インデックスの先頭列に個別の値がほとんどなく、インデックスの先頭以外のキーに個別の値が多数ある場合に有利です。 別の記事は言う プレフィックス列は、クエリで最も識別性が高く、最も広く使用される必要があります 最も差別的であることは最も特徴的だと思います。 この研究はすべて、私に同じ質問を導きます。最も選択的な列は最初か最後か?最初の列は、タイブレークで最も使用され、最も選択的である必要がありますか? これらの記事は互いに矛盾しているように見えますが、いくつかの例を提供しています。私が集めたものから、もしあなたが予想しているなら、注文least selective columnの最初のものであることがより効率的であるように思われますIndex Skip Scans。しかし、それが正しいかどうかはよくわかりません。

3
Oracleは長いキーに一意のインデックスを使用していません
テストデータベースに25万行のテーブルがあります。(本番環境には数億個あります。同じ問題があります。)テーブルには、nvarchar2(50)文字列識別子があり、nullではなく、一意のインデックスが付いています(PKではありません)。 識別子は、テストデータベースに8つの異なる値(および運用中に約1000)を持つ最初の部分、@記号、最後に1〜​​6桁の数字で構成されます。たとえば、「ABCD_BGX1741F_2006_13_20110808.xml @」で始まる5万行があり、その後に5万の異なる数字が続く場合があります。 識別子に基づいて単一の行を照会すると、カーディナリティは1と推定され、コストは非常に低く、正常に機能します。IN式またはOR式で複数の識別子を使用して複数の行を照会すると、インデックスの推定が完全に間違っているため、テーブル全体のスキャンが使用されます。ヒントを使用してインデックスを強制すると、非常に高速になります。実際には、テーブル全体のスキャンが1桁遅く実行されます(運用環境でははるかに遅くなります)。それはオプティマイザーの問題です。 テストとして、まったく同じDDLとまったく同じコンテンツを使用してテーブル(同じスキーマ+テーブルスペース)を複製しました。適切な測定のために最初のテーブルに一意のインデックスを再作成し、クローンテーブルにまったく同じインデックスを作成しました。私はDBMS_STATS.GATHER_SCHEMA_STATS('schemaname',estimate_percent=>100,cascade=>true);。インデックス名が連続していることもわかります。したがって、2つのテーブルの唯一の違いは、最初のテーブルが長期間にわたってランダムな順序でロードされ、ブロックがディスクに(他のいくつかの大きなテーブルと一緒にテーブルスペースで)散らばっていることです。 INSERT-SELECT。それ以外、違いは想像できません。(元のテーブルは最後の大規模な削除以降縮小されており、その後の単一の削除はありません。) 病気のテーブルとクローンテーブルのクエリプランを次に示します(黒いブラシの下の文字列は、画像全体で同じであり、灰色のブラシの下でも同じです) (この例では、黒のブラシをかけられた識別子で始まる1867行があります。2行クエリは1867 * 2のカーディナリティを生成し、3行クエリは1867 * 3のカーディナリティを生成します。偶然ですが、Oracleは識別子の終わりを気にしていないようです) この動作の原因は何ですか?本番環境でテーブルを再作成するのは明らかに高価です。 USER_TABLES:http: //i.stack.imgur.com/nDWze.jpg USER_INDEXES:http : //i.stack.imgur.com/DG9um.jpg スキーマとテーブルスペース名のみを変更しました。テーブルとインデックスの名前は、クエリプランのスクリーンショットと同じであることがわかります。

1
2週間非アクティブになった後、Oracleセッションがまだ生きている理由
DB:Oracle 10g O / S:Windows Server 2003 64ビット Webアプリケーションによって生成されたOracleセッションのリストを照会します(program = w3wp.exeによるフィルター) select * from V$session where UPPER(program) LIKE '%W3%' order by logon_time Logon_Timeによると、2012年7月31日または2012年8月1日からのセッション、または本日(2012年8月21日)より前のセッションがまだ生きているのはなぜですか? sqlnet.oraで構成しました:SQLNET.EXPIRE_TIME = 20したがって、20分ごとにOracleが接続がまだアクティブかどうかをチェックしていることを意味します。 すべてのユーザースキーマにはデフォルトのプロファイルがあります。これは、セッションが期限切れになったり死ぬことはないということを意味しますか? Philのコメントに応えて追加: Philの回答に応じて追加:

2
WITHを使用した複数の操作
使用して複数の操作を実行する方法があるWITH文は? 何かのようなもの WITH T AS ( SELECT * FROM Tbl ) BEGIN OPEN P_OUTCURSOR FOR SELECT * FROM T; SELECT COUNT(*) INTO P_OUTCOUNT FROM T; END; データとそのカウントを選択したい...
16 oracle  select  cte 

3
SQLとPL / SQLを区別する方法は?
質問は馬鹿げているように聞こえるかもしれませんが、この部分は理解できませんでした。 SQL * Plusは、SQLとPL / SQLの両方で機能します。一部のコードがSQLであるかPL / SQLであるかをどのようにして知ることができますか?私のコードにforループがある場合、それはもうSQLではありませんか? PL / SQLは、ループ、条件などを含むSQLの拡張機能です。その後、SQLコードはデフォルトでPL / SQLコードですか?そうじゃない? SQLとPL / SQLの間に境界はありますか? この質問を引き起こしたb / w SQLとPL / SQLを区別する2つの例: これら2つのcreate tableステートメントの違いは何ですか? /programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

4
SQL * Plusコマンドの最後のセミコロンの意味は何ですか?
create table、insert intoなどの一部のステートメントは、最後にセミコロンを使用します。 CREATE TABLE employees_demo ( employee_id NUMBER(6) , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo NOT NULL ) ; 他の人が好きな間 set echo on connect system/manager 同様にセミコロンなしで通過します。 この背後にある理由は何ですか?セミコロンを配置する場所と配置しない場所を自分で決定するにはどうすればよいですか?

2
特異なOracle外部結合構文のケース
Oracleの外部結合構文からSQL標準の外部結合構文に移植されることになっているクエリで、次のことがわかりました。 SELECT ... FROM A, B, C, D, E WHERE A.A_ID = B.A_ID AND B.B_ID = C.A_ID(+) AND B.B_KEY = C.B_KEY(+) AND C.C_ID = D.C_ID(+) AND B.A_ID = E.A_ID(+) AND B.B_KEY = E.B_KEY(+) AND 'CONSTANT' = C.X_ID(+) 現在、外部結合構文の翻訳は通常非常に機械的なプロセスですが、その最後の行は私を困惑させました。どういう意味ですか?どのような効果がありますか?
16 oracle  join  syntax 

6
Oracleデータベースの推奨RAID構成は何ですか?
RAID(安価なディスクの冗長アレイ)には、さまざまな構成(RAID-0、RAID-1 ...)が付属しています。Oracleデータベースをインストールするときにセットアップして使用する推奨RAID構成は何ですか。データベースは、主にデータウェアハウスとして使用されます。


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