Docker / Oracle 数据库 / 卷持久性 / 创建 Table space
Docker / Oracle Database / Volume Persistence / Create Table space
我正在构建一个 Dev Docker 环境,我必须设置一个 Oracle 19c 数据库。
我已经成功了...但还没有达到 100%。
一切都运行正确,我可以创建一个table空间,一个user/schema,创建一个table,插入数据,也通过NodeJs访问数据直到我重新启动容器。
在所有教程中,都显示挂载指向 /opt/oracle/oradata
的卷
volumes:
- ./database/OracleDB/oradata:/opt/oracle/oradata
但是 table 空间默认创建在 /opt/oracle/product/19c/dbhome_1/dbs
我试图添加一个指向该目录的卷
volumes:
- ./database/OracleDB/oradata:/opt/oracle/oradata
- ./database/OracleDB/dbs:/opt/oracle/product/19c/dbhome_1/dbs/
但是我收到以下错误Error response from daemon: path /home/myusr/docker-base/database/OracleDB/dbs is mounted on / but it is not a shared mount.
有人遇到过这个问题并找到了解决方案吗?
我当然会继续寻找解决方案 ;)
系统信息
Windows 10 名 WSL2 专业人士
Docker 版本 20.10.8,内部版本 3967b7d
甲骨文数据库 19c
更新 1
基于罗伯托评论。不幸的是,它不起作用。
更新 2
我尝试了以下
CREATE TABLESPACE tbs1_test DATAFILE '/opt/oracle/oradata/tbs1_test' SIZE 100 M AUTOEXTEND ON NEXT 100 M MAXSIZE 10 G;
并在所需位置创建文件
当您不更改 db_create_file_dest
的值时,Oracle 将使用它作为数据文件的默认目标。在您的情况下,当您执行 create tablespace
命令时,数据文件是在默认位置创建的。这就是为什么它没有出现在您想要的目录中的原因。
1.Connect 作为数据库的 sysdba
2.Execute
SQL> alter system set db_create_file_dest = '/opt/oracle/oradata/ORCLCDB' scope=both;
3.As 您在上述目录中已有一个卷,删除其他卷规范,因为它已在 /
下共享
4.Remove 表空间并重新创建它(如果它是空的)
SQL> DROP TABLESPACE tbs1_test including contents and datafiles;
SQL> CREATE TABLESPACE tbs1_test DATAFILE 'tbs1_test' SIZE 100 M AUTOEXTEND ON NEXT 100 M MAXSIZE 10 G;
5.Verify 数据文件现在位于正确的卷中
SQL> select file_id, file_name from dba_data_files where tablespace_name = 'TBS1_TEST' ;
如果您想深入了解如何在 docker 图像中创建特定体积,请在 Whosebug 中查看此 post,恕我直言,它是最好的之一
How to mount host volumes into docker containers in Dockerfile during build
我正在构建一个 Dev Docker 环境,我必须设置一个 Oracle 19c 数据库。
我已经成功了...但还没有达到 100%。
一切都运行正确,我可以创建一个table空间,一个user/schema,创建一个table,插入数据,也通过NodeJs访问数据直到我重新启动容器。
在所有教程中,都显示挂载指向 /opt/oracle/oradata
volumes:
- ./database/OracleDB/oradata:/opt/oracle/oradata
但是 table 空间默认创建在 /opt/oracle/product/19c/dbhome_1/dbs
我试图添加一个指向该目录的卷
volumes:
- ./database/OracleDB/oradata:/opt/oracle/oradata
- ./database/OracleDB/dbs:/opt/oracle/product/19c/dbhome_1/dbs/
但是我收到以下错误Error response from daemon: path /home/myusr/docker-base/database/OracleDB/dbs is mounted on / but it is not a shared mount.
有人遇到过这个问题并找到了解决方案吗?
我当然会继续寻找解决方案 ;)
系统信息
Windows 10 名 WSL2 专业人士
Docker 版本 20.10.8,内部版本 3967b7d
甲骨文数据库 19c
更新 1
基于罗伯托评论。不幸的是,它不起作用。
更新 2 我尝试了以下
CREATE TABLESPACE tbs1_test DATAFILE '/opt/oracle/oradata/tbs1_test' SIZE 100 M AUTOEXTEND ON NEXT 100 M MAXSIZE 10 G;
并在所需位置创建文件
当您不更改 db_create_file_dest
的值时,Oracle 将使用它作为数据文件的默认目标。在您的情况下,当您执行 create tablespace
命令时,数据文件是在默认位置创建的。这就是为什么它没有出现在您想要的目录中的原因。
1.Connect 作为数据库的 sysdba
2.Execute
SQL> alter system set db_create_file_dest = '/opt/oracle/oradata/ORCLCDB' scope=both;
3.As 您在上述目录中已有一个卷,删除其他卷规范,因为它已在 /
4.Remove 表空间并重新创建它(如果它是空的)
SQL> DROP TABLESPACE tbs1_test including contents and datafiles;
SQL> CREATE TABLESPACE tbs1_test DATAFILE 'tbs1_test' SIZE 100 M AUTOEXTEND ON NEXT 100 M MAXSIZE 10 G;
5.Verify 数据文件现在位于正确的卷中
SQL> select file_id, file_name from dba_data_files where tablespace_name = 'TBS1_TEST' ;
如果您想深入了解如何在 docker 图像中创建特定体积,请在 Whosebug 中查看此 post,恕我直言,它是最好的之一
How to mount host volumes into docker containers in Dockerfile during build