Как создать базу данных Oracle внутри Vagrant и подключиться к ней в моем локальном приложении Rails и SQL Developer? - PullRequest
0 голосов
/ 12 марта 2020

Я следовал инструкциям на https://github.com/oracle/vagrant-boxes OracleDatabase/18.3.0/README.md.

Когда установка vagrant up завершена, она выводит на терминал:

oracle-18c-vagrant: ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: my_password

Я попытался подключиться к этой базе данных через SQL Developer со следующими значениями в новом окне подключения к базе данных:

  • Имя подключения: my_local_oracle_db
  • Имя пользователя: PDBADMIN
  • Пароль: my_password
  • Тип подключения: Basic
  • Имя хоста: localhost
  • Порт: 1521
  • SID: ORCLCDB

Но выдает ошибку: ORA-01017: invalid username/password; logon denied

Q1) Нужно ли сначала создавать новую базу данных внутри vagrant? Какую инструкцию я могу использовать для его создания?

Q2) И какое значение я должен ввести, чтобы подключиться к нему с помощью SQL Developer?

Далее, чтобы подключить его с помощью Rails

Я использовал этот конфиг в config/database.yml:

test:
  adapter: oracle_enhanced
  hostname: localhost
  port: 1521
  username: PDBADMIN
  password: my_password

Но когда я сделал rails db:migrate, произошел сбой с этой ошибкой:

$ RAILS_ENV=test rails db:migrate
Warning: NLS_LANG is not set. fallback to US7ASCII.
rails aborted!
NoMethodError: undefined method `match' for nil:NilClass

Q3) Какими значениями я должен быть вход в config / database.yml?

В приложении My Rails установлены ruby-oci8 и activerecord-oracle_enhanced-adapter гемов.

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Q1: Нет, вам не нужно создавать базу данных; Vagrantfile создает CDB (ORCLCDB) и PDB (ORCLPDB1).
Когда инициализация завершена, оба готовы к использованию.

См. Об архитектуре Multitenant , если вы не знакомы с Мультитенантная концепция.

Q2: Как уже упоминалось в Bjarte, для подключения к PDB необходимо использовать параметр Service Name вместо SID. Пользователь PDBADMIN существует только в PDB ORCLPDB1, поэтому вам нужно указать ORCLPDB1 в качестве службы.

Обратите внимание, что PDBADMIN не имеет много привилегий после установки, вы, вероятно, захотите сначала подключитесь к CDB как SYSTEM и предоставьте больше привилегий PDBADMIN - Например,

ALTER SESSION SET CONTAINER=ORCLPDB1
GRANT DBA TO PDBADMIN

Также обратите внимание, что у вас есть опечатка в номере порта (1512 вместо 1521)

Q3: см. Расширенную документацию oracle

Для меня работает следующее:

development:
  adapter: oracle_enhanced
  database: //localhost:1521/orclpdb1
  username: pdbadmin
  password: MySecretPassword
$ rake db:migrate
== 20200319203904 CreateAuthors: migrating ====================================
-- create_table(:authors)
   -> 0.0628s
== 20200319203904 CreateAuthors: migrated (0.0630s) ===========================
0 голосов
/ 20 марта 2020

Q1) Нужно ли сначала создавать новую базу данных внутри vagrant? Какую инструкцию я могу использовать для ее создания?

Я думаю, что база данных уже создана внутри vagrant, поэтому мне не нужно создавать ее снова.

Q2) И какое значение я должен ввести, чтобы подключиться к нему с помощью SQL Developer?

Введите следующие значения в новом окне подключения к базе данных:

Connection Name: my_local_oracle_db
Username: SYS
Password: my_password
Role: SYSDBA
Connection Type: Basic
Hostname: localhost
Port: 1521
SID: ORCLCDB

Это соединит меня с Пользователь SYS в базе данных.

но я думаю, что для того, что я хочу, мне нужно создать другого пользователя в той же базе данных, используя пользователя SYS.

Для этого после подключения к вышеуказанному база данных в SQL Developer, запустите ниже SQL команды:

CREATE USER C##db_name_here IDENTIFIED BY my_password2 DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;
GRANT CONNECT TO C##db_name_here;
GRANT RESOURCE TO C##db_name_here;
GRANT UNLIMITED TABLESPACE TO C##db_name_here;
GRANT CREATE VIEW TO C##db_name_here;
GRANT CREATE MATERIALIZED VIEW TO C##db_name_here;
GRANT CREATE PROCEDURE TO C##db_name_here;
GRANT CREATE TYPE TO C##db_name_here;
GRANT CREATE DATABASE LINK TO C##db_name_here;

Этот пользователь будет тем, к которому я подключусь в моей Rails config/database.yml

Q3) Что значения я должен вводить в config / database.yml?

test:
  adapter: oracle_enhanced
  hostname: localhost
  port: 1521
  database: ORCLCDB
  username: C##db_name_here
  password: my_password2
...