タグ付けされた質問 「oracle-11g-r2」

Oracle Database 11gリリース2。検索のためにoracleにもタグ付けしてください。

14
ListAggの重複を排除する(Oracle)
Oracle 11.2より前は、カスタム集計関数を使用して列を行に連結していました。11.2 LISTAGG関数を追加したので、代わりにそれを使用しようとしています。私の問題は、結果の重複を排除する必要があり、それができないようだということです。 以下に例を示します。 CREATE TABLE ListAggTest AS ( SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual CONNECT BY rownum<=6 ); SELECT * FROM ListAggTest; NUM1 NUM2 ---------- --------------------- 1 2 2 2 << Duplicate 2 3 3 4 4 5 5 6 6 私が見たいのはこれです: NUM1 NUM2S ---------- -------------------- 1 2-3-4-5-6 …

4
Oracleデータベースのsysアカウントとsystemアカウントの違いは何ですか?
sqlplusを使用して管理者としてOracleに接続するには、2つの方法があります。 sqlplus sys as sysdba sqlplus system/manager これらのアカウントはさまざまな目的に使用する必要があると思います。 これら2つのスキーマはどのタスクを対象としていますか?それらのうちいつどちらを使用すればよいですか?


4
OS認証がOracleデータベースのセキュリティ低下と見なされるのはなぜですか?
Oracleは、OSに応じて認証を廃止されたOracle Databaseセキュリティ・ガイド言いれ、 REMOTE_OS_AUTHENTパラメータはOracle Database 11gリリース1(11.1)で非推奨となり、下位互換性のためにのみ保持されていることに注意してください。 さらに、ほとんどのセキュリティ情報とツールは、OS(外部)認証をセキュリティの問題と見なし ています。なぜそうなのかを理解しようとしています。OS認証のいくつかの利点を次に示します。 OS認証がなければ、アプリケーションは、それぞれ独自のセキュリティモデルと脆弱性を持つさまざまなアプリケーションにパスワードを保存する必要があります。 ドメイン認証はすでに安全でなければなりません。そうでない場合、データベースセキュリティはデータベースへのアクセスを遅くするだけで、それを防ぐことはできません。 1つのドメインパスワードのみを覚える必要があるユーザーは、接続する必要があるさまざまなデータベースの数が増えるにつれて、安全性の低いデータベースパスワードを作成するよりも簡単に、より安全なドメインパスワードを作成できます。

6
Oracleテーブルがロックされているかどうかを確認する方法は?
Oracle Enterprise 11gR2にインストールされているBIソフトウェアとリポジトリデータベースを使用しています。 これらのバッチレポートの一部は、まだロックされている可能性のあるデータベーステーブルにアクセスしようとします。Oracleテーブルがロックされているかどうかを確認するにはどうすればよいですか?分析の履歴詳細のように表示されるSQLステートメントはありますか?

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 スキーマとテーブルスペース名のみを変更しました。テーブルとインデックスの名前は、クエリプランのスクリーンショットと同じであることがわかります。

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
「ORA-01950:表領域「SYSTEM」に権限がありません」:エラーは何ですか?
先にユーザーを作成しました: SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded. しかし、としてログインしsuhail、作成しようとするtableと、エラーが表示されますORA-01950: no privileges on tablespace 'SYSTEM'。それはどんなエラーですか?なぜ発生するのですか? SQL> connect suhail Enter password: Connected. SQL> create table suhail_table(name char(10)); create table suhail_table(name char(10)) * ERROR at line 1: ORA-01950: no privileges on tablespace 'SYSTEM' Oracle …

4
空白、セミコロン、およびスラッシュを含むSQLPlusでスクリプトを実行します
ときどき、SQL DeveloperまたはToadで正常に実行されるスクリプトを入手しますが、SQL * Plusから正常に実行するには変更が必要です。それぞれが空白行、セミコロン、およびスラッシュを含む複数のステートメントを含む最悪の例です: INSERT INTO t1 VALUES ('a ; / '); INSERT INTO t1 VALUES ('b ; / '); DELETE FROM t1 WHERE c1 = 'c ; / '; さまざまな理由により、これらのステートメントはSQL * Plusから実行する必要があります。空白行は簡単に解決できます... set sqlblanklines on をsqlterminator変更および/またはオフにすることができますが、どちらもコードの変更が必要であり、前者は問題を解決せずに移動し、埋め込みスラッシュの問題は解決しません。 最善の答えは、何らかの方法で環境を変更することにより(sqlblanklinesが行うように)これらのステートメントを変更せずに実行できるようにする方法です。それが不可能な場合は、おそらくスクリプトをプログラムで変更する方法があります。手動での変更を避けようとしています。

2
ディスク領域を解放する方法は?どのログ/ディレクトリを削除しますか?
Linuxマシンのディスク領域を解放したい。スペース使用量をドリルダウンすると、次のディレクトリのサイズが大きいことがわかりました /u01/app/11.2.0/grid/cv/log /u01/app/11.2.0/grid/log/diag/tnslsnr/r1n1/listener_scan2/alert (Contains xml files) /u01/app/11.2.0/grid/rdbms/audit(Contains .aud files) /home/oracle/oradiag_oracle/diag/clients/user_oracle/host_XXXXXXXXXX/alert(Contains xml files) /u01/app/oracle/diag/rdbms/crimesys/crimesys1/alert (Contains xml files) これらのディレクトリからコンテンツを削除できますか?注:ディレクトリではなくコンテンツを意味します。

2
新しいまたは異なるテーブルスペースへのスキーマのインポート
データの作成元とは異なる単一の新しいテーブルスペースまたは異なるテーブルスペースを使用して、スキーマをOracle 11gR2にインポートする便利な方法はありますか? 例として、OLDDBからBLOG_DATAをエクスポートしました。すべてのユーザーデータはUSERSテーブルスペースに保存されています。 NEWDBで、BLOG_DATAスキーマをインポートしますが、このユーザー専用に作成されたBLOG_DATAテーブルスペースにユーザーオブジェクトを保存します。 BLOG_DATAユーザーを作成し、BLOG_DATAテーブルスペースを作成し、そのユーザーのデフォルトのテーブルスペースとして設定し、適切な無制限のクォータを追加しました。 CREATE TABLESPACE blog_data DATAFILE SIZE 1G; CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data; GRANT connect,resource TO blog_data スキーマは次のようなものでOLDDBからエクスポートされました exp blog_data/secretpassword@OLDDB file=blog_data.dmp 以下のフィルの優れた答えを読んだ後、私は不思議に思いました: データにはデフォルトの表領域(ユーザーがクォータを持っている唯一の表領域)以外に移動する場所がないため、これによりimpはすべてのユーザーオブジェクトをそのデフォルトの表領域に配置するように強制されますか? imp blog_data/secretpassword@NEWDB file=blog_data.dmp これにより、newdbのblog_dataテーブルスペースにblog_dataスキーマ全体が配置されますか?これが機能しない理由や、特定のオブジェクトなどで問題が発生する理由はありますか? 更新: 簡単なテストを行ったところ、これが事実であることがわかりました。Impオブジェクトを元のテーブルスペースに配置できない場合(テーブルスペースが存在しないなど)、そのユーザーのデフォルトのテーブルスペースにオブジェクトを配置します。詳細な説明:http : //www.dolicapax.org/?p=57 それでも、Philが示唆しているようにData Pumpを使用することは、好ましい選択肢であると思われます。

2
PL / SQLを実行するアプリケーション開発者のOracleでの作業
Oracleのスキーマレベルの権限の欠如をどのように処理しますか?オラクルのセキュリティアーキテクチャは、オブジェクトレベルの権限のみを必要とするアプリケーションに適しています。また、制限をほとんど必要としないDBAにも適しています。ただし、フロントエンドアプリケーションと複数のスキーマのPL / SQLを使用して開発を行うプログラマにとって、アーキテクチャには大きなギャップがあるようです。以下に、私のオプションとその欠点をいくつか示します。 各プログラマーが独自のスキーマで開発を行うようにします。DBAは、それらを必要とするプログラマーにオブジェクトレベルの特権を付与します。パッケージ開発はすべてDBAが行う必要があります。主な欠点は、プログラマーがデータベースのパフォーマンスを損なうために、少しバケットのようにデータベースを使用することです。プログラマーにデータベースで開発してほしいのですが、この方法では大いに落胆します。 各プログラマーに開発に必要な12個程度のスキーマのユーザー名/パスワードを与えます。これらのアプリケーションスキーマにプロシージャ、テーブルなどを作成するためのアクセス許可を与えます。このアプローチの欠点のいくつかは、複数のログイン自分自身としてログインすることはほとんどありません。クロススキーマ開発も困難です。 プログラマーが開発に必要な各スキーマのプロキシ認証特権を付与します。これにより、プロキシ権限以外の権限を付与する必要なく、ユーザーは自分自身としてログインしたままになります。欠点には、プロキシするスキーマごとに個別の接続を維持する必要があるプログラマーが含まれます。接続を絶えず変更する必要があるため、クロススキーマ開発はより面倒です。また、認証に合格したパブリックデータベースリンクを使用するパッケージは、プロキシ接続内でコンパイルされません。 各プログラマにDBA特権を付与します。–ここでの欠点はセキュリティです。スキーマプログラマーをスキーマから締め出すことはできず、プログラマーは他のプログラマー(DBA)になりすますことができます。 各プログラマーにSELECT / INSERT / CREATE / etcを付与するオプションがないようです。開発を行うために必要なスキーマに対する権限。自分でログインして、1つの接続を使用して作業を行います。アクセスできるスキーマ内の新しいオブジェクトはすぐに使用できます。 何か不足していますか?PL / SQL開発を行うアプリケーションプログラマをどのように扱いますか?

1
Oracle Databaseのコミットvs高速コミットvsコミットアウト
Oracle Databaseに関連するこれら3つの用語の違いについて、誰かが私の理解を検証できるかどうか疑問に思っていました。 多くの情報源はこれらの用語を混同し、それらを詳細に説明していないため、情報を見つけるのは少し難しいものでした。 私が収集したものから: コミットと高速コミットはまったく同じです。すべてのコミットは高速コミットです。 基本的に、高速コミットは、元に戻す/ロールバックセグメントヘッダーのトランザクションテーブルのフラグを更新するだけで、トランザクションがコミットされたことを示します。ただし、実際のブロックは再検討されません。つまり、データブロックのヘッダーにある対象トランザクションリスト(ITL)のUNDOバイトアドレス(UBA)は、対応するUNDOセグメントのトランザクションテーブルを指します。さらに、対応する行のロックバイトは解放されず、ITLのロックカウントは変更されません(行はロックされたままです)。 コミットクリーンアウトでは、ブロックが再訪され、ITLがコミットSCNで更新されます。ただし、ITLのロックカウントと各行に格納されているロックバイトはまだ更新されず(高速コミットのように行はロックされたままです)、ブロックが変更されても、REDOは生成されません。 正常にコミットされた(==高速コミットされた)ブロックは、次にタッチされたときに遅延ブロッククリーンアウトを実行します(そしてREDOを生成します)。 コミットクリーンアウトが行われたブロックは、次にタッチされたときに遅延ログブロッククリーンアウトが行われます(そして、REDOが生成されます)。 誰かがこれらのポイントを検証できることを願っています!ありがとう!

2
LNNVL正当化
LNNVLは、Oracleの組み込み関数であり、FALSEまたはUNKNOWNと評価される条件に対してTRUEを返し、TRUEと評価される条件に対してFALSEを返します。私の質問は、単にNULL値を処理するのではなく、真理条件の反対を返すことの利点は何でしょうか? たとえば、ヌルを含む可能性のあるStartCommission列とCurrentCommission列を持つEmpテーブルがあるとします。次の例では、値がnullでない行のみが返されます。 SELECT * FROM Emp WHERE StartCommission = CurrentCommission; いずれかのコミッションがnullである行を含めたい場合、次のようなことができます。 SELECT * FROM Emp WHERE StartCommission = CurrentCommission OR StartCommission IS NULL OR CurrentCommission IS NULL; この構文を短縮する関数が存在するように思われますが、LNNVLを使用すると、すべての等しくないレコードとNULLを持つすべてのレコードが返されます。 SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission); これにNOTを追加すると、nullのない行のみが返されます。この場合に望ましい機能は、真の条件を真、偽の条件を偽に保ち、未知の条件を真と評価することです。ここで低ユースケースを実際に作成しましたか?不明をtrueに、trueをfalseに、falseをtrueにしたいというのは本当ですか? create table emp (StartCommission Number(3,2), CurrentCommission Number(3,2)); insert into emp values (null,null); insert …

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