[英]How to create an Oracle database inside Vagrant and connect to it in my local Rails app and SQL Developer?
我按照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
ORCLCDB
但它给了我一个错误: ORA-01017: invalid username/password; logon denied
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 中输入什么值?
我的 Rails 应用程序安装了ruby-oci8
和activerecord-oracle_enhanced-adapter
gems。
Q1:不,您不必创建数据库; Vagrantfile 创建一个 CDB (ORCLCDB) 和一个 PDB (ORCLPDB1)。
配置完成后,两者都可以使用了。
如果您不熟悉多租户概念,请参阅关于多租户架构。
Q2:正如 Bjarte 已经提到的,要连接到 PDB,您需要使用Service Name
选项而不是SID
。 PDBADMIN
用户只存在于ORCLPDB1
PDB 中,所以需要指定ORCLPDB1
作为服务。
注意PDBADMIN
安装后没有很多权限,你可能想先以SYSTEM
身份连接到 CDB 并授予PDBADMIN
更多权限 -- 例如
ALTER SESSION SET CONTAINER=ORCLPDB1
GRANT DBA TO PDBADMIN
另请注意,您在端口号中有拼写错误(1512 而不是 1521)
Q3:查看oracle-enhanced文档
以下对我有用:
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) ===========================
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.