将Oracle转储表导入docker中的Oracle数据库

将Oracle转储表导入docker中的Oracle数据库,oracle,docker,ubuntu,oracle-sqldeveloper,dbvisualizer,Oracle,Docker,Ubuntu,Oracle Sqldeveloper,Dbvisualizer,操作系统是Ubuntu 20.04。我有一个Oracle数据库19c,它在docker中。详细地说,在/opt中,我创建了带有子文件夹的oracle文件夹,并授予它们权限。您可以在以下内容中看到它们: sudo chmod 777 /opt/oracle/admin/ sudo chown -R root /opt/oracle/admin/ sudo chmod 777 /opt/oracle/oradata/ sudo chown -R root /opt/oracle/oradata/ s

操作系统是Ubuntu 20.04。我有一个Oracle数据库19c,它在docker中。详细地说,在/opt中,我创建了带有子文件夹的oracle文件夹,并授予它们权限。您可以在以下内容中看到它们:

sudo chmod 777 /opt/oracle/admin/
sudo chown -R root /opt/oracle/admin/
sudo chmod 777 /opt/oracle/oradata/
sudo chown -R root /opt/oracle/oradata/
sudo chmod 777 /opt/oracle/scripts/startup/
sudo chown -R root /opt/oracle/scripts/startup/
sudo chmod 777 /opt/oracle/scripts/setup/
sudo chown -R root /opt/oracle/scripts/setup/
然后,我使用以下命令运行Oracle Docker映像:

sudo docker run --name oracledb --shm-size=4g -p 1521:1521 -p 5500:5500 -e ORACLE_SID=testdb -e ORACLE_PDB=testpdb -e ORACLE_PWD=Oracle123 -v /opt/oracle/oradata:/opt/oracle/oradata -v /opt/oracle/admin:/opt/oracle/admin -v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup -v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup oracle:19.3.0
sudo docker exec -ti 6e277a00b558 sqlplus system/Pass@TESTPDB
运行Oracle之后,我在主机的/opt/Oracle/oradata/dbconfig/TESTDB中打开sqlnet.ora,并更改其内容。做出改变后,是这样的:

SQLNET.AUTHENTICATION_SERVICES=(ALL)
NAMES.DIRECTORY_PATH= (EZCONNECT, TNSNAMES, HOSTNAME)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION=8
其他两个文件如下所示: listener.ora

 LISTENER =
  (DESCRIPTION_LIST =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
   )
  )
TESTDB=localhost:1521/TESTDB
TESTPDB=
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = TESTPDB)
   )
  )
tnsnames.ora

 LISTENER =
  (DESCRIPTION_LIST =
   (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
   )
  )
TESTDB=localhost:1521/TESTDB
TESTPDB=
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = TESTPDB)
   )
  )
专用\u通过\u代理\u侦听器=打开 诊断ADR已启用=关闭

它运行没有问题。我安装了Bbvis并创建了一个用户,但我无法导入任何“.dmp”表。 即使我可以在Dbvis中创建用户界面,Oracle也不能工作。我在localhost:5500/em中看不到任何东西。这对我来说很奇怪。 另外,我安装了SQLDeveloper来导入表,但我根本无法连接到数据库。我收到这个错误:

ERROR:
 ORA-01034: ORACLE not available
 ORA-27101: shared memory realm does not exist
 Linux-x86_64 Error: 2: No such file or directory
 Additional information: 4376
 Additional information: -179270649
 Process ID: 0
 Session ID: 0 Serial number: 0
状态:失败-测试失败:IO错误:读取调用得到负1

我尝试在docker中使用impdp,如下所示:

SQLNET.AUTHENTICATION_SERVICES=(ALL)
NAMES.DIRECTORY_PATH= (EZCONNECT, TNSNAMES, HOSTNAME)
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION=8
docker exec-it id\u container impdp user/password DUMPFILE=cst.dmp

但我收到了这个错误:

ERROR:
 ORA-01034: ORACLE not available
 ORA-27101: shared memory realm does not exist
 Linux-x86_64 Error: 2: No such file or directory
 Additional information: 4376
 Additional information: -179270649
 Process ID: 0
 Session ID: 0 Serial number: 0
ORA-27101:共享内存域不存在

此外,当我运行此命令时:

sudo docker run --name oracledb --shm-size=4g -p 1521:1521 -p 5500:5500 -e ORACLE_SID=testdb -e ORACLE_PDB=testpdb -e ORACLE_PWD=Oracle123 -v /opt/oracle/oradata:/opt/oracle/oradata -v /opt/oracle/admin:/opt/oracle/admin -v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup -v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup oracle:19.3.0
sudo docker exec -ti 6e277a00b558 sqlplus system/Pass@TESTPDB
它要我输入用户名和密码。我输入“系统”及其密码。但不被接受,我收到以下错误:

ERROR:
 ORA-01034: ORACLE not available
 ORA-27101: shared memory realm does not exist
 Linux-x86_64 Error: 2: No such file or directory
 Additional information: 4376
 Additional information: -179270649
 Process ID: 0
 Session ID: 0 Serial number: 0
我搜索了很多并测试了将转储文件导入Ubuntu中OracleDocker的各种方法。甚至,我安装了SquirreSQL,但它可以导入我没有的CSV文件


非常感谢您的帮助。

此错误通常意味着impdp试图连接到未运行的数据库。通常是因为环境设置不正确。亲爱的@Suresh谢谢你的反馈,请你解释一下好吗?什么是目录参数?亲爱的@D.Mika,如果你的意思是设置ORACLE_HOME,我无法设置它,因为它已经在docker中设置好了。检查这个亲爱的@Suresh,我执行了你的建议,收到了错误。所以,我更新了我的问题。请你看看好吗?多谢各位。