Friday, February 19, 2016

"alter system register" does not work

Today my new DB created from a template script was not registered in the listener. And c was not working. Denis advised me to add the local_listener parameter into database. When I checked this parameter it was in place. But its port was wrong - instead of 1521  it was another port.
After I corrected the port and issued the "alter system register" the database successfully registered in the listener.

Wednesday, February 17, 2016

Как Вам обучение в формате Training-on-Demand?

Недавно я прошел курс Oracle 12c New Features в формате Training-on-Demand.

Приемлемый ли формат?
Такой формат тренинга в случае, если дают возможность пройти тренинг из дома, то да, приемлемый. Даже более эффективный, чем у наших российских тренеров на месте.

Вообще это мое личное мнение, но попробую выразить свои ощущения. Более высокую эффективность вижу в том, что волей неволей получаешь весь материал, который предполагается по программе, т.к. есть возможность прокрутки, паузы с тем, чтобы подробнее ознакомиться с понятиями, которые ты плохо знаешь, из других источников или документации – на курсах в классе часто не все дается или по многим темам пробегаешь что называется «галопом по европам». В надежде, что дома повторишь и разберешься, ты уезжаешь, но как правило, дома нет времени и актуальность теряется и соответственно глубина полученных знаний на порядок ниже.
На видеокурсе у меня есть возможность потратить на понимание и изучение той или иной темы больше времени. Есть возможность копать в глубину, поставив на паузу видео.
Также преподаватель выполняет все лабораторные работы в видео с объяснением причинно-следственных связей и их иллюстрациями случаями из своего опыта или особенностями прежних версий, что в некоторых практических заданиях очень важно для понимания. На курсах в классе порой не успеваешь и часто выполнение лабораторных либо сводится к перепечатыванию задания из методички, либо вообще пропускается и т.о. эффективность таких заданий порой нулевая.

Единственное, мне кажется одной недели на лабораторные работы маловато. Ведь на видео доступ дается на срок до 3 месяцев. Поэтому хорошо бы если бы давали возможность выбрать до трех недельных окон к лабораторным.



Thursday, February 11, 2016

'purge recyclebin' does not purge recyclebin

SQL> select count(*) from dba_recyclebin;

  COUNT(*)
----------
     10419

SQL> purge recyclebin;

Recyclebin purged.

SQL> select count(*) from dba_recyclebin;

  COUNT(*)
----------
     10419

How to delete all objects of a user?

How to delete all objects of a user?

After googling I stopped on "Script to Drop a User's Objects" offered on the Toad World
https://www.toadworld.com/platforms/oracle/w/wiki/5013.script-to-drop-a-user-s-objects



Thursday, February 04, 2016

Merging of all PDBs of CDBs into Single CDB

1) Merge all PDBs of cdb1 into cdb2
2) Drop cdb1

[oracle@myorasrv ~]$ . oraenv
ORACLE_SID = [cbd1] ? cdb1

[oracle@myorasrv ~]$ sqlplus / as sysdba

SQL> select name,open_mode from v$pdbs;

NAME                   OPEN_MODE
------------------------------ ----------
PDB$SEED               READ ONLY
PDB1_1                   READ WRITE

SQL> alter pluggable database pdb1_1 close immediate;

Pluggable database altered.

SQL> alter pluggable database pdb1_1 unplug into 'xmlPDB1_1.xml';

Pluggable database altered.

SQL> col PDB_NAME for a20
SQL> select pdb_name,status from cdb_PDBS
  2  where pdb_name='PDB1_1';

PDB_NAME         STATUS
-------------------- ---------
PDB1_1             UNPLUGGED

SQL> drop pluggable database pdb1_1 keep datafiles;

Pluggable database dropped.

SQL> exit

[oracle@myorasrv CDB]$ . oraenv
ORACLE_SID = [cdb1] ? cdb2
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle
[oracle@myorasrv CDB]$ sqlplus / as sysdba

SQL> !cat compat.sql 
set serveroutput on
DECLARE
  compat BOOLEAN := FALSE;
  BEGIN
  compat := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( 
  pdb_descr_file => '/u01/app/oracle/product/12.1.0/dbhome_1/dbs/xmlPDB1_1.xml', pdb_name => 'pdb1_1');
  if compat then
  DBMS_OUTPUT.PUT_LINE('Is pluggable compatible? YES');
  else DBMS_OUTPUT.PUT_LINE('Is pluggable compatible? NO');
  end if;
end;
/

SQL> @compat.sql
Is pluggable compatible? YES

PL/SQL procedure successfully completed.

SQL> create pluggable database pdb1_1 using 'xmlPDB1_1.xml' nocopy;

Pluggable database created.

SQL> alter pluggable database pdb1_1 open;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME                   OPEN_MODE
------------------------------ ----------
PDB$SEED               READ ONLY
PDB2_1                   READ ONLY
PDB2_2                   READ WRITE
PDB_ORCL2               READ WRITE
PDB1_1                   READ WRITE

SQL> exit

[oracle@myorasrv CDB]$ . oraenv
ORACLE_SID = [cdb2] ? cdb1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle
[oracle@myorasrv CDB]$ sqlplus / as sysdba

SQL> shutdown immediate
SQL> startup mount restrict;
SQL> drop database;

Database dropped.

Audit invalid passwords and locked accounts for last 30 days

set linesize 180
col OS_USERNAME for a20
col USERNAME for a15
col date_Time for a20
col USERHOST for a20
col error for a30

select to_char(TIMESTAMP,'dd-mon-yyyy hh24:mi') "Date_Time",RETURNCODE,
DECODE(RETURNCODE,'1017','Invalid username/password','28000','The account is locked') "Error",
OS_USERNAME,USERNAME,USERHOST from dba_audit_trail
where USERNAME='SPRO_DB'
and RETURNCODE in ('1017','28000')
and TIMESTAMP>SYSDATE-30

order by timestamp;

Wednesday, February 03, 2016

Cloning a Non-CDB into a CDB

Cloning a Non-CDB orcl2 into a CDB cdb2

1) First, it needs to switch source Non-CDB orcl2 DB to read only mode.

[oracle@myorasrv ~]$ . oraenv
ORACLE_SID = [cdb2] ? orcl2
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle

[oracle@myorasrv ~]$ sqlplus / as sysdba

SQL> startup mount
SQL> alter database open read only;
SQL> exit

[oracle@myorasrv ~]$ mkdir /u01/app/oracle/oradata/cdb1/pdb_orcl2
[oracle@myorasrv ~]$

2) In the cdb2, create db link that allows a connection to remote non-CDB orcl2 DB

  [oracle@edbxr36p0 ~]$ . oraenv
ORACLE_SID = [orcl2] ? cdb2
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle
[oracle@edbxr36p0 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Wed Feb 3 04:42:44 2016

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> CREATE DATABASE LINK link_orcl2
  2  CONNECT TO system IDENTIFIED BY oracle_4U
  3  USING 'orcl2';

Database link created.

3) Clone the source non-CDB DB into the CDB using the database link.

SQL> create pluggable database pdb_orcl2 from NON$CDB@link_orcl2
  2  create_file_dest='/u01/app/oracle/oradata/cdb1/pdb_orcl2';

Pluggable database created.

SQL> exit

4) Create net service name for pdb_prcl2 using netca

$ netca

4) Connect to pdb_orcl2 using the net service name to execute the
noncdb_to_pdb.sql before opening the PDB

[oracle@oramysrv ~]$ sqlplus sys@pdb_orcl2 as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
[oracle@oramysrv ~]$ sqlplus sys@pdb_orcl2 as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Feb 4 03:39:14 2016

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

Enter password:

SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
.....................
SQL> -- leave the PDB in the same state it was when we started
SQL> BEGIN
  2    execute immediate '&open_sql &restricted_state';
  3  EXCEPTION
  4    WHEN OTHERS THEN
  5    BEGIN
  6      IF (sqlcode <> -900) THEN
  7        RAISE;
  8      END IF;
  9    END;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL> WHENEVER SQLERROR CONTINUE;
SQL> alter pluggable database pdb_orcl2 open;

Pluggable database altered.
SQL> EXIT;

[oracle@myorasrv ~]$ sqlplus sys@pdb_orcl2 as sysdba

Enter password:

SQL> select count(empno) from scott.emp;

COUNT(EMPNO)
------------
      14
 

Cloning PDB within the same CDB

[oracle@myorasrv ~]$ . oraenv
ORACLE_SID = [cdb2] ? cdb2
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle
[oracle@myorasrv ~]$ mkdir $ORACLE_BASE/oradata/cdb2/pdb2_2
[oracle@myorasrv ~]$ sqlplus / as sysdba

SQL> alter pluggable database pdb2_1 close;

Pluggable database altered.

SQL> alter pluggable database pdb2_1 open;

Pluggable database altered.

SQL> alter pluggable database pdb2_1 close;

Pluggable database altered.

SQL> alter pluggable database pdb2_1 open read only;

Pluggable database altered.

SQL> create pluggable database pdb2_2 from pdb2_1
  2  CREATE_FILE_DEST='/u01/app/oracle/oradata/cdb2/pdb2_2';

Pluggable database created.

SQL> select name,open_mode from v$pdbs;

NAME                   OPEN_MODE
------------------------------ ----------
PDB$SEED               READ ONLY
PDB2_1                   READ ONLY
PDB2_2                   MOUNTED

SQL> alter pluggable database pdb2_1 close;

Pluggable database altered.

SQL> alter pluggable database pdb2_1 open;

Pluggable database altered.

SQL> alter pluggable database pdb2_2 open;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME                   OPEN_MODE
------------------------------ ----------
PDB$SEED               READ ONLY
PDB2_1                   READ WRITE
PDB2_2                   READ WRITE

SQL>

Monday, February 01, 2016

Creating a PDB from SEED

[oracle@myorasrv rdbms]$ . oraenv
ORACLE_SID = [cdb1] ? cdb2
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 is /u01/app/oracle

[oracle@myorasrv rdbms]$ mkdir $ORACLE_BASE/oradata/cdb2/pdb2_1
[oracle@myorasrv rdbms]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Feb 1 05:41:41 2016

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> create pluggable database pdb2_1 admin user pdb2_1_admin
  2  identified by oracle_4U roles=(connect)
  3  create_file_dest='/u01/app/oracle/oradata/cdb2/pdb2_1';

Pluggable database created.


SQL> col name for a10
SQL> select con_id,name,open_mode,dbid,con_uid from v$pdbs;

    CON_ID NAME       OPEN_MODE        DBID    CON_UID
---------- ---------- ---------- ---------- ----------
     2 PDB$SEED   READ ONLY   159907668  159907668
     3 PDB2_1     MOUNTED     1547403331 1547403331

SQL> alter pluggable database pdb2_1 open;

Pluggable database altered.

SQL> exit

 
[oracle@myorasrv ~]$ netca

Oracle Net Services Configuration:
..............................
[oracle@myorasrv ~]$ sqlplus sys@pdb2_1 as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Mon Feb 1 05:53:36 2016

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

Enter password:

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> !lsnrctl status
 

.....
 Service pdb2_1 has 1 instance(s).
.... 

SQL> connect sys\@localhost:1521\/pdb2_1 as sysdba
Enter password:
Connected.
SQL> connect pdb2_1_admin@PDB2_1
Enter password:
Connected.
SQL> show con_name

CON_NAME
------------------------------
PDB2_1

======================================


SQL> !ls -R $ORACLE_BASE/oradata/cdb2/pdb2_1/*
/u01/app/oracle/oradata/cdb2/pdb2_1/CDB2:
2AAFE0C2280B728AE0533834960ABEB9

/u01/app/oracle/oradata/cdb2/pdb2_1/CDB2/2AAFE0C2280B728AE0533834960ABEB9:
datafile

/u01/app/oracle/oradata/cdb2/pdb2_1/CDB2/2AAFE0C2280B728AE0533834960ABEB9/datafile:
o1_mf_sysaux_cbxw5xtk_.dbf  o1_mf_system_cbxw5xtd_.dbf    o1_mf_temp_cbxw5xtl_.dbf

SQL> !ls -l $ORACLE_BASE/oradata/cdb2/pdb2_1/*
total 4
drwxr-x--- 3 oracle oinstall 4096 Feb  1 05:44 2AAFE0C2280B728AE0533834960ABEB9