1

I have the Oracle Database App Development VM (12c) and am trying to create a new container. Specifically:

conn / as sysdba
create pluggable database pdborcl admin user system identified by oracle FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cdb1/pdbseed/', '/u01/app/oracle/oradata/cdb1/pdb2'');

However, I cannot connect to the root container. The above conn spits out:

  URL           = jdbc:oracle:oci8:@(DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )
  Error Message = ORA-01017: invalid username/password; logon denied
  USER          = 
  URL           = jdbc:oracle:thin:@(DESCRIPTION =    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = orcl)    )  )
  Error Message = ORA-01017: invalid username/password; logon denied

Warning: You are no longer connected to ORACLE.

And sqlplus / as sysdba returns:

ERROR:
ORA-01017: invalid username/password; logon denied

Logging in with sqlplus system as sysdba logs into the connection ORCL.

Druckles
  • 113
  • 5

2 Answers2

1

ALL of the passwords are 'oracle'

That includes: OS: root OS: oracle Database: SYS Database: SYSTEM Database: HR

oracle@vbgeneric ~]$ sqlplus sys as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri May 11 11:43:25 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 

However, you're running into something different.

And it's discussed here.

Using TWO_TASK. A third way is by defining the TWO_TASK operating system variable to point to the PDB you want to connect to:

[oracle@prosrv1 schema]$ export TWO_TASK=PDB1

And, then you can connect as usual without giving a connect string:

[oracle@prosrv1 schema]$ sqlplus system/oracle

I prefer this last approach because it simulates a database connection prior to introduction of the PDB. If you connect to a specific PDB the majority of the time, all you have to do is to set this variable in the shell initialization file (e.g. .profile in case of bourne shell) of the user so that the variable is automatically set when you log in. If you need to know which PDB you are connected right now in SQL*Plus, just use the following command: To show which container (or, the PDB) you are connected to:

SQL> show con_id
CON_ID
------------------------------
5

SQL> show con_name
CON_NAME
------------------------------
PDB1
thatjeffsmith
  • 1,022
  • 6
  • 7
1

The reason for sqlplus / as sysdba not working is:

[oracle@localhost ~]$ grep -i two_task .bashrc
if test "m$DONOTSETTWO_TASK" = "m"
        export TWO_TASK=ORCL
[oracle@localhost ~]$ grep -i two_task .bashrc -A 1
if test "m$DONOTSETTWO_TASK" = "m"
        then
        export TWO_TASK=ORCL
        fi
[oracle@localhost ~]$ echo $TWO_TASK 
ORCL

SQL*Plus connections automatically connect to the TNS alias defined in the TWO_TASK environment variable. When it is set, sqlplus / as sysdba does not work.

It is like trying this (will not work):

sqlplus /@ORCL as sysdba

To "fix" this:

[oracle@localhost ~]$ unset TWO_TASK
[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri May 11 15:20:59 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> 

You can not connect to a PDB directly with SQL*Plus, you need to use a TNS alias or EZCONNECT. Setting TWO_TASK takes care of this, so you can login with for example sqlplus hr/hr directly to the PDB, without manually specifying its address.

I guess Oracle just wanted to make simple to connect to the ORCL PDB - instead of actually explaining how things work.

Balazs Papp
  • 41,488
  • 2
  • 28
  • 47