SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Oracle】cx_Oracle.DatabaseError: ORA-00406: COMPATIBLEパラメータは、12.0.0.0.0以上必要です。

python Djangoの機能でマイグレーションを実行しようとしたときに発生した。

PS C:\Users\wanta\Desktop\dev\django_pj\form_pj> python .\manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, form_app, sessions
Running migrations:
Traceback (most recent call last):
  File "C:\Users\wanta\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\django\db\backends\utils.py", line 87, in _execute
    return self.cursor.execute(sql)
  File "C:\Users\wanta\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\django\db\backends\oracle\base.py", line 556, in execute
    return self.cursor.execute(query, self._param_generator(params))
cx_Oracle.DatabaseError: ORA-00406: COMPATIBLEパラメータは、12.0.0.0.0以上必要です。
ORA-00722: 機能"SQL identity columns"
対応方法

・COMPATIBLEパラメータの確認

以下のSQLで確認できる。

SELECT P.NAME NAME, P.VALUE VALUE, SP.VALUE SPFILE_VALUE
FROM V$PARAMETER P, V$SPPARAMETER SP
WHERE P.NAME = SP.NAME
AND P.NAME = 'compatible';
NAME	VALUE	SPFILE_VALUE
compatible	11.2.0	11.2.0

確かに12より低い値になっていた。
本来はバージョンの通りに設定するっぽい。バージョンアップのときに合わせて変えたりもするっぽい。

Oracle DatabaseのCOMPATIBLE初期化パラメータの値

SPfileも実際に11.2になっていた。。多分構築時のミス。

[oracle@localhost dbs]$ cat spfiletest_db.ora
C"{[A
     ~vCCC"<Ptest_db.__db_cache_size=4194304
test_db.__java_pool_size=4194304
test_db.__large_pool_size=4194304
test_db.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
test_db.__pga_aggregate_target=406847488
test_db.__sga_target=666894336
test_db.__shared_io_pool_size=0
test_db.__shared_pool_size=536870912
test_db.__streams_pool_size=0
test_db.__unified_pga_pool_size=0
*.compatible='11.2.0'


・COMPATIBLEパラメータの変更
以下ではSPファイルから設定を変更する。今回は19cなので19.0.0へ変更。
実行は自己責任で。

SQL> ALTER SYSTEM SET COMPATIBLE='19.0.0' SCOPE=spfile;

システムが変更されました。

SQL>

再度バージョン確認する。

SQL> SELECT P.NAME NAME, P.VALUE VALUE, SP.VALUE SPFILE_VALUE
  2  FROM V$PARAMETER P, V$SPPARAMETER SP
  3  WHERE P.NAME = SP.NAME
  4  AND P.NAME = 'compatible';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
SPFILE_VALUE
--------------------------------------------------------------------------------
compatible
11.2.0
19.0.0


SQL>

起動インスタンスのバージョンが変わっていないのでインスタンスを再起動する。

パラメータを再確認。

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
SPFILE_VALUE
--------------------------------------------------------------------------------
compatible
19.0.0
19.0.0