lỗi: ORA-65096: tên người dùng hoặc vai trò thông thường không hợp lệ trong oracle


118

Tôi vừa cài đặt oracle11g và nó thiếu lược đồ Scott. Vì vậy, tôi đang cố gắng tự tạo ra nó. Tôi nhận được tập lệnh sql của lược đồ "Scott", nhưng khi tôi cố gắng chạy truy vấn "tạo người dùng Scott được xác định bởi tiger;" nó hiển thị lỗi sau:

ORA-65096: tên vai trò hoặc người dùng thông thường không hợp lệ trong oracle.

Về cơ bản, nó không cho phép tôi tạo người dùng "Scott". Tại sao lại như vậy và làm cách nào để khắc phục sự cố của tôi?


8
Điều đó là không thể có trong 11g, bạn phải vào 12c.
Lalit Kumar B

Có thể bạn đã cài đặt một ứng dụng khách 11g, nhưng bạn đang kết nối với cơ sở dữ liệu 12c? Chính xác thì bạn đã cài đặt những gì?
Alex Poole

Nối C ## trước tên người dùng.
Sathvik

Câu trả lời:


344

NGUY HIỂM

Việc đặt các thông số không có tài liệu như thế này (như được chỉ ra bởi dấu gạch dưới hàng đầu) chỉ nên được thực hiện dưới sự hướng dẫn của Bộ phận hỗ trợ Oracle. Việc thay đổi các thông số như vậy mà không có hướng dẫn như vậy có thể làm mất hiệu lực hợp đồng hỗ trợ của bạn. Vì vậy, làm điều này có nguy cơ của riêng bạn.

Cụ thể, nếu bạn đặt "_ORACLE_SCRIPT"=true, một số thay đổi từ điển dữ liệu sẽ được thực hiện với cột ORACLE_MAINTAINED được đặt thành 'Y'. Những người dùng và đối tượng đó sẽ bị loại trừ không chính xác khỏi một số tập lệnh DBA. Và chúng có thể được đưa vào một số tập lệnh hệ thống không chính xác.

Nếu bạn đồng ý với những rủi ro trên và không muốn tạo người dùng chung theo cách chính xác, hãy sử dụng câu trả lời bên dưới.


Trước khi tạo người dùng chạy:

alter session set "_ORACLE_SCRIPT"=true;  

Tôi đã tìm thấy câu trả lời ở đây


6
Hãy lưu ý, đây là một tham số ẩn và chỉ được sử dụng khi được bộ phận hỗ trợ của Oracle khuyến nghị.
Lalit Kumar B

5
Việc sử dụng các thông số gạch dưới (ẩn) trong hệ thống Sản xuất là rất nguy hiểm vì nó có thể làm mất hiệu lực của hợp đồng Hỗ trợ của bạn. Vì vậy, bạn nên khuyên mọi người đặt chúng mà không đưa ra cảnh báo thích hợp.
APC

3
điều này là sai và không được hỗ trợ trong oracle, tôi đã sử dụng nó và nó gây ra một vấn đề nội bộ khác.
Firas Nizam

1
Nó hoạt động trên cơ sở dữ liệu Oracle 18c Express Edition phiên bản 18.0.0.0.0 - Sản xuất
Vitalie

2
@Victor - Bởi vì chúng tôi chỉ được phép thay đổi chúng khi được Bộ phận hỗ trợ của Oracle hướng dẫn làm như vậy. Giống như tôi đã nói, việc thiết lập các thông số không có tài liệu khỏi cây gậy của chính chúng tôi có thể làm mất hiệu lực hợp đồng hỗ trợ của chúng tôi. Nói chung, cài đặt mặc định của Oracle cho các tham số được lập thành tài liệu và không có tài liệu thường phù hợp với tất cả các ứng dụng và không cần thay đổi. Việc tinh chỉnh các thông số gạch dưới hấp dẫn những người thích thú với cảm giác truy cập phức tạp, đây là lý do tồi tệ nhất để chỉnh sửa chúng. Nhưng nếu bạn không có hợp đồng hỗ trợ để lo lắng, bạn có thể có nguy cơ làm hỏng hệ thống của mình theo bất kỳ cách nào bạn chọn ;-)
APC

55

Tôi vừa cài đặt oracle11g

ORA-65096: tên người dùng hoặc vai trò thông thường không hợp lệ trong oracle

Không, bạn đã cài đặt Oracle 12c . Lỗi đó chỉ có thể bật 12c, và không thể bật 11g.

Luôn kiểm tra phiên bản cơ sở dữ liệu của bạn lên đến 4 chữ số thập phân:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Cơ sở dữ liệu vùng chứa nhiều đối tượng Oracle 12c có:

  • một vùng chứa gốc ( CDB )
  • và / hoặc không, một hoặc nhiều cơ sở dữ liệu có thể cắm được ( PDB ).

Bạn phải tạo cơ sở dữ liệu dưới dạng cơ sở dữ liệu vùng chứa . Trong khi, bạn đang cố gắng tạo người dùng trong vùng chứa, tức là CDB $ ROOT , tuy nhiên, bạn nên tạo người dùng trong cơ sở dữ liệu PLUGGABLE .

Bạn không được phép tạo các đối tượng liên quan đến ứng dụng trong vùng chứa, vùng chứa chứa siêu dữ liệu cho cơ sở dữ liệu có thể cắm thêm. Bạn nên sử dụng cơ sở dữ liệu có thể cắm thêm cho bạn các hoạt động cơ sở dữ liệu chung. Mặt khác, không tạo nó như một thùng chứa và không sử dụng nhiều hình thức thuê . Tuy nhiên, 12cR2 trở đi bạn không thể tạo cơ sở dữ liệu không chứa.

Và rất có thể, các lược đồ mẫu có thể đã được cài đặt sẵn, bạn chỉ cần mở khóa chúng trong cơ sở dữ liệu có thể cắm được.

Ví dụ: nếu bạn đã tạo cơ sở dữ liệu có thể cắm được dưới dạng 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"

Để hiển thị các PDB và kết nối với cơ sở dữ liệu có thể cắm thêm từ vùng chứa gốc:

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

Tôi khuyên bạn nên đọc, Các bước bắt buộc khi cài đặt Oracle 12c


Lưu ý : Các câu trả lời đề xuất sử dụng _ORACLE_SCRIPTthông số ẩn để đặt thành true sẽ nguy hiểm trong hệ thống sản xuất và cũng có thể làm mất hiệu lực hợp đồng hỗ trợ của bạn. Hãy cẩn thận, nếu không tham khảo ý kiến ​​hỗ trợ của Oracle KHÔNG sử dụng các tham số ẩn .


Liên kết trên "Các bước bắt buộc cài đặt bài đăng Oracle 12c" bị hỏng. Liên kết mới: docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri

@Heri Bạn có chắc không? Bởi vì nó hoạt động tốt Oracle 12c Đăng các Bước Bắt buộc
Lalit Kumar B

46

Trong Oracle 12c trở lên, chúng ta có hai loại cơ sở dữ liệu:

  1. Cơ sở dữ liệu vùng chứa (CDB) và
  2. DataBase có thể cài đặt (PDB).

Nếu bạn muốn tạo người dùng, bạn có hai khả năng:

  1. Bạn có thể tạo "người dùng vùng chứa" hay còn gọi là "người dùng chung".
    Người dùng phổ biến thuộc về CBD cũng như PDB hiện tại và tương lai. Nó có nghĩa là họ có thể thực hiện các hoạt động trong DB chứa hoặc DB có thể cài đặt theo các đặc quyền được chỉ định.

    create user c##username identified by password;

  2. Bạn có thể tạo "người dùng có thể cắm" hay còn gọi là "người dùng cục bộ".
    Người dùng cục bộ chỉ thuộc về một PDB duy nhất. Những người dùng này có thể được cấp đặc quyền quản trị, nhưng chỉ đối với PDB bên trong mà họ tồn tại. Đối với điều đó, bạn nên kết nối với dữ liệu có thể cắm được như vậy:

    alter session set container = nameofyourpluggabledatabase;

    và ở đó, bạn có thể tạo người dùng như thường lệ:

    create user username identified by password;

Đừng quên chỉ định (các) không gian bảng để sử dụng, nó có thể hữu ích trong quá trình nhập / xuất các DB của bạn. Xem phần này để biết thêm thông tin về nó https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


Phong cách của câu trả lời này là yêu thích của tôi, nhanh chóng để sử dụng.
Zhiyong

0

thay đổi tập hợp phiên "_ORACLE_SCRIPT" = true;

tạo người dùng sec_admin được xác định bởi "Chutinhbk123 @!";


-1

Tạo sự phụ thuộc của người dùng vào các công cụ kết nối cơ sở dữ liệu

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
Bạn có thể vui lòng định dạng mã của mình đúng cách và đưa ra một số ngữ cảnh tại sao điều này giải quyết vấn đề tốt hơn các câu trả lời khác không?
Nico Haase,

-1

Có thể, thay thế an toàn hơn "_ORACLE_SCRIPT"=truelà thay đổi "_common_user_prefix"từ C##chuỗi rỗng. Khi nó rỗng - bất kỳ tên nào cũng có thể được sử dụng cho người dùng thông thường. Đã tìm thấy ở đó .

Trong quá trình thay đổi giá trị đó, bạn có thể gặp phải vấn đề khác - ORA-02095 - không thể sửa đổi tham số, có thể được sửa theo một số cách, dựa trên cấu hình của bạn ( nguồn ).

Vì vậy, đối với tôi đã làm việc đó:

alter system set _common_user_prefix = ''; scope=spfile;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.