我的目标是建立一个Oracle测试数据库,其中包含一个带有两个表的模式。可通过DataGrip(JDBC)连接实现。
从Oracle容器注册表开始:Oracle Container Free Image
我可以使用以下命令启动一个映像:
docker run -d -p 1521:1521 -e ORACLE_PWD=mypw --name my-test-db container-registry.oracle.com/database/free:latest
字符串
可以通过DataGrip中的两个配置访问这个db 1:jdbc:oracle:thin:@localhost:1521:FREE
,用户名:system和pw:mypw。可以通过另一个配置访问db 1:jdbc:oracle:thin:@localhost:1521/FREEPDB1
,用户名:pdbadmin和pw: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\test-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)
);
型
根据日志创建的表,我在哪里可以找到他们在哪个模式?
我如何调整初始化脚本,使它在一个新的模式中组织表,例如“TESTDATA”,它可以从Datagrip访问并作为一个模式列出?
https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj31580.html CREATE SCHEMA命令看起来很有前途,但不知何故我无法处理授权部分,它总是声称它丢失了。
在PostgreSQL中,我会创建一个新的数据库,在Oracle中这样做的最佳实践是什么?
1条答案
按热度按时间vbopmzt11#
因此,您的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脚本中,您希望执行以下操作:1.将会话设置为PDB
1.通过创建用户来创建模式,这使您可以控制表的位置,而不是其他模式
1.使用指定的模式名称创建表,例如
至于你的表是在哪里创建的问题,它应该在CDB和MySQL模式中。你可以通过以下方式检查:
型
因此,您需要更改会话,创建模式并在模式中创建表。如果成功,
型
然后,您可以更改myuser密码或将访问权限授予其他用户;