我的目标是设置一个 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 中执行此类操作的最佳实践是什么?
init.sql is located at C:\Users\MyUser\Documents\Code\test-db-startup
) 缺少一些东西。根据here 的文档,Oracle DB 将使用
sys as sysdba
运行您的安装脚本,并且很可能在 CDB 而不是 PDB 中运行。因此,在 init.sql 脚本中,您需要执行以下操作:
alter session set container=FREEPDB1;
create user myuser no authentication;
grant connect, resource to myuser;
grant unlimited tablespace to myuser; -- fine-tune this later
-- Creating the Invoice Table in myuser schema
CREATE TABLE myuser.INVOICE (
EXTERNAL_ID NUMBER(10) NOT NULL,
DUEDATE DATE,
PRIMARY KEY (EXTERNAL_ID)
);
-- using sqlcl
connect sys@localhost:1521 as sysdba;
select table_name, owner from dba_tables where upper(TABLE_NAME) in ('INVOICE', 'LINE');
因此,您想要更改会话、创建架构并在架构内创建表。