如何使用架构设置 Oracle free db dockercontainer?

问题描述 投票:0回答:1

我的目标是设置一个 Oracle 测试数据库,其中包含一个带有两个表的架构。可通过 DataGrip (JDBC) 连接访问。

从 Oracle 容器注册表开始:Oracle 容器免费镜像

我可以使用以下命令启动图像:

docker run -d -p 1521:1521 -e ORACLE_PWD=mypw --name my-test-db container-registry.oracle.com/database/free:latest

可以通过 DataGrip 的两种配置访问此功能:

jdbc:oracle:thin:@localhost:1521:FREE
用户名:system 密码:mypw db1 可以通过其他配置访问:
jdbc:oracle:thin:@localhost:1521/FREEPDB1
用户名:pdbadmin 和密码:mypw 请注意 / 而不是 :。 Datagrip 自动生成:而不是 /

现在从这里开始,我想使用 init.sql 脚本创建两个表,这两个表在它们自己的架构中可用。

可以通过退出docker命令来挂载init.sql脚本,如下:

docker run -d -p 1521:1521 -e ORACLE_PWD=pw -v C:\Users\MyUser\Documents\Code\test-db-startup:/opt/oracle/scripts/startup --name my-test-db container-registry.oracle.com/database/free:latest

init.sql 位于 C:\Users\MyUser\Documents\Code est-db-startup 并包含两个简单的表:

-- Creating the Invoice Table
CREATE TABLE INVOICE (
    EXTERNAL_ID NUMBER(10) NOT NULL,
    DUEDATE DATE,
    PRIMARY KEY (EXTERNAL_ID)
);

-- Creating the Line Table
CREATE TABLE LINE (
    EXTERNAL_ID NUMBER(10) NOT NULL,
    LINENO NUMBER(10) NOT NULL,
    PRICE NUMBER(18, 6),
    PRIMARY KEY (EXTERNAL_ID, LINENO)
);

根据日志创建了表,我在哪里可以在哪个架构中找到它们?

如何调整 init 脚本,以便它在新模式中组织表,例如“TESTDATA”,可以从 Datagrip 访问并列为模式?

https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj31580.html CREATE SCHEMA 命令看起来很有希望,但不知何故我无法处理授权部分,它总是声称它丢失了。

在 PostgreSQL 中,我会创建一个新数据库,在 Oracle 中执行此类操作的最佳实践是什么?

sql oracle docker jdbc datagrip
1个回答
0
投票
所以你的 init.sql 脚本 (

init.sql is located at C:\Users\MyUser\Documents\Code\test-db-startup

) 缺少一些东西。根据 
here 的文档,Oracle DB 将使用 sys as sysdba
 运行您的安装脚本,并且很可能在 CDB 而不是 PDB 中运行。因此,在 init.sql 脚本中,您需要执行以下操作:

    将会话设置为您的 PDB
  1. alter session set container=FREEPDB1;
    
    
  2. 通过创建用户来创建您的架构,这使您可以控制表的位置而不是其他架构
  3. create user myuser no authentication; grant connect, resource to myuser; grant unlimited tablespace to myuser; -- fine-tune this later
    
    
  4. 使用指定的模式名称创建表,例如
  5. -- Creating the Invoice Table in myuser schema CREATE TABLE myuser.INVOICE ( EXTERNAL_ID NUMBER(10) NOT NULL, DUEDATE DATE, PRIMARY KEY (EXTERNAL_ID) );
    
    
至于您的问题是在哪里创建表的,它将位于 CDB 和 SYS 模式中。您可以通过以下方式检查:

-- using sqlcl connect sys@localhost:1521 as sysdba; select table_name, owner from dba_tables where upper(TABLE_NAME) in ('INVOICE', 'LINE');
因此,您想要更改会话、创建架构并在架构内创建表。

© www.soinside.com 2019 - 2024. All rights reserved.