エラー:ORA-65096:Oracleの共通ユーザーまたはロール名が無効です


118

oracle11gをインストールしたところ、Scottスキーマがありませんでした。だから私はそれを自分で生成しようとしています。「Scott」スキーマのSQLスクリプトを取得しましたが、「tigerで識別されるScottを作成するユーザー」というクエリを実行しようとすると、次のエラーが表示されます。

ORA-65096:Oracleの共通ユーザーまたはロール名が無効です。

基本的に、ユーザー「Scott」を作成することはできません。それはなぜですか、どうすれば問題を解決できますか?


8
それをすることは不可能11gです、あなたはオンにすべき12cです。
Lalit Kumar B

11gクライアントをインストールしたのに、12cデータベースに接続しているのでしょうか?正確には何をインストールしましたか?
Alex Poole 2015年

1
ユーザー名の前にC ##を追加します。
サトビク

回答:


344

危険

このようなドキュメント化されていないパラメータの設定(先頭のアンダースコアで示される)は、Oracleサポートの指示の下でのみ行う必要があります。そのようなガイダンスなしでそのようなパラメーターを変更すると、サポート契約が無効になる場合があります。したがって、これは自己責任で行ってください。

具体的には、を設定する"_ORACLE_SCRIPT"=trueと、列ORACLE_MAINTAINEDが「Y」に設定された状態で、データディクショナリが変更されます。これらのユーザーとオブジェクトは、一部のDBAスクリプトから誤って除外されます。また、一部のシステムスクリプトに誤って含まれている場合があります。

上記のリスクに問題がなく、一般的なユーザーを正しい方法で作成したくない場合は、以下の回答を使用してください。


ユーザー実行を作成する前に:

alter session set "_ORACLE_SCRIPT"=true;  

ここで答えを見つけました


6
これは非表示のパラメーターであり、Oracleサポートによって推奨された場合にのみ使用されることに注意してください。
Lalit Kumar B

5
サポート契約が無効になる可能性があるため、実稼働システムでアンダースコア(非表示)パラメータを使用するのは危険です。したがって、適切な警告を出さずに設定するようにアドバイスする必要があります。
APC

3
これは間違っており、オラクルではサポートされていません。私はそれを使用しましたが、別の内部問題を引き起こしました。
Firas Nizam

1
生産-それは、Oracle Database 18cのExpress Editionのリリース18.0.0.0.0上で動作します
Vitalie

2
@Victor-Oracleサポートから指示された場合にのみ変更できるため。私が言ったように、文書化されていないパラメーターを独自のバットから設定すると、サポート契約が無効になる場合があります。より一般的には、文書化されたパラメータと文書化されていないパラメータのOracleのデフォルト設定は、通常、すべてのアプリケーションに対して適切であり、変更する必要はありません。アンダースコアのパラメーターを微調整することは、難解なアクセスのスリルを楽しむ人々にとって魅力的です。これは、それらを微調整する最悪の理由です。ただし、心配するサポート契約がない場合は、選択した方法でシステムに損傷を与えるリスクがあります;-)
APC

55

oracle11gをインストールしました

ORA-65096:Oracleの無効な共通ユーザーまたはロール名

いいえ、Oracle 12cをインストールしました。そのエラーはオン12cになるだけで、オンになることはありません11g

常にデータベースのバージョンを小数点以下4桁まで確認します。

SELECT banner FROM v$version WHERE ROWNUM = 1;

Oracle 12cマルチテナントコンテナーデータベースには、

  • ルートコンテナ(CDB
  • ゼロ、1つまたは多数のプラグ可能なデータベース(PDB)。

データベースをコンテナデータベースとして作成しておく必要があります。一方、コンテナ(つまりCDB $ ROOT)にユーザーを作成しようとしていますが、ユーザーをPLUGGABLEデータベースに作成する必要があります

コンテナー内にアプリケーション関連のオブジェクトを作成することは想定されていません。コンテナーには、プラガブルデータベースのメタデータが保持されます。一般的なデータベース操作には、プラガブルデータベースを使用する必要があります。それ以外の場合は、コンテナとして作成せず、マルチテナンシーを使用しないでください。ただし、12cR2以降では、コンテナ以外のデータベースを作成することはできません。

そしておそらく、サンプルスキーマが既にインストールされている可能性があります。プラグイン可能なデータベースでそれらのロック解除するだけです。

たとえば、プラガブルデータベースをpdborcl次のように作成したとします。

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"

PDBを表示し、ルートコンテナーからプラガブルデータベースに接続するには:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

Oracle 12cのインストール後の必須手順を読むことをお勧めします


_ORACLE_SCRIPT非表示パラメーターを使用してtrueに設定することを提案する回答は、実動システムでは危険であり、サポート契約を無効にする可能性もあります。Oracleサポートに問い合わせることなく、非表示のパラメーターを使用しないでください


上記のリンク「Oracle 12cインストール後の必須手順」が壊れています。新しいリンク:docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri


46

Oracle 12c以降では、2種類のデータベースがあります。

  1. Container DataBase(CDB)、および
  2. プラグ可能なデータベース(PDB)。

ユーザーを作成する場合、2つの可能性があります。

  1. 「コンテナユーザー」または「共通ユーザー」を作成できます。
    一般的なユーザーは、CBDだけでなく、現在および将来のPDBにも属しています。つまり、割り当てられた権限に応じて、コンテナDBまたはプラグ可能なDBで操作を実行できます。

    create user c##username identified by password;

  2. 「プラグイン可能なユーザー」または「ローカルユーザー」を作成できます。
    ローカルユーザーは単一のPDBにのみ属しています。これらのユーザーには管理特権を与えることができますが、そのユーザーが存在するPDBに対してのみです。そのためには、そのようなプラガブルデータブルに接続する必要があります。

    alter session set container = nameofyourpluggabledatabase;

    そこで、通常のようにユーザーを作成できます。

    create user username identified by password;

使用するテーブルスペースを指定することを忘れないでください。これは、DBのインポート/エクスポート時に役立ちます。詳細については、こちらをご覧くださいhttps://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


この回答のスタイルは私のお気に入りで、すぐに使用できます。
Zhiyong

0

セッションセットの変更 "_ORACLE_SCRIPT" = true;

「Chutinhbk123 @!」で識別されるユーザーsec_adminを作成します。


-1

データベース接続ツールへのユーザー依存関係を作成する

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer

3
コードを適切にフォーマットして、これが他の回答よりも問題をよりよく解決する理由を教えてください。
Nico Haase

-1

より安全な代替手段"_ORACLE_SCRIPT"=trueは、"_common_user_prefix"からC##空の文字列に変更することです。nullの場合-一般的なユーザーに任意の名前を使用できます。見つかりまし

その値の変更中に、別の問題に直面する可能性があります-ORA-02095-パラメータは変更できません。構成(ソース)に基づいて、いくつかの方法で修正できます。

だから私はそれを働いた:

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