Daftar Isi
- Pengantar
- Menemukan petunjuk
- Solusi
- Referensi
Kesalahan:ORA-65096:nama pengguna atau peran umum yang tidak valid di Oracle
Pengantar
Hallo teman-teman,
Saya baru mengenal backend dan django, jadi saya memutuskan untuk mengikuti tutorial django
Berikut ini beberapa detail yang saya gunakan untuk memenuhi dan memperbaiki kesalahan ini:
- Django versi 3.2.5
- Database:Oracle Database Express Edition (XE) Rilis 18.4.0.0.0 (18c)
- Windows 11
Semester depan, saya ada kursus menggunakan Oracle jadi saya memutuskan untuk menggunakan Oracle daripada menggunakan Sqlite seperti yang digunakan tutorial Django
Saya telah berjuang dengan baris ini 'ORA-65096:nama pengguna atau peran umum yang tidak valid di Oracle ' untuk dua hari
Jadi saya ingin membuat postingan ini sebagai panduan bagi siapa saja yang mengalami masalah ini seperti saya.
Menemukan petunjuk
python manage.py test polls
Apa yang kita harus Dapatkan
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/path/to/mysite/polls/tests.py", line 16, in test_was_published_recently_with_future_question
self.assertIs(future_question.was_published_recently(), False)
AssertionError: True is not False
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
Destroying test database for alias 'default'...
Apa yang sebenarnya kita dapatkan :(
Creating test database for alias 'default'...
Failed (ORA-01543: tablespace 'TEST_SYSTEM' already exists)
It appears the test database, test_system, already exists. Type 'yes' to delete it, or 'no' to cancel: yes
Destroying old test database for alias 'default'...
Creating test user...
Failed (ORA-65096: invalid common user or role name)
Got an error creating the test user: ORA-65096: invalid common user or role name
Jadi program gagal saat mencoba membuat pengguna baru
Mari kita buka sqlplus untuk membuat pengguna baru secara manual, saya mendapatkan kesalahan yang sama ketika mencoba membuat pengguna baru
"ORA-65096:nama peran atau pengguna umum tidak valid"
Mengapa?
Saya masuk sebagai pengguna administrator dengan hak penuh
Jadi, saya melakukan beberapa penelitian dan menemukan bahwa
SQL> show con_name
CON_NAME
-----------------------------------
CDB$ROOT
Kami berada di wadah 'CDB$ROOT', yang merupakan penyimpan semua PDB yang merupakan bagian dari koleksi
PDB adalah database Pluggable
Semua PDB dicolokkan ke CDB$ROOT, struktur ini disebut database container (CDB)
pelajari lebih lanjut
Selain sakit kepala semacam itu, yang perlu kita ketahui adalah
99.9% of the time the error ORA-65096: invalid common user or role name means you are logged into the CDB when you should be logged into a PDB.
- Jadi kita membutuhkan user yang memiliki con_name adalah PDB untuk membuat user pada PDB tersebut
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
--------------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO
Di sini Anda dapat melihat ada database Pluggable bernama XEPDB1, karena saya menggunakan Oracle XE
Jika Anda menggunakan Oracle 12, itu akan menjadi ORCLPDB
Buka solusi untuk melihat cara membuat pengguna dengan PDB
Ini dia lagi, kesalahan baru muncul
django.db.utils.DatabaseError:ORA-12505:TNS:listener saat ini tidak mengetahui SID yang diberikan di deskriptor koneksi
Periksa file settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '1521',
}
}
Coba login ke sqlplus dengan user yang baru saja kita buat
PS D:\Workplace\Backend\mysite> sqlplus django/django
SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jul 28 15:56:57 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Hmm, kenapa???
Saya telah mencoba membuat pengguna dengan nama pengguna yang sama, katanya
ORA-01920: user name 'DJANGO' conflicts with another user or role name
Kenapa ????????
Lakukan beberapa penelitian
Ternyata kami tidak dapat menggunakan pengguna di Pluggable Database connect to root container
Dan bagaimana kita terhubung ke PDB tertentu?
You are connecting to root container by using sqlplus testtest/password where the user doesn't exist.
Instead, you can use EZConnect or you can create a TNS name to connect to the PDB.
Ok kemudian pelajari sesuatu tentang sintaks ezconnect
sqlplus nama pengguna/kata sandi@namahost:port/namapdb
PS D:\Workplace\Backend\mysite> sqlplus django/django@localhost:1521/XEPDB1
SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jul 28 16:05:09 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Last Successful login time: Wed Jul 28 2021 14:18:57 +07:00
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL>
Coba buat pengguna
SQL> create user test identified by test;
User created.
Sempurna
Tapi bagaimana kita memberitahu Django menggunakan sintaks semacam ini, itu terus melempar kesalahan ke wajahku
The HOST and PORT keys need to be left out of the dictionary - else Django will try connecting with the complete "NAME" as an SID.
Oke kalau begitu
Mari coba masuk dengan nama layanan sebagai gantinya
Coba login dengan nama layanan di sqlplus
PS D:\Workplace\Backend\mysite> sqlplus -L "django/django@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))"
SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jul 28 12:06:33 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Last Successful login time: Wed Jul 28 2021 12:02:04 +07:00
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
Ubah settings.py sedikit
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'localhost:1521/XEPDB1',
'USER': 'django',
'PASSWORD': 'django',
}
}
Solusi
- Hubungkan ke sqlplus sebagai sys
PS D:\Workplace\Backend\mysite> sqlplus "sys AS SYSDBA"
SQL*Plus: Release 18.0.0.0.0 - Production on Wed Jul 28 12:47:31 2021
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
- Buat akun PDB
SQL> alter session set container = XEPDB1;
Session altered.
SQL> create user django identified by django;
User created.
SQL> grant all privileges to django;
Grant succeeded.
- Buat/Edit koneksi Database dengan pengguna itu Ingatlah untuk mengubah nama layanan ke wadah yang telah kami gunakan di atas Jika Anda menggunakan Oracle 12, wadah akan menjadi ORCLPDB , tekan tombol sambungkan
- Buka file yoursite/yoursite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'localhost:1521/XEPDB1',
'USER': 'django',
'PASSWORD': 'django',
}
}
Jika Anda menemui kesalahan ini, ikuti panduan saya di sini
django.db.utils.DatabaseError:ORA-12505:TNS:listener saat ini tidak mengetahui SID yang diberikan di deskriptor koneksi
- Terapkan migrasi untuk aplikasi (sekali lagi karena kami telah terhubung ke database baru)
python manage.py migrate
- Jalankan pengujian
PS D:\Workplace\Backend\mysite> python manage.py test polls
Creating test database for alias 'default'...
Creating test user...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionModelTests)
---------------------------------------------------------------------------
Traceback (most recent call last):
File "D:\Workplace\Backend\mysite\polls\tests.py", line 12, in test_was_published_recently_with_future_question
self.assertIs(future_question.was_published_recently(), False)
AssertionError: True is not False
---------------------------------------------------------------------------
Ran 1 test in 0.006s
FAILED (failures=1)
Destroying test database for alias 'default'...
Destroying test user...
Destroying test database tables...
- Berhasil, terima kasih telah membaca
Referensi
tautan tutorial
Blog dan stackoverflow-s yang membantu saya mengatasi kesalahan ini:
- https://stackoverflow.com/questions/33330968/error-ora-65096-invalid-common-user-or-role-name-in-Oracle
- https://logicalread.com/Oracle-pluggable-databases-mc05/#.YQES444za3A
- https://dba.stackexchange.com/questions/196780/i-cannot-login-to-a-user-i-just-created-in-a-pdb
- https://stackoverflow.com/questions/19246643/how-do-i-force-django-to-connect-to-Oracle-using-service-name