繁体   English   中英

如何在 Vagrant 中创建 Oracle 数据库并在我的本地 Rails 应用程序和 SQL Developer 中连接到它?

[英]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-boxesOracleDatabase/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 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-oci8activerecord-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM