5

I'm starting a project in Django-2.0.1 with a database Oracle 11g, and when I run $python manage.py migrate, I get the error django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (ORA-02000: missing ALWAYS keyword). You can see the full stack below:

   Traceback (most recent call last):
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/oracle/base.py", line 500, in execute
    return self.cursor.execute(query, self._param_generator(params))
cx_Oracle.DatabaseError: ORA-02000: missing ALWAYS keyword

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 55, in ensure_schema
    editor.create_model(self.Migration)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 298, in create_model
    self.execute(sql, params or None)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 117, in execute
    cursor.execute(sql, params)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/backends/oracle/base.py", line 500, in execute
    return self.cursor.execute(query, self._param_generator(params))
django.db.utils.DatabaseError: ORA-02000: missing ALWAYS keyword

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 200, in handle
    fake_initial=fake_initial,
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/migrations/executor.py", line 91, in migrate
    self.recorder.ensure_schema()
  File "/Users/user/anaconda3/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 57, in ensure_schema
    raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (ORA-02000: missing ALWAYS keyword)

This seems a version problem like described in other questions here in stackoverflow, but i don't know how to edit the script for the creation of django_migrations. I didn't find it in the migrations, I think it is a table of the framework. Someone know how to workaround this?

Leandro Silva
  • 73
  • 1
  • 7
  • ORA-02000 is an Oracle error code. However, there's no Oracle code in your message. Could you post it? – Littlefoot Jan 14 '18 at 21:02
  • @Littlefoot This is indeed part of my problem, this SQL code is generate by the django-migrations framework an ORM framework, I know how to access the sql code for the models that I create and of other apps but this django_migrations table seems to be generate by the framework itself, and i don't know how to view this SQL code. – Leandro Silva Jan 14 '18 at 21:16
  • Are you using Oracle as your 'default' or only database backend? and has the user account you're accessing it as got create permissions? This looks very similar to the problem I'm trying to fix on my own project, but in my case I know I've got a Read-only database, and both migrate (and test) call CREATE TABLE as part of their setup operation. – Carl Marshall Feb 18 '19 at 17:37
  • Hi Carl. I changed to a postgre database to work arround this problem, in the time I was using Oracle as my only database. – Leandro Silva Feb 20 '19 at 17:56

2 Answers2

0

I have faced the same issues during migration. I downgraded Django version to 1.1 and changed some codes in base.py for Oracle database as given in a link and it's working fine now.

-1

version problem
in this.py add:

print(sql)
return self.cursor.execute(sql)

then run:

python manage.py migrate

You can see the problem. while Django creates an Oracle table use 'GENERATED BY DEFAULT ON NULL' that is Oracle 12c new characteristics. So you can change Oracle to 12c or change ox_oracle version.

Omar Einea
  • 2,478
  • 7
  • 23
  • 35