【问题标题】:Problem in connecting with oracle databaseoracle数据库连接问题
【发布时间】:2020-06-18 07:01:27
【问题描述】:

我在 Oracle 中创建了一个名为 Oracle18c连接。每当我试图打开 Tables 部分时,就会出现下面的弹出窗口。我的 Oracle 服务器Docker 容器中运行。我试图在互联网上找到解决方案,但找不到。我是 Oracle 数据库的新手。请帮帮我。

【问题讨论】:

  • 如果你从 shell 执行docker ps,它会列出你的 Oracle 数据库进程吗?
  • 是的,它显示在列表中
  • 从 docker 终端登录为 sysdba docker exec -it --user=oracle container_name sqlplus / as sysdba 并按照 @pmdba 发布的说明进行操作
  • @Kumar 运行上述命令后,我收到此错误。 OCI 运行时执行失败:执行失败:container_linux.go:349:启动容器进程导致“exec:\”sqlplus\“:$PATH 中找不到可执行文件”:未知

标签: database oracle docker oracle-sqldeveloper


【解决方案1】:

默认情况下,可插拔数据库不会在其容器数据库启动时自动打开。 sysdba 用户需要发出命令“alter pluggable database all open”以使其进入读写模式。您的错误表明这里没有发生这种情况。检查此链接以获取有关如何执行此操作的详细信息: https://oracle-base.com/articles/12c/multitenant-startup-and-shutdown-cdb-and-pdb-12cr1#:~:text=Pluggable%20Database%20(PDB)%20Automatic%20Startup,-The%2012.1.&text=Prior%20to%2012.1.,or%20all%20of%20the%20PDBs.

【讨论】:

    【解决方案2】:

    我的容器是从头开始构建的 Oracle 18 xe 来源:github

    $ docker ps
    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                 PORTS                                                                          NAMES
    13afebdbdbdc        oracle/database:18.4.0-xe   "/bin/sh -c 'exec $O…"   8 hours ago         Up 7 hours (healthy)   
    
    
    
       $ docker exec -it xedb  ps -ef | grep xe
        oracle    1736     1  0 09:42 ?        00:00:01 xe_pmon_XE
        oracle    1738     1  0 09:42 ?        00:00:00 xe_clmn_XE
        ------------------------
        59 lines......
    $ docker exec -it --user=oracle xedb sqlplus / as sysdba
    
    SQL*Plus: Release 18.0.0.0.0 - Production on Thu Jun 18 15:45:11 2020
    Version 18.4.0.0.0
    
    Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
    Version 18.4.0.0.0
    
    SQL> show con_name   -- container name
    
    NAME
    ------------------------------
    CDB$ROOT
    
    
    
     SQL> show pdbs
    
            CON_ID CON_NAME                       OPEN MODE  RESTRICTED
        ---------- ------------------------------ ---------- ----------
                 2 PDB$SEED                       READ ONLY  NO
                 3 XEPDB1                         READ WRITE NO
        SQL>
    

    实例已启动并运行以及可插拔数据库

    如果您无法从 docker 终端以 sysdba 身份登录。您可以尝试使用 bash 命令

    $ docker exec -it --user=oracle xedb  bash
    [oracle@13afebdbdbdc /]$
    

    如果作为 Oracle 用户排除 --user 参数不起作用,请使用 bash 命令

    $ docker exec -it xedb  bash
    bash-4.2# su oracle   -- switch oracle user 
    [oracle@13afebdbdbdc /]$ echo $ORACLE_HOME   -- verify environment
    /opt/oracle/product/18c/dbhomeXE
    [oracle@13afebdbdbdc /]$ echo $ORACLE_SID
     XE
    

    如果您的环境没有返回任何内容,您可以使用以下命令设置环境

        [oracle@13afebdbdbdc /]$ . oraenv   -- dot space oraenv
        ORACLE_SID = [XE] ?
        The Oracle base remains unchanged with value /opt/oracle
        [oracle@13afebdbdbdc /]$ rlwrap sqlplus / as sysdba
    
        SQL*Plus: Release 18.0.0.0.0 - Production on Thu Jun 18 15:58:39 2020
        Version 18.4.0.0.0
    
        Copyright (c) 1982, 2018, Oracle.  All rights reserved.
    
        Connected to an idle instance
    
         SQL> startup    -- start the database
        ORACLE instance started.
    
         Total System Global Area 1610609288 bytes
         Fixed Size                  8897160 bytes
         Variable Size             620756992 bytes
         Database Buffers          973078528 bytes
         Redo Buffers                7876608 bytes
         Database mounted.
         Database opened.
    SQL> select open_mode from v$database;  -- check database status 
    
    OPEN_MODE
    --------------------
    READ WRITE
    
    
    SQL> show pdbs     -- check pdb open mode is read write
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 XEPDB1                         READ WRITE NO
    

    如果你碰巧看到 Pluggable 数据库处于挂载状态

    SQL> show pdbs      -- pdb xepdb1 is in mount state 
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 XEPDB1                         MOUNTED
    SQL> alter pluggable database xepdb1 open;   -- open pdb 
    
    
    Pluggable database altered.
    
    SQL> show pdbs
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
             2 PDB$SEED                       READ ONLY  NO
             3 XEPDB1                         READ WRITE NO
    
    SQL> alter pluggable database xepdb1 save state ; --------next restart pdb will be opened automagically 
    
    
    Pluggable database altered.
    

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多