2017-12-28 43 views
0

自分のローカルoracle dbをdjangoプロジェクトに接続したいだけですが、データベースの資格証明が機能していません。実は、私はその資格を持つSQL開発者を経由して私のOracleデータベースに接続することができるよ: enter image description hereDjango oracle dbの設定

私はちょうどその

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.oracle', 
     'NAME': 'INTERNAL', 
     'USER': 'system', 
     'PASSWORD': 'oracle',   
     'HOST':'localhost/xe', 
     'PORT':'1521' 
    } 
} 

のようなDjangoのsettings_pyにその資格情報を使用してエラーがある:

Traceback (most recent call last): 
web_1 | File "manage.py", line 22, in <module> 
web_1 |  execute_from_command_line(sys.argv) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
web_1 |  utility.execute() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
web_1 |  self.fetch_command(subcommand).run_from_argv(self.argv) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
web_1 |  self.execute(*args, **cmd_options) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
web_1 |  output = self.handle(*args, **options) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", line 110, in handle 
web_1 |  loader.check_consistent_history(connection) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/migrations/loader.py", line 282, in check_consistent_history 
web_1 |  applied = recorder.applied_migrations() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations 
web_1 |  self.ensure_schema() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 52, in ensure_schema 
web_1 |  if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()): 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 254, in cursor 
web_1 |  return self._cursor() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 229, in _cursor 
web_1 |  self.ensure_connection() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection 
web_1 |  self.connect() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
web_1 |  six.reraise(dj_exc_type, dj_exc_value, traceback) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
web_1 |  raise value.with_traceback(tb) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection 
web_1 |  self.connect() 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 189, in connect 
web_1 |  self.connection = self.get_new_connection(conn_params) 
web_1 | File "/usr/local/lib/python3.6/site-packages/django/db/backends/oracle/base.py", line 212, in get_new_connection 
web_1 |  return Database.connect(self._connect_string(), **conn_params) 
web_1 | django.db.utils.DatabaseError: ORA-12545: Connect failed because target host or object does not exist 

ここに私のリスナーステータス

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) 
    STATUS of the LISTENER 
    ------------------------ 
    Alias      LISTENER 
    Version     TNSLSNR for Linux: Version 11.2.0.2.0 - Production 
    Start Date    28-DEC-2017 15:51:21 
    Uptime     0 days 2 hr. 8 min. 36 sec 
    Trace Level    off 
    Security     ON: Local OS Authentication 
    SNMP      OFF 
    Default Service   XE 
    Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora 
    Listener Log File   /u01/app/oracle/diag/tnslsnr/e48c7c272f44/listener/alert/log.xml 
    Listening Endpoints Summary... 
     (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) 
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=e48c7c272f44)(PORT=1521))) 
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=e48c7c272f44)(PORT=8080))(Presentation=HTTP)(Session=RAW)) 
    Services Summary... 
    Service "PLSExtProc" has 1 instance(s). 
     Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... 
    Service "XE" has 1 instance(s). 
     Instance "XE", status READY, has 1 handler(s) for this service... 
    Service "XEXDB" has 1 instance(s). 
     Instance "XE", status READY, has 1 handler(s) for this service... 
    here its my listener status 
+0

私はあなたのDjangoの設定でポートがポートと一致しないことがわかりSQL Developer Connection Dialogue(1521 v 8080)にあります。おそらくそれは問題ですか? – Zerodf

+0

私はちょうど私の質問 – jackquin

+0

を編集した申し訳ありません、多くの組み合わせを試しました実際にどのように設定に私のsidを与えることができますか? – jackquin

答えて

0

HOSTlocalhost' or '127.0.0.1に変更し、SIDをNAMEに変更する必要があります。将来の参照の場合

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.oracle', 
     'NAME': 'xe', 
     'USER': 'system', 
     'PASSWORD': 'oracle',   
     'HOST':'127.0.0.1', 
     'PORT':'1521' 
    } 
} 

オラクルは、サービス名の代わりにSIDが設定されている場合、その後の構成は次のようになります。あなたが接続したときにはDjangoでOracleを操作する際に考慮すべき

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.oracle', 
     'NAME': '127.0.0.1:1521/service.name', 
     'USER': 'system', 
     'PASSWORD': 'oracle',   
    } 
} 

もう一つは、ということです他のユーザー(スキーマ)データベースに、あなたはDjangoのモデルにdb_tableMeta optionを設定する必要があります。

class OracleTable(models.Model): 
    ... fields ... 
    class Meta: 
     db_table = '\"OTHERUSER\".\"ORACLETABLE\"' 
+0

私はあなたの提案を試みましたが、今度はエラーが 'django.db.utils.DatabaseError:ORA-12541:TNS:no listener' – jackquin

+0

となっており、データベース名を与えていません。 – jackquin

+0

[cx_oracle](http:// cx-oracle.readthedocs.io/en/latest/installation.html)および[Oracle Client](http://www.oracle.com/technetwork/database/features/instant-client/index.html)を参照してください。このエラーはデータベースが127.0.0.1:1521に見つかりません。 – Borut