kesalahan: ORA-65096: pengguna umum atau nama peran tidak valid di oracle


118

Saya baru saja menginstal oracle11g, dan skema Scott hilang. Jadi saya mencoba membuatnya sendiri. Saya mendapat skrip sql dari skema "Scott", tetapi ketika saya mencoba menjalankan kueri "buat pengguna Scott diidentifikasi oleh harimau;" ini menampilkan kesalahan berikut:

ORA-65096: pengguna umum atau nama peran tidak valid di oracle.

Pada dasarnya ini tidak mengizinkan saya untuk membuat pengguna "Scott". Mengapa demikian, dan bagaimana cara memperbaiki masalah saya?


8
Itu tidak mungkin untuk dilakukan 11g, Anda harus tetap aktif 12c.
Lalit Kumar B

Mungkin Anda menginstal klien 11g, tetapi Anda terhubung ke database 12c? Apa sebenarnya yang Anda instal?
Alex Poole

1
Tambahkan C ## sebelum nama pengguna.
Sathvik

Jawaban:


344

BAHAYA

Menyetel parameter tak berdokumen seperti ini (seperti yang ditunjukkan oleh garis bawah di depan) hanya boleh dilakukan di bawah arahan Dukungan Oracle. Mengubah parameter tersebut tanpa panduan tersebut dapat membatalkan kontrak dukungan Anda. Jadi lakukan ini dengan resiko Anda sendiri.

Secara khusus, jika Anda mengatur "_ORACLE_SCRIPT"=true , beberapa perubahan kamus data akan dibuat dengan kolom ORACLE_MAINTAINED disetel ke 'Y'. Pengguna dan objek tersebut akan salah dikecualikan dari beberapa skrip DBA. Dan mereka mungkin salah disertakan dalam beberapa skrip sistem.

Jika Anda setuju dengan risiko di atas, dan tidak ingin membuat pengguna umum dengan cara yang benar, gunakan jawaban di bawah ini.


Sebelum membuat pengguna, jalankan:

alter session set "_ORACLE_SCRIPT"=true;  

Saya menemukan jawabannya di sini


6
Sadarilah, ini adalah parameter tersembunyi dan hanya akan digunakan jika direkomendasikan oleh dukungan Oracle.
Lalit Kumar B

5
Menggunakan parameter garis bawah (tersembunyi) dalam sistem Produksi berbahaya karena dapat membatalkan kontrak Dukungan Anda. Jadi Anda harus menyarankan orang untuk mengaturnya tanpa memberikan peringatan yang sesuai.
APC

3
ini salah dan tidak didukung di oracle, saya telah menggunakannya dan itu menyebabkan masalah internal lainnya.
Firas Nizam

1
Ia bekerja pada Oracle Database 18c Express Edition Rilis 18.0.0.0.0 - Produksi
Vitalie

2
@Victor - Karena kami hanya diizinkan untuk mengubahnya jika diarahkan oleh Dukungan Oracle. Seperti saya katakan, mengatur parameter yang tidak berdokumen dari kelelawar kita sendiri dapat membatalkan kontrak dukungan kita. Secara umum, pengaturan default Oracle untuk parameter terdokumentasi dan tidak terdokumentasi biasanya cocok untuk semua aplikasi, dan tidak perlu diubah. Mengubah parameter garis bawah menarik bagi orang-orang yang menikmati sensasi akses misterius, yang merupakan alasan terburuk untuk menyesuaikannya. Tetapi jika Anda tidak memiliki kontrak dukungan yang perlu dikhawatirkan, Anda bebas mengambil risiko merusak sistem Anda dengan cara apa pun yang Anda pilih ;-)
APC

56

Saya baru saja menginstal oracle11g

ORA-65096: pengguna umum atau nama peran tidak valid di oracle

Tidak, Anda telah menginstal Oracle 12c . Kesalahan itu hanya bisa aktif 12c, dan tidak bisa aktif 11g.

Selalu periksa versi database Anda hingga 4 tempat desimal:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Database container multitenant Oracle 12c memiliki:

  • wadah root ( CDB )
  • dan / atau nol, satu atau banyak database pluggable ( PDB ).

Anda harus membuat database sebagai database kontainer . Saat Anda mencoba untuk membuat pengguna dalam wadah, yaitu CDB $ ROOT , namun Anda harus membuat pengguna dalam database PLUGGABLE .

Anda tidak seharusnya membuat objek yang berhubungan dengan aplikasi di dalam kontainer, kontainer tersebut menyimpan metadata untuk database yang dapat dicolokkan. Anda harus menggunakan database pluggable untuk operasi database umum Anda. Jika tidak, jangan buat sebagai container, dan jangan gunakan multi-tenancy . Namun, 12cR2 dan seterusnya Anda tidak dapat membuat database non-container.

Dan kemungkinan besar, skema sampel mungkin telah diinstal, Anda hanya perlu membukanya di database yang dapat dicolokkan.

Misalnya, jika Anda membuat database pluggable sebagai 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"

Untuk menampilkan PDB dan terhubung ke database yang dapat dicolokkan dari wadah root:

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

Saya sarankan baca, Langkah Wajib Pasca Instalasi Oracle 12c


Catatan : Jawaban yang menyarankan untuk menggunakan _ORACLE_SCRIPTparameter tersembunyi ke true berbahaya dalam sistem produksi dan mungkin juga membatalkan kontrak dukungan Anda. Hati-hati, tanpa berkonsultasi dengan dukungan Oracle JANGAN gunakan parameter tersembunyi .


Tautan di atas "Langkah Wajib Pasca Instalasi Oracle 12c" rusak. Tautan baru: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri Apakah Anda yakin? Karena berfungsi dengan baik, Langkah Wajib Pasca Instalasi Oracle 12c
Lalit Kumar B

47

Di Oracle 12c dan yang lebih baru, kami memiliki dua jenis database:

  1. Container DataBase (CDB), dan
  2. DataBase Pluggable (PDB).

Jika Anda ingin membuat pengguna, Anda memiliki dua kemungkinan:

  1. Anda dapat membuat "pengguna kontainer" alias "pengguna umum".
    Pengguna umum termasuk dalam CBD serta PDB saat ini dan masa depan. Ini berarti mereka dapat melakukan operasi di DB Kontainer atau DB yang Dapat Dicolok sesuai dengan hak yang ditetapkan.

    create user c##username identified by password;

  2. Anda dapat membuat "pengguna yang dapat dicolokkan" alias "pengguna lokal".
    Pengguna lokal hanya dimiliki oleh satu PDB. Para pengguna ini mungkin diberi hak administratif, tetapi hanya untuk PDB yang ada di dalamnya. Untuk itu, Anda harus terhubung ke pluggable datable seperti itu:

    alter session set container = nameofyourpluggabledatabase;

    dan di sana, Anda dapat membuat pengguna seperti biasanya:

    create user username identified by password;

Jangan lupa untuk menentukan tablespace yang akan digunakan, ini dapat berguna selama impor / ekspor DB Anda. Lihat ini untuk informasi lebih lanjut tentangnya https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


Gaya jawaban ini adalah favorit saya, cepat digunakan.
Zhiyong

1

ubah set sesi "_ORACLE_SCRIPT" = true;

buat pengguna sec_admin yang diidentifikasi oleh "Chutinhbk123 @!";


-1

Buat ketergantungan pengguna pada alat penghubung database

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
Bisakah Anda memformat kode Anda dengan benar dan memberikan beberapa konteks mengapa ini menyelesaikan masalah dengan lebih baik daripada jawaban lainnya?
Nico Haase

-1

Mungkin, alternatif yang lebih aman "_ORACLE_SCRIPT"=trueadalah mengubah "_common_user_prefix"dari C##menjadi string kosong. Jika nol - nama apa pun dapat digunakan untuk pengguna umum. Ditemukan disana .

Selama mengubah nilai itu, Anda mungkin menghadapi masalah lain - ORA-02095 - parameter tidak dapat diubah, yang dapat diperbaiki dengan beberapa cara, berdasarkan konfigurasi Anda ( sumber ).

Jadi bagi saya bekerja itu:

alter system set _common_user_prefix = ''; scope=spfile;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.