ข้อผิดพลาด: ORA-65096: ชื่อผู้ใช้ทั่วไปหรือชื่อบทบาทไม่ถูกต้องใน oracle


118

ฉันเพิ่งติดตั้ง oracle11g และมันไม่มี Scott schema ดังนั้นฉันจึงพยายามสร้างมันด้วยตัวเอง ฉันได้รับสคริปต์ sql ของสคีมา "Scott" แต่เมื่อฉันพยายามเรียกใช้แบบสอบถาม "create user Scott ที่ระบุโดย tiger" จะแสดงข้อผิดพลาดต่อไปนี้:

ORA-65096: ชื่อผู้ใช้ทั่วไปหรือชื่อบทบาทที่ไม่ถูกต้องใน oracle

โดยทั่วไปแล้วจะไม่อนุญาตให้ฉันสร้างผู้ใช้ "Scott" เหตุใดจึงเป็นเช่นนั้นและฉันจะแก้ไขปัญหาได้อย่างไร


8
นั่นเป็นไปไม่ได้ที่จะมี11gคุณควรจะอยู่ต่อ12cไป
Lalit Kumar B

บางทีคุณอาจติดตั้งไคลเอนต์ 11g แต่คุณกำลังเชื่อมต่อกับฐานข้อมูล 12c? คุณติดตั้งอะไรกันแน่?
Alex Poole

1
ต่อท้าย C ## ก่อนชื่อผู้ใช้
Sathvik

คำตอบ:


346

99.9% ของเวลาที่เกิดข้อผิดพลาดORA-65096: invalid common user or role nameหมายความว่าคุณเข้าสู่ระบบ CDB เมื่อคุณควรเข้าสู่ระบบ PDB

แต่หากคุณยืนยันที่จะสร้างผู้ใช้ผิดวิธีให้ทำตามขั้นตอนด้านล่างนี้

อันตราย

การตั้งค่าพารามิเตอร์ที่ไม่มีเอกสารเช่นนี้ (ตามที่ระบุโดยขีดล่างนำหน้า) ควรทำภายใต้การดูแลของ Oracle Support เท่านั้น การเปลี่ยนพารามิเตอร์ดังกล่าวโดยไม่มีคำแนะนำดังกล่าวอาจทำให้สัญญาการสนับสนุนของคุณเป็นโมฆะ ดังนั้นคุณต้องยอมรับความเสี่ยงเอง

โดยเฉพาะอย่างยิ่งหากคุณตั้งค่าไว้"_ORACLE_SCRIPT"=trueการเปลี่ยนแปลงพจนานุกรมข้อมูลบางอย่างจะทำโดยคอลัมน์ ORACLE_MAINTAINED ตั้งค่าเป็น "Y" ผู้ใช้และวัตถุเหล่านั้นจะถูกแยกออกจากสคริปต์ DBA บางตัวอย่างไม่ถูกต้อง และอาจรวมอยู่ในสคริปต์ระบบบางสคริปต์อย่างไม่ถูกต้อง

หากคุณพอใจกับความเสี่ยงข้างต้นและไม่ต้องการสร้างผู้ใช้ทั่วไปด้วยวิธีที่ถูกต้องให้ใช้คำตอบด้านล่าง


ก่อนสร้างผู้ใช้เรียกใช้:

alter session set "_ORACLE_SCRIPT"=true;  

ฉันพบคำตอบที่นี่


6
โปรดทราบว่าเป็นพารามิเตอร์ที่ซ่อนอยู่และจะใช้เมื่อแนะนำโดยฝ่ายสนับสนุนของ Oracle เท่านั้น
Lalit Kumar B

5
การใช้พารามิเตอร์ขีดล่าง (ซ่อน) ในระบบการใช้งานจริงเป็นเรื่องอันตรายเนื่องจากอาจทำให้สัญญา Support ของคุณเป็นโมฆะ ดังนั้นคุณควรแนะนำให้ผู้อื่นตั้งค่าโดยไม่ให้คำเตือนที่เหมาะสม
APC

3
สิ่งนี้ผิดและไม่ได้รับการสนับสนุนใน oracle ฉันได้ใช้มันและทำให้เกิดปัญหาภายในอื่น
Firas Nizam

1
ทำงานบน Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Vitalie

2
@Victor - เนื่องจากเราได้รับอนุญาตให้เปลี่ยนแปลงเมื่อได้รับคำสั่งจาก Oracle Support เท่านั้น อย่างที่ฉันพูดการตั้งค่าพารามิเตอร์ที่ไม่มีเอกสารปิดแบ็ตของเราเองอาจทำให้สัญญาการสนับสนุนของเราเป็นโมฆะ โดยทั่วไปแล้วการตั้งค่าเริ่มต้นของ Oracle สำหรับพารามิเตอร์ที่เป็นเอกสารและไม่มีเอกสารมักจะมีเสียงสำหรับแอปพลิเคชันทั้งหมดและไม่จำเป็นต้องเปลี่ยนแปลง การปรับแต่งพารามิเตอร์ขีดล่างดึงดูดผู้ที่ชื่นชอบความตื่นเต้นของการเข้าถึงแบบลึกลับซึ่งเป็นเหตุผลที่แย่ที่สุดในการปรับแต่ง แต่ถ้าคุณไม่มีสัญญาการสนับสนุนที่ต้องกังวลคุณมีอิสระที่จะเสี่ยงต่อระบบของคุณในรูปแบบที่คุณเลือก ;-)
APC

56

ฉันเพิ่งติดตั้ง oracle11g

ORA-65096: ชื่อผู้ใช้ทั่วไปหรือชื่อบทบาทที่ไม่ถูกต้องใน oracle

ไม่คุณได้ติดตั้งOracle 12cแล้ว ข้อผิดพลาดนั้นสามารถเปิดได้เท่านั้น12cและไม่สามารถเปิด11gได้

ตรวจสอบเวอร์ชันฐานข้อมูลของคุณโดยไม่เกินทศนิยม 4 ตำแหน่งเสมอ:

SELECT banner FROM v$version WHERE ROWNUM = 1;

ฐานข้อมูลคอนเทนเนอร์หลายรายการของ Oracle 12cมี:

  • รูทคอนเทนเนอร์ ( CDB )
  • และ / หรือศูนย์ฐานข้อมูลแบบเสียบได้หนึ่งหรือหลายฐานข้อมูล ( 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 Post


หมายเหตุ : คำตอบที่แนะนำให้ใช้_ORACLE_SCRIPTพารามิเตอร์ที่ซ่อนอยู่เพื่อตั้งค่าเป็น true นั้นเป็นอันตรายในระบบที่ใช้งานจริงและอาจทำให้สัญญาการสนับสนุนของคุณเป็นโมฆะด้วย ระวังโดยไม่ปรึกษา Oracle สนับสนุนไม่ใช้พารามิเตอร์ซ่อน


ลิงก์ด้านบน "Oracle 12c Post Installation Mandatory Steps" เสีย ลิงค์ใหม่: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@ เฮียแน่ใจเหรอ? เพราะมันทำงานได้ดีขั้นตอนบังคับของการติดตั้ง Oracle 12c Post
Lalit Kumar B

47

ใน Oracle 12c ขึ้นไปเรามีฐานข้อมูลสองประเภท:

  1. Container DataBase (CDB) และ
  2. ฐานข้อมูลแบบเสียบได้ (PDB)

หากคุณต้องการสร้างผู้ใช้คุณมีความเป็นไปได้สองประการ:

  1. คุณสามารถสร้าง "ผู้ใช้คอนเทนเนอร์" หรือที่เรียกว่า "ผู้ใช้ทั่วไป"
    ผู้ใช้ทั่วไปเป็นของ CBD รวมถึง PDB ในปัจจุบันและอนาคต หมายความว่าพวกเขาสามารถดำเนินการใน Container DBs หรือ Pluggable DBs ตามสิทธิ์ที่กำหนด

    create user c##username identified by password;

  2. คุณสามารถสร้าง "ผู้ใช้ที่เสียบได้" หรือที่เรียกว่า "ผู้ใช้ภายใน"
    ผู้ใช้ในพื้นที่เป็นเพียง PDB เดียว ผู้ใช้เหล่านี้อาจได้รับสิทธิ์ระดับผู้ดูแลระบบ แต่สำหรับ PDB ภายในที่มีอยู่เท่านั้น ด้วยเหตุนี้คุณควรเชื่อมต่อกับ datable แบบเสียบได้ดังนี้:

    alter session set container = nameofyourpluggabledatabase;

    และที่นั่นคุณสามารถสร้างผู้ใช้ตามปกติ:

    create user username identified by password;

อย่าลืมระบุพื้นที่ตารางที่จะใช้ซึ่งจะมีประโยชน์ในระหว่างการนำเข้า / ส่งออกฐานข้อมูลของคุณ ดูข้อมูลเพิ่มเติมได้ที่https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


สไตล์คำตอบนี้เป็นที่ชื่นชอบและใช้งานได้รวดเร็ว
Zhiyong


-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##สตริงว่างเปล่า เมื่อเป็นโมฆะ - สามารถใช้ชื่อใดก็ได้สำหรับผู้ใช้ทั่วไป พบมี

ในระหว่างการเปลี่ยนค่านั้นคุณอาจประสบปัญหาอื่น - ORA-02095 - ไม่สามารถแก้ไขพารามิเตอร์ได้ซึ่งสามารถแก้ไขได้หลายวิธีขึ้นอยู่กับการกำหนดค่าของคุณ (ที่มา )

ดังนั้นสำหรับฉันจึงทำงานได้:

alter system set _common_user_prefix = ''; scope=spfile;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.