ADD & DROP FGA POLICY

Tablolarımızda yapılan DML işlemlerini loglayabilmek için DBMS_FGA.ADD_POLICY paketinden yararlanırız. Öncesinde audit_trail static db parametremizin ‘DB’,’EXTENDED’ olması gerekiyor. Tablo bazında fga policy lerimizi ekleyebildiğimiz gibi şema bazında da tüm tablolar için policy ekleyebiliriz ve policy leri kaldırabiliriz. İşinize yarayacak şekilde aşağıdaki procedure leri ve dinamik sorguları da paylaşıyorum. Faydası olması dileğimle.

SQL> alter system set AUDIT_TRAIL=db, extended scope=spfile sid=’*’;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 3.4206E+10 bytes
Fixed Size 2245512 bytes
Variable Size 1.7314E+10 bytes
Database Buffers 1.6710E+10 bytes
Redo Buffers 179892224 bytes
Database mounted.
Database opened.
SQL> show parameter audit_trail

NAME TYPE VALUE
———————————— ———– ——————————
audit_trail string DB, EXTENDED

select * from DBA_AUDIT_POLICIES;
SELECT ‘BEGIN DBMS_FGA.ADD_POLICY(object_schema => ”’
|| object_schema
|| ”’, object_name =>”’
|| object_name
|| ”’, policy_name =>”’
|| policy_name
|| ”’, enable => TRUE, statement_types => ”INSERT, UPDATE, SELECT, DELETE” );END;’
FROM DBA_AUDIT_POLICIES;
BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => ‘TEST_SCHEMA’,
object_name => ‘TEST_TABLE’,
policy_name => ‘FGA_POLICY01’,
enable => TRUE,
statement_types => ‘INSERT, UPDATE, SELECT, DELETE’ );
END;
/
SELECT ‘BEGIN DBMS_FGA.drop_policy(object_schema => ”’
|| object_schema
|| ”’, object_name =>”’
|| object_name
|| ”’, policy_name =>”’
|| policy_name
|| ”’);END;’
FROM DBA_AUDIT_POLICIES;

BEGIN
DBMS_FGA.drop_policy(
object_schema => ‘TEST_SCHEMA’,
object_name => ‘TEST_TABLE’,
policy_name => ‘FGA_POLICY01’);
END;
/

create table deneme_1 (id number);
select * from DBA_AUDIT_POLICIES;

AUDIT SELECT,INSERT,DELETE,UPDATE ON TEST_TABLE;

INSERT INTO TEST_TABLE VALUES (10);

UPDATE TEST_TABLE SET ID=40 WHERE ID=10;

DELETE TEST_TABLE WHERE ID=20;

SELECT * FROM TEST_TABLE;

SELECT * FROM DBA_FGA_AUDIT_TRAIL WHERE DB_USER=’TEST_SCHEMA’;

SELECT * FROM SYS.FGA_LOG$ WHERE OBJ$SCHEMA=’TEST_SCHEMA’;

SELECT * FROM SYS.AUD$ WHERE OBJ$NAME = ‘TEST_TABLE’;

SELECT * FROM SYS.AUD$ WHERE USERID=’TEST_SCHEMA’;
SELECT *
FROM sys.aud$
WHERE TIMESTAMP# BETWEEN TO_DATE (‘21.02.2017 23:00:00’,
‘dd.mm.yyyy hh24:mi:ss’)
AND TO_DATE (‘21.02.2017 23:20:00’,
‘dd.mm.yyyy hh24:mi:ss’);
SELECT * FROM dba_fga_audit_trail;
CREATE OR REPLACE PROCEDURE ADD_FGA_POLICY_SCHEMA (
S_NAME IN VARCHAR2)
IS
P_NAME VARCHAR2 (100);

CURSOR cur
IS
SELECT OWNER, TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = S_NAME;

BEGIN
FOR i IN cur
LOOP
P_NAME := i.OWNER || ‘_’ || i.TABLE_NAME;

BEGIN
DBMS_FGA.ADD_POLICY (
OBJECT_SCHEMA => i.OWNER,
OBJECT_NAME => i.TABLE_NAME,
POLICY_NAME => P_NAME,
AUDIT_CONDITION => NULL,
AUDIT_COLUMN => NULL,
STATEMENT_TYPES => ‘SELECT,INSERT,UPDATE,DELETE’);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (P_NAME||’ – ‘||SQLERRM);
END;
BEGIN
DBMS_FGA.ENABLE_POLICY (OBJECT_SCHEMA => i.OWNER,
OBJECT_NAME => i.TABLE_NAME,
POLICY_NAME => P_NAME,
ENABLE => TRUE);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (P_NAME||’ – ‘||SQLERRM);
END;
END LOOP;
END;

CREATE OR REPLACE PROCEDURE DROP_FGA_POLICY_SCHEMA (
S_NAME IN VARCHAR2)
IS
P_NAME VARCHAR2 (100);

CURSOR cur
IS
SELECT OBJECT_SCHEMA, OBJECT_NAME, POLICY_NAME
FROM DBA_AUDIT_POLICIES
WHERE OBJECT_SCHEMA = S_NAME;

BEGIN
FOR i IN cur
LOOP
P_NAME := i.POLICY_NAME;

BEGIN
DBMS_FGA.drop_policy (object_schema => i.OBJECT_SCHEMA,
object_name => i.OBJECT_NAME,
policy_name => P_NAME);
END;
END LOOP;
END;
EXEC ADD_FGA_POLICY_SCHEMA(‘TEST_SCHEMA’);

EXEC DROP_FGA_POLICY_SCHEMA(‘TEST_SCHEMA’);

 

Audit için kullanabileceğiniz diğer sorgular;

 

select name,value from v$parameter
where name like ‘audit%’;

select * from dba_stmt_audit_opts
union
select * from dba_priv_audit_opts;
select * from dba_audit_statement;
select *
from dba_sys_privs
where privilege like ‘%AUDIT%’;

select ‘audit ‘||name||’;’
from system_privilege_map
where (name like ‘CREATE%TABLE%’
or name like ‘CREATE%INDEX%’
or name like ‘CREATE%CLUSTER%’
or name like ‘CREATE%SEQUENCE%’
or name like ‘CREATE%PROCEDURE%’
or name like ‘CREATE%TRIGGER%’
or name like ‘CREATE%LIBRARY%’)
union
select ‘audit ‘||name||’;’
from system_privilege_map
where (name like ‘ALTER%TABLE%’
or name like ‘ALTER%INDEX%’
or name like ‘ALTER%CLUSTER%’
or name like ‘ALTER%SEQUENCE%’
or name like ‘ALTER%PROCEDURE%’
or name like ‘ALTER%TRIGGER%’
or name like ‘ALTER%LIBRARY%’)
union
select ‘audit ‘||name||’;’
from system_privilege_map
where (name like ‘DROP%TABLE%’
or name like ‘DROP%INDEX%’
or name like ‘DROP%CLUSTER%’
or name like ‘DROP%SEQUENCE%’
or name like ‘DROP%PROCEDURE%’
or name like ‘DROP%TRIGGER%’
or name like ‘DROP%LIBRARY%’)
union
select ‘audit ‘||name||’;’
from system_privilege_map
where (name like ‘EXECUTE%INDEX%’
or name like ‘EXECUTE%PROCEDURE%’
or name like ‘EXECUTE%LIBRARY%’);
audit select any table BY ACCESS;

select audit_option,success,failure
from dba_stmt_audit_opts
union
select privilege,success,failure
from dba_priv_audit_opts;
select username,
terminal,
action_name,
to_char(timestamp,’DDMMYYYY:HHMISS’) timestamp,
to_char(logoff_time,’DDMMYYYY:HHMISS’) logoff_time,
returncode
from dba_audit_session;
select count(*),username,terminal,to_char(timestamp,’DD-MON-YYYY’)
from dba_audit_session
where returncode<>0
group by username,terminal,to_char(timestamp,’DD-MON-YYYY’);
select count(*),username,terminal,to_char(timestamp,’DD-MON-YYYY’),returncode
from dba_audit_session
group by username,terminal,to_char(timestamp,’DD-MON-YYYY’),returncode;
select username,terminal,to_char(timestamp,’DD-MON-YYYY HH24:MI:SS’)
from dba_audit_session
where returncode<>0
and not exists (select ‘x’
from dba_users
where dba_users.username=dba_audit_session.username);

select username,
terminal,
action_name,
returncode,
to_char(timestamp,’DD-MON-YYYY HH24:MI:SS’),
to_char(logoff_time,’DD-MON-YYYY HH24:MI:SS’)
from dba_audit_session
where to_date(to_char(timestamp,’HH24:MI:SS’),’HH24:MI:SS’) < to_date(’08:00:00′,’HH24:MI:SS’)
or to_date(to_char(timestamp,’HH24:MI:SS’),’HH24:MI:SS’) > to_date(’19:30:00′,’HH24:MI:SS’);
select count(distinct(terminal)),username
from dba_audit_session
having count(distinct(terminal))>1
group by username;
select count(distinct(username)),terminal
from dba_audit_session
having count(distinct(username))>1
group by terminal;

 

Transfering Sql Plan Baselines to another database

Bazen mevcut db’deki sql plan baseline’ların sık değiştirilebilmesi veya eşlenik bir db ortamına taşınması ihtiyaçları doğabilir. Bu durumda aşağıdaki gibi sql planlara ait baseline’ların yedeğini alıp aktarabiliriz ;

select * from dba_sql_plan_baselines;

create table d_bck.dba_sql_plan_baselines_160217 as select * from dba_sql_plan_baselines;

select * from d_bck.dba_sql_plan_baselines_160217;
EXEC dbms_spm.create_stgtab_baseline (table_name => ‘MY_STG_TAB_160217′, table_owner =>’SYSTEM’ , tablespace_name => ‘USERS’);

select * from SYSTEM.MY_STG_TAB_160217;
DECLARE
l_plans_packed PLS_INTEGER;
BEGIN
l_plans_packed := DBMS_SPM.pack_stgtab_baseline(
table_name => ‘MY_STG_TAB_160217’,
table_owner => ‘SYSTEM’);

DBMS_OUTPUT.put_line(‘Plans Packed: ‘ || l_plans_packed);
END;

select * from SYSTEM.MY_STG_TAB_160217;
expdp \’/ as sysdba\’ DIRECTORY=EXPORT_BACKUP_DIR tables= SYSTEM.MY_STG_TAB_160217 DUMPFILE=MY_STG_TAB_160217.dmp logfile=MY_STG_TAB_160217.log
testdb01@oracle </backup/oracle/export> expdp \’/ as sysdba\’ DIRECTORY=EXPORT_BACKUP_DIR tables= SYSTEM.MY_STG_TAB_160217 DUMPFILE=MY_STG_TAB_160217.dmp logfile=MY_STG_TAB_160217.log
Export: Release 11.2.0.3.0 – Production on Thu Feb 16 15:50:38 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management and Real Application Testing options
Starting “SYS”.”SYS_EXPORT_TABLE_09″: “/******** AS SYSDBA” DIRECTORY=EXPORT_BACKUP_DIR tables= DUMPFILE=MY_STG_TAB_160217.dmp logfile=MY_STG_TAB_160217.log
Estimate in progress using BLOCKS method…
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 16 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/PRE_TABLE_ACTION
. . exported “SYSTEM”.”MY_STG_TAB_160217″ 9.272 MB 977 rows
Master table “SYS”.”SYS_EXPORT_TABLE_09″ successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TABLE_09 is:
/backup/oracle/export/MY_STG_TAB_160217.dmp
Job “SYS”.”SYS_EXPORT_TABLE_09″ successfully completed at 15:51:20

testdb01@oracle </backup/oracle/export>
testdb01@oracle </backup/oracle/export> ls -la
total 19240
drwxr-xr-x 2 oracle dba 256 Feb 16 15:50 .
drwxrwxrwx 7 oracle dba 4096 Feb 01 11:49 ..
-rw-r—– 1 oracle dba 9838592 Feb 16 15:51 MY_STG_TAB_160217.dmp
-rw-r–r– 1 oracle dba 1158 Feb 16 15:51 MY_STG_TAB_160217.log
–****** sadece ilgili baseline’ı aktarmak için **********
SELECT sql_handle,
plan_name,
enabled,
accepted,
fixed
FROM dba_sql_plan_baselines
WHERE LOWER (sql_text) LIKE ‘%DENEME_KOLON%’;

select * from al_directories

EXEC dbms_spm.pack_stgtab_baseline ( table_name => ‘MY_STG_TAB’, table_owner =>’SYSTEM’, sql_handle => ‘SYS_SQL_818c1879b000a439’,plan_name => ‘SYS_SQL_PLAN_b000a439c0e983c6’, FIXED => ‘YES’)
–*********************************************************

impdp \”/ as sysdba\” DIRECTORY=D_DIR tables= SYSTEM.MY_STG_TAB_160217 DUMPFILE=MY_STG_TAB_160217.dmp logfile=MY_STG_TAB_160217.log
DECLARE
l_plans_unpacked PLS_INTEGER;
BEGIN
l_plans_unpacked := DBMS_SPM.unpack_stgtab_baseline(
table_name => ‘MY_STG_TAB_160217’,
table_owner => ‘SYSTEM’);

DBMS_OUTPUT.put_line(‘Plans Unpacked: ‘ || l_plans_unpacked);
END;

 

Referans: https://oracle-base.com/articles/11g/sql-plan-management-11gr1

Result cache corruption

/*
importta alınan hata:

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 113.3 GB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
ORA-39014: One or more workers have prematurely exited.
ORA-39029: worker 1 with process name “DW00” prematurely terminated
ORA-31671: Worker process DW00 had an unhandled exception.
ORA-00600: internal error code, arguments: [qesrcRO_Dol2RO], [0x000000000], [0x000000000], [0x000000000], [], [], [], [], [], [], [], []
ORA-00955: name is already used by an existing object
ORA-06512: at “SYS.KUPW$WORKER”, line 1838
ORA-06512: at line 2

12737666 ORA-600 [qesrcro_dol2ro] / result cache corruption

*/

Result cache corruption hatası alırsanız düzeltmek için disable/enable etmek gerekiyor;
select * from GV$RESULT_CACHE_DEPENDENCY;

select * from GV$RESULT_CACHE_MEMORY;

select * from GV$RESULT_CACHE_OBJECTS;

select * from GV$RESULT_CACHE_STATISTICS;
Node1:

SQL> select instance_name from v$instance;

INSTANCE_NAME
—————-
TSTDB1

SQL> SELECT dbms_result_cache.status() FROM dual;
DBMS_RESULT_CACHE.STATUS()
——————————————————————————–
CORRUPT
SQL>

SQL> SET SERVEROUTPUT ON
SQL> EXECUTE DBMS_RESULT_CACHE.MEMORY_REPORT
R e s u l t C a c h e M e m o r y R e p o r t
Cache is corrupt.

PL/SQL procedure successfully completed.

Node2:

SQL> select instance_name from v$instance;

INSTANCE_NAME
—————-
TSTDB2
SQL> SELECT dbms_result_cache.status() FROM dual;

DBMS_RESULT_CACHE.STATUS()
——————————————————————————–
ENABLED

SQL>

SQL> SET SERVEROUTPUT ON
SQL> EXECUTE DBMS_RESULT_CACHE.MEMORY_REPORT
R e s u l t C a c h e M e m o r y R e p o r t
[Parameters]
Block Size = 1K bytes
Maximum Cache Size = 125856K bytes (125856 blocks)
Maximum Result Size = 6292K bytes (6292 blocks)
[Memory]
Total Memory = 6258808 bytes [0.124% of the Shared Pool]
… Fixed Memory = 185400 bytes [0.004% of the Shared Pool]
… Dynamic Memory = 6073408 bytes [0.121% of the Shared Pool]
……. Overhead = 142400 bytes
……. Cache Memory = 5792K bytes (5792 blocks)
……….. Unused Memory = 16 blocks
……….. Used Memory = 5776 blocks
…………… Dependencies = 4 blocks (4 count)
…………… Results = 5772 blocks
………………. SQL = 5770 blocks (5770 count)
………………. PLSQL = 2 blocks (2 count)

PL/SQL procedure successfully completed.

— Disable the result cache
alter system set RESULT_CACHE_MAX_SIZE=0;

— Check status: should return “BYPASS”
SELECT dbms_result_cache.status() FROM dual;

— Re-enable the result cache
alter system set RESULT_CACHE_MAX_SIZE=<value>;

— Check status: should return “ENABLED”
SELECT dbms_result_cache.status() FROM dual;

— Generate a report
execute dbms_result_cache.memory_report

Eğer halen result chache hata alırsa db instance ı yeniden başlatmamız gerekir.
alter system set RESULT_CACHE_MAX_SIZE=0;
alter system set RESULT_CACHE_MAX_SIZE=125856K
Bizdeki mevcut durumda şöyle; elimizde dursun;

show parameters result

client_result_cache_lag integer 3000
client_result_cache_size integer 0
result_cache_max_result integer 5
result_cache_max_size integer 128876544
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0

Downgrade to a lower DST version

11.2.0.3’ten 11.2.0.4’e upgrade ederken aşağıdaki hatayı verdi çünkü 11.2.0.3 db’de timezone versiyonu 28 idi (yaz saati patch geçişi sonrası) 11.2.0.4 yeni Oracle home’unda ise timezone versiyonu default kurulumda 14 olduğundan dolayı.

tz

 

 

 

 

 

 

 

  • 11.2.0.3’de timezone versiyonunu 28’den 14’e downgrade etmeme izin vermiyordu;

SQL> SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
2 FROM DATABASE_PROPERTIES
3 WHERE PROPERTY_NAME LIKE ‘DST_%’
4 ORDER BY PROPERTY_NAME;

PROPERTY_NAME VALUE
—————————— ——————————
DST_PRIMARY_TT_VERSION 28
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE

SQL> exec DBMS_DST.BEGIN_PREPARE(14);
BEGIN DBMS_DST.BEGIN_PREPARE(14); END;

*
ERROR at line 1:
ORA-56921: invalid time zone version
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1360
ORA-06512: at line 1
SQL> TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$affected_tables;

Table truncated.

SQL> TRUNCATE TABLE sys.dst$error_table;

Table truncated.

SQL> BEGIN
2 DBMS_DST.FIND_AFFECTED_TABLES
3 (affected_tables => ‘sys.dst$affected_tables’,
4 log_errors => TRUE,
5 log_errors_table => ‘sys.dst$error_table’);
6 END;
7 /
BEGIN
*
ERROR at line 1:
ORA-56924: prepare window does not exist
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1491
ORA-06512: at line 2
SQL> SELECT * FROM sys.dst$affected_tables;

no rows selected

SQL> EXEC DBMS_DST.END_PREPARE;
BEGIN DBMS_DST.END_PREPARE; END;

*
ERROR at line 1:
ORA-56924: prepare window does not exist
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1421
ORA-06512: at line 1
SQL> EXEC DBMS_DST.BEGIN_UPGRADE(14);
BEGIN DBMS_DST.BEGIN_UPGRADE(14); END;

*
ERROR at line 1:
ORA-56921: invalid time zone version
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1178
ORA-06512: at line 1

SQL> alter session set “_with_subquery”=materialize;

Session altered.

SQL> alter session set “_simple_view_merging”=TRUE;

Session altered.

SQL> exec DBMS_DST.BEGIN_PREPARE(14)
BEGIN DBMS_DST.BEGIN_PREPARE(14); END;

*
ERROR at line 1:
ORA-56921: invalid time zone version
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1360
ORA-06512: at line 1
SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> alter session set “_with_subquery”=materialize;

Session altered.

SQL> alter session set “_simple_view_merging”=TRUE;

Session altered.

SQL> EXEC DBMS_DST.BEGIN_UPGRADE(14);
BEGIN DBMS_DST.BEGIN_UPGRADE(14); END;

*
ERROR at line 1:
ORA-56921: invalid time zone version
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1178
ORA-06512: at line 1
SQL> SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS=’YES’;

no rows selected

SQL> set serveroutput on
SQL> VAR numfail number
SQL> BEGIN
2 DBMS_DST.UPGRADE_DATABASE(:numfail,
3 parallel => TRUE,
4 log_errors => TRUE,
5 log_errors_table => ‘SYS.DST$ERROR_TABLE’,
6 log_triggers_table => ‘SYS.DST$TRIGGER_TABLE’,
7 error_on_overlap_time => FALSE,
8 error_on_nonexisting_time => FALSE);
9 DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :numfail);
10 END;
11 /
BEGIN
*
ERROR at line 1:
ORA-56928: upgrade window does not exist
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1034
ORA-06512: at line 2
SQL> VAR fail number
SQL> BEGIN
2 DBMS_DST.END_UPGRADE(:fail);
3 DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :fail);
4 END;
5 /
BEGIN
*
ERROR at line 1:
ORA-56928: upgrade window does not exist
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 79
ORA-06512: at “SYS.DBMS_DST”, line 1265
ORA-06512: at line 2
SQL> select TZ_VERSION from registry$database;

TZ_VERSION
———-
28

 

  • Oracle’ın aşağıdaki Doc ID’sinde DST timezone versiyonunu daha aşağı bir değere downgarde edemediğimizi belirtiyor:

 

E.3) Can I “downgrade” to a lower DST version?

No, that not possible, please do NOT rollback dst patches who are used by the database(s) of the home in question.
RDBMS DST patches can be rolledback using Opatch but you cannot “downgrade” the DST version using DBMS_DST.
When the DST version specified when using DBMS_DST is lower than the current used DBMS_DST will fail with ORA-56921: invalid time zone version
If you have for example an DSTv23 database ( DST_PRIMARY_TT_VERSION = 23) and you rollback the DSTv23 patch using Opatch then the database will open but will NOT function properly.
In the alert.log the message “Daylight Saving Time feature is disabled” will appear, ORA-00600: internal error code, arguments: [qcisSetPlsqlCtx:tzi init]  may be seen (see note 362036.1)
Seen all DST version are cumulative there is also no real reason to “downgrade” a database DST version.

Updated DST Transitions and New Time Zones in Oracle RDBMS and OJVM Time Zone File Patches (Doc ID 412160.1)

  • 11.2.0.4 Oracle Home’una da yaz saati değişikliğinde geçtiğim 24701840 patch’ini uyguladıktan sonra her iki Oracle Home’un timezone versiyonu 28 olarak eşitlenmiş oldu ve dbau – Upgrade’de aldığım hatayı geçmiş oldum.

testdbserver01@oracle </oracle/setup/tz/dst/24701840> export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_2
testdbserver01@oracle </oracle/setup/tz/dst/24701840> $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 11.2.0.3.15
Copyright (c) 2017, Oracle Corporation. All rights reserved.
Oracle Home : /oracle/app/oracle/product/11.2.0/dbhome_2
Central Inventory : /oracle/app/oraInventory
from : /oracle/app/oracle/product/11.2.0/dbhome_2/oraInst.loc
OPatch version : 11.2.0.3.15
OUI version : 11.2.0.4.0
Log file location : /oracle/app/oracle/product/11.2.0/dbhome_2/cfgtoollogs/opatch/opatch2017-02-16_09-30-33AM_1.log

Verifying environment and performing prerequisite checks…
OPatch continues with these patches: 24701840

Do you want to proceed? [y|n]
Y
User Responded with: Y
All checks passed.
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name:

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: Y
Backing up files…
Applying interim patch ‘24701840’ to OH ‘/oracle/app/oracle/product/11.2.0/dbhome_2’
ApplySession: Optional component(s) [ oracle.oracore.rsf.core, 11.2.0.4.0 ] not present in the Oracle Home or a higher version is found.

Patching component oracle.oracore.rsf, 11.2.0.4.0…

Patching in all-node mode.

Updating nodes ‘fbdbadb02t’
Apply-related files are:
FP = “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_files.txt”
DP = “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_dirs.txt”
MP = “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/make_cmds.txt”
RC = “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/remote_cmds.txt”

Instantiating the file “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_files.txt.instantiated” by replacing $ORACLE_HOME in “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_files.txt” with actual path.
Propagating files to remote nodes…
Instantiating the file “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_dirs.txt.instantiated” by replacing $ORACLE_HOME in “/oracle/app/oracle/product/11.2.0/dbhome_2/.patch_storage/NApply/2017-02-16_09-30-33AM/rac/copy_dirs.txt” with actual path.
Propagating directories to remote nodes…
Patch 24701840 successfully applied.
Log file location: /oracle/app/oracle/product/11.2.0/dbhome_2/cfgtoollogs/opatch/opatch2017-02-16_09-30-33AM_1.log

OPatch succeeded.

 

Applying the DST (Daylight Saving Time) Update for the Oracle Database

30 Ekim 2016’da yaz saati değişikliği nedeniyle Oracle’ın metalinkte yayınladığı DST patch’leri uygulamıştık. 30 Ekim saat 04:00 sonrası eğer saat tekrar 03:00’e dönmüyorsa, güncellemeniz başarılı olacaktı, nitekim böyle de oldu ancak DST patch’lerini geçmemize gerek yok dediğimiz bazı Oracle db’lerimizin alert.log’larında saat farklılıklarını gördüğümüzden db’leri stop-start ettikten sonra düzelmişti. Eğer ilerde tekrar yaz saati değişikliği söz konusu olursa sizlere faydası olabilir düşüncesiyle paylaşıyorum.

OJVM DSTV28 UPDATE OCT 2016 – TZDATA2016G (Patch) -> p24701882_112040_Generic.zip

DST ->
DBMS_DST_scriptsV1.9.zip
p24701840_112040_AIX64-5L.zip
p24701840_112040_Linux-x86-64.zip

ALTER session SET time_zone=’Europe/Istanbul’;

SELECT to_timestamp_tz(’30-10-2016 02:00:00′,’DD-MM-YYYY HH24:MI:SS’)
+ NUMTODSINTERVAL(level*5, ‘MINUTE’) dt
FROM dual
CONNECT BY level <= 40;

— aşağıdaki gibi olMAMAsı lazım:
30/10/16 03:40:00,000000000 +03:00
30/10/16 03:45:00,000000000 +03:00
30/10/16 03:50:00,000000000 +03:00
30/10/16 03:55:00,000000000 +03:00
30/10/16 03:00:00,000000000 +02:00
30/10/16 03:05:00,000000000 +02:00
30/10/16 03:10:00,000000000 +02:00
30/10/16 03:15:00,000000000 +02:00
30/10/16 03:20:00,000000000 +02:00
30/10/16 03:25:00,000000000 +02:00
30/10/16 03:30:00,000000000 +02:00

— aşağıdaki gibi olması lazım:
30/10/16 03:45:00,000000000 +03:00
30/10/16 03:50:00,000000000 +03:00
30/10/16 03:55:00,000000000 +03:00
30/10/16 04:00:00,000000000 +03:00
30/10/16 04:05:00,000000000 +03:00

— Sisteminizde yama geçişi sonrası timezone versiyonu 28’e yükselmiş olmalı:

SELECT VERSION FROM V$TIMEZONE_FILE;

select * from v$timezone_file;
— 2190090.1

zdump -v Europe/Istanbul | grep 2016

— 412160.1
Example for 11.2.0.4 – the DST patch want to apply is not available for 11.2.0.4:
** Download the 11.2.0.1, 11.2.0.2 or 11.2.0.3 DST Patch for your platform.
** Unzip the RDBMS DST patch
** Copy the 2 *.dat files and the readme_xx.txt from the unzipped patch -patchnr-/files/oracore/zoneinfo directory to the 11.2.0.4 $ORACLE_HOME/oracore/zoneinfo directory
Note: unlike what the readme may say, in 11.2 and up there is no need to shut down or stop the database or other processes seen you are simply adding new files, not replacing used ones.
** Copy the 2 dat files from the patch patchnr-/files/oracore/zoneinfo/big directory to the server $ORACLE_HOME/oracore/zoneinfo/big directory
** Copy the 2 dat files from the patch patchnr-/files/oracore/zoneinfo/little directory to the server $ORACLE_HOME/oracore/zoneinfo/little directory
** Update all databases using this 11.2.0.4 home by:
testdbserver01@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo> cp *.dat $ORACLE_HOME/oracore/zoneinfo
testdbserver01@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo/big> cp *.dat $ORACLE_HOME/oracore/zoneinfo/big
testdbserver01@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo/little> cp *.dat $ORACLE_HOME/oracore/zoneinfo/little

testdbserver02@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo> cp *.dat $ORACLE_HOME/oracore/zoneinfo
testdbserver02@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo/big> cp *.dat $ORACLE_HOME/oracore/zoneinfo/big
testdbserver02@oracle </oracle/setup/tz/24701840/files/oracore/zoneinfo/little> cp *.dat $ORACLE_HOME/oracore/zoneinfo/little
testdbserver01@oracle </oracle/setup/tz/DBMS_DST_scriptsV1.9> ls -la
total 136
drwxr-xr-x 2 oracle dba 256 Jan 08 2015 .
drwxr-xr-x 4 oracle dba 256 Oct 14 15:01 ..
-rw-r–r– 1 oracle dba 6294 Jan 08 2015 countstarTSTZ.sql
-rw-r–r– 1 oracle dba 6909 Jan 08 2015 countstatsTSTZ.sql
-rw-r–r– 1 oracle dba 19502 Aug 22 2014 upg_tzv_apply.sql
-rw-r–r– 1 oracle dba 31010 Aug 22 2014 upg_tzv_check.sql
testdbserver01@oracle </oracle/setup/tz/DBMS_DST_scriptsV1.9>

SQL> @upg_tzv_check.sql;
INFO: Starting with RDBMS DST update preparation.
INFO: NO actual RDBMS DST update will be done by this script.
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: Doing checks for known issues …
INFO: Database version is 11.2.0.3 .
INFO: Database RDBMS DST version is DSTv14 .
INFO: No known issues detected.
INFO: Now detecting new RDBMS DST version.
A prepare window has been successfully started.
INFO: Newest RDBMS DST version detected is DSTv28 .
INFO: Next step is checking all TSTZ data.
INFO: It might take a while before any further output is seen …
A prepare window has been successfully ended.
INFO: A newer RDBMS DST version than the one currently used is found.
INFO: Note that NO DST update was yet done.
INFO: Now run upg_tzv_apply.sql to do the actual RDBMS DST update.
INFO: Note that the upg_tzv_apply.sql script will
INFO: restart the database 2 times WITHOUT any confirmation or prompt.
WARNING: This RAC database is not started in single instance mode.
WARNING: Set cluster_database = false and start as single instance
WARNING: BEFORE running upg_tzv_apply(_cbd).sql !
WARNING: This is REQUIRED !
SQL> @upg_tzv_apply.sql;
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: The database RDBMS DST version will be updated to DSTv28 .
ERROR: This RAC database is not started in single instance mode !
ERROR: Set cluster_database = false and start as single instance
ERROR: and then re-run upg_tzv_apply.sql .
ERROR: This is required by the startup UPGRADE needed to do the DST update.
DECLARE
*
ERROR at line 1:
ORA-20219: Stopping script – see previous message …..
ORA-06512: at line 77
5) Can the RDBMS DST version be updated without downtime? Or in a “rolling” fashion on RAC?
Short answer: no.
Detailed answer:

* ( if needed) For the apply of an RDBMS DST patch itself using Opatch or manually -> no downtime needed even if the readme of the patch may state otherwise.
* For the run of upg_tzv_check.sql -> no downtime needed.
* For the first part of upg_tzv_apply.sql after the “INFO: Restarting the database in UPGRADE mode to start the DST upgrade.” message -> downtime needed and a RAC database need to be in single instance mode (cluster_database = false) , as required by the “startup UPGRADE” . upg_tzv_apply.sql will refuse to run if the database is started with cluster_database = true.
* For the second part of upg_tzv_apply.sql after the “INFO: Upgrading all non-SYS TSTZ data.” message -> the DBMS_DST.UPGRADE_DATABASE used by upg_tzv_apply.sql will take exclusive locks on the non-SYS tables when they are actually upgraded, so this might provoke issues (deadlocks have been observed) and we strongly suggest to NOT start any applications who use the tables processed until the complete DST update is done. Other applications may already be restarted if needed.
— 1.node:

SQL> alter system set cluster_database = false scope=spfile sid=’*’;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> startup
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 603980016 bytes
Database Buffers 1795162112 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL>
testdbserver02@oracle </oracle> . oraenv
ORACLE_SID = [TSTDB2] ? TSTDB2
ORACLE_HOME = [/oracle] ? /oracle/app/oracle/product/11.2.0/dbhome_1
The Oracle base remains unchanged with value /oracle/app/oracle
testdbserver02@oracle </oracle> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 14 15:19:07 2016
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
— 1.node:

SQL> @upg_tzv_check.sql;
INFO: Starting with RDBMS DST update preparation.
INFO: NO actual RDBMS DST update will be done by this script.
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: Doing checks for known issues …
INFO: Database version is 11.2.0.3 .
INFO: Database RDBMS DST version is DSTv14 .
INFO: No known issues detected.
INFO: Now detecting new RDBMS DST version.
A prepare window has been successfully started.
INFO: Newest RDBMS DST version detected is DSTv28 .
INFO: Next step is checking all TSTZ data.
INFO: It might take a while before any further output is seen …
A prepare window has been successfully ended.
INFO: A newer RDBMS DST version than the one currently used is found.
INFO: Note that NO DST update was yet done.
INFO: Now run upg_tzv_apply.sql to do the actual RDBMS DST update.
INFO: Note that the upg_tzv_apply.sql script will
INFO: restart the database 2 times WITHOUT any confirmation or prompt.
SQL> @upg_tzv_apply.sql;
INFO: If an ERROR occurs the script will EXIT sqlplus.
INFO: The database RDBMS DST version will be updated to DSTv28 .
WARNING: This script will restart the database 2 times
WARNING: WITHOUT asking ANY confirmation.
WARNING: Hit control-c NOW if this is not intended.
INFO: Restarting the database in UPGRADE mode to start the DST upgrade.
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 603980016 bytes
Database Buffers 1795162112 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
INFO: Starting the RDBMS DST upgrade.
INFO: Upgrading all SYS owned TSTZ data.
INFO: It might take time before any further output is seen …
An upgrade window has been successfully started.
INFO: Restarting the database in NORMAL mode to upgrade non-SYS TSTZ data.
Database closed.
Database dismounted.
ORACLE instance shut down.
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 603980016 bytes
Database Buffers 1795162112 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
INFO: Upgrading all non-SYS TSTZ data.
INFO: It might take time before any further output is seen …
INFO: Do NOT start any application yet that uses TSTZ data!
INFO: Next is a list of all upgraded tables:
Table list: “SYSMAN”.”MGMT_PROV_SUITE_INST_MEMBERS”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_STAGING_DIRS”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_RPM_REP”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_OPERATION”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_NET_CONFIG”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_IP_RANGE”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_DEFAULT_IMAGE”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_CLUSTER_NODES”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_BOOTSERVER”
Number of failures: 0
Table list: “SYSMAN”.”MGMT_PROV_ASSIGNMENT”
Number of failures: 0
Table list: “SYSMAN”.”AQ$_MGMT_NOTIFY_QTABLE_S”
Number of failures: 0
Table list: “SYSMAN”.”AQ$_MGMT_NOTIFY_QTABLE_L”
Number of failures: 0
Table list: “SYSMAN”.”AQ$_MGMT_LOADER_QTABLE_S”
Number of failures: 0
Table list: “SYSMAN”.”AQ$_MGMT_LOADER_QTABLE_L”
Number of failures: 0
INFO: Total failures during update of TSTZ data: 0 .
An upgrade window has been successfully ended.
INFO: Your new Server RDBMS DST version is DSTv28 .
INFO: The RDBMS DST update is successfully finished.
INFO: Make sure to exit this sqlplus session.
INFO: Do not use it for timezone related selects.
SQL>
–1.node:

SQL> alter system set cluster_database = true scope=spfile sid=’*’;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
–2.node:

testdbserver02@oracle </oracle> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Fri Oct 14 15:28:31 2016

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

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 620757232 bytes
Database Buffers 1778384896 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL>
— 1.node:

SQL> startup
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 603980016 bytes
Database Buffers 1795162112 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL>
SQL> SELECT VERSION FROM V$TIMEZONE_FILE;

VERSION
———-
28

SQL> SELECT to_timestamp_tz(’30-10-2016 02:00:00′,’DD-MM-YYYY HH24:MI:SS’)
2 + NUMTODSINTERVAL(level*30, ‘MINUTE’) dt
3 FROM dual
4 CONNECT BY level <= 10;

DT
—————————————————————————
30-OCT-16 02.30.00.000000000 AM +03:00
30-OCT-16 03.00.00.000000000 AM +03:00
30-OCT-16 03.30.00.000000000 AM +03:00
30-OCT-16 04.00.00.000000000 AM +03:00
30-OCT-16 04.30.00.000000000 AM +03:00
30-OCT-16 05.00.00.000000000 AM +03:00
30-OCT-16 05.30.00.000000000 AM +03:00
30-OCT-16 06.00.00.000000000 AM +03:00
30-OCT-16 06.30.00.000000000 AM +03:00
30-OCT-16 07.00.00.000000000 AM +03:00

10 rows selected.

SQL>

testdbserver01@root </> date
Fri Oct 14 17:26:17 +03 2016
testdbserver01@root </> date 10300359
Sun Oct 30 03:59:33 +03 2016
testdbserver01@root </> date
Sun Oct 30 03:59:51 +03 2016
testdbserver01@root </> date
Sun Oct 30 03:59:58 +03 2016
testdbserver01@root </> date
Sun Oct 30 04:00:01 +03 2016
testdbserver01@root </> date
Sun Oct 30 04:00:03 +03 2016
testdbserver01@root </> date 10141728
Fri Oct 14 17:28:33 +03 2016
testdbserver01@root </>

 
################## OJVM patch ####################

 
— Applying the DSTv28 update for the Oracle Database (Doc ID 2190090.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=40360176028216&id=2190090.1&_adf.ctrl-state=17d9edp4b8_50#aref_section321
— 7) The OJVM DSTv28 patch 24701882
— readme: https://updates.oracle.com/Orion/Services/download?type=readme&aru=20697858

select owner, status, count(*) from all_objects
where object_type like ‘%JAVA%’ group by owner, status;

select * from all_objects where object_type like ‘%JAVA%’ and owner not in (‘SYS’,’EXFSYS’,’ORDSYS’,’MDSYS’);
testdbserver01@oracle </oracle/setup/tz> unzip p24701882_112030_Generic.zip
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> ./post -apply
ksh: ./post: 0403-006 Execute permission denied.
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> ls
post
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> ls -al
total 8
drwxr-xr-x 2 oracle dba 256 Oct 21 21:36 .
drwxr-xr-x 3 oracle dba 256 Oct 21 21:36 ..
-rw-r–r– 1 oracle dba 3575 Oct 21 21:36 post
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> chmod +x post
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> ls -al
total 8
drwxr-xr-x 2 oracle dba 256 Oct 21 21:36 .
drwxr-xr-x 3 oracle dba 256 Oct 21 21:36 ..
-rwxr-xr-x 1 oracle dba 3575 Oct 21 21:36 post
testdbserver01@oracle </oracle/setup/tz/24701882/files/custom/scripts> ./post -apply
testdbserver01@oracle </oracle/setup/tz/24701882> opatch apply
Oracle Interim Patch Installer version 11.2.0.3.5
Copyright (c) 2013, Oracle Corporation. All rights reserved.
Oracle Home : /oracle/app/oracle/product/11.2.0/dbhome_1
Central Inventory : /oracle/app/oraInventory
from : /oracle/app/oracle/product/11.2.0/dbhome_1/oraInst.loc
OPatch version : 11.2.0.3.5
OUI version : 11.2.0.3.0
Log file location : /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/24701882_Oct_27_2016_18_27_41/apply2016-10-27_18-27-41PM_1.log

Applying interim patch ‘24701882’ to OH ‘/oracle/app/oracle/product/11.2.0/dbhome_1’
Verifying environment and performing prerequisite checks…
All checks passed.
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name:

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]: y
Backing up files…

Patching component oracle.javavm.server, 11.2.0.3.0…

Verifying the update…

Patching in all-node mode.

Updating nodes ‘testdbserver02’
Apply-related files are:
FP = “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt”
DP = “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt”
MP = “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/make_cmds.txt”
RC = “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/remote_cmds.txt”

Instantiating the file “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt.instantiated” by replacing $ORACLE_HOME in “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_files.txt” with actual path.
Propagating files to remote nodes…
Instantiating the file “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt.instantiated” by replacing $ORACLE_HOME in “/oracle/app/oracle/product/11.2.0/dbhome_1/.patch_storage/24701882_Oct_21_2016_11_36_11/rac/copy_dirs.txt” with actual path.
Propagating directories to remote nodes…
Patch 24701882 successfully applied
Log file location: /oracle/app/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/24701882_Oct_27_2016_18_27_41/apply2016-10-27_18-27-41PM_1.log

OPatch succeeded.
testdbserver01@oracle </oracle/setup/tz/24701882>
testdbserver01@oracle </oracle/setup/tz/24701882>
testdbserver01@oracle </oracle/setup/tz/24701882> cd ORACLE_HOME/javavm/admin/fixTZa
ksh: ORACLE_HOME/javavm/admin/fixTZa: not found.
testdbserver01@oracle </oracle/setup/tz/24701882> cd $ORACLE_HOME/javavm/admin/fixTZa
ksh: /oracle/app/oracle/product/11.2.0/dbhome_1/javavm/admin/fixTZa: not found.
testdbserver01@oracle </oracle/setup/tz/24701882> cd $ORACLE_HOME/javavm/admin/
testdbserver01@oracle </oracle/app/oracle/product/11.2.0/dbhome_1/javavm/admin> ls -la
total 181592
drwxr-xr-x 2 oracle dba 256 Oct 27 18:28 .
drwxr-xr-x 8 oracle dba 256 Aug 21 2015 ..
-rw-r–r– 1 oracle dba 92185501 Aug 26 2011 classes.bin
-rw-r–r– 1 oracle dba 373518 Oct 21 21:36 fixTZa.sql
-rw-r–r– 1 oracle dba 4406 Oct 21 21:36 fixTZb.sql
-rw-r–r– 1 oracle dba 395767 Aug 26 2011 libjtcjt.so
testdbserver01@oracle </oracle/app/oracle/product/11.2.0/dbhome_1/javavm/admin> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 27 18:30:06 2016

Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> @fixTZa.sql;

Session altered.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Java created.

No errors.

Java altered.

No errors.

Package created.

No errors.

Package body created.

No errors.

PL/SQL procedure successfully completed.
Call completed.

Testing various timezone DST attributes
FAILED for America/Metlakatla 1451638800000 -32400000 0

FAILED for Pacific/Fakaofo 1451559600000 46800000 0
##
Bug is in fact present, so this patch is needed
##
(Perhaps) modifying ild_ub1$ for rehotloading of sun/util/calendar/ZoneInfoFile
obj# = 45647
nbytes %d = 64512, 1st read = 64512, 2nd read = -1
96 397776 385632 12144 joxbtflag>>8 = 3
===

PL/SQL procedure successfully completed.

########################################################
Bug is in fact present, so this patch is needed
Proceed by restarting the database and running script
fixTZb
########################################################

PL/SQL procedure successfully completed.

SQL> ALTER SYSTEM SET cluster_database=FALSE SCOPE=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup migrate
ORA-01102: cannot mount database in EXCLUSIVE mode
–2.node’da;

testdbserver02@oracle </oracle> . oraenv
ORACLE_SID = [TSTDB2] ? TSTDB2
ORACLE_HOME = [/oracle] ? /oracle/app/oracle/product/11.2.0/dbhome_1
The Oracle base remains unchanged with value /oracle/app/oracle
testdbserver02@oracle </oracle> sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 27 19:00:59 2016

Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
–1.node’da

SQL> startup migrate
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 637534448 bytes
Database Buffers 1761607680 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL> @fixTZb.sql;

Session altered.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Call completed.

Testing various timezone DST attributes
########################################################
Bug is no longer present. Patch succeeded.
########################################################

PL/SQL procedure successfully completed.

drop java source fixTZ
drop package fixTZ

PL/SQL procedure successfully completed.

SQL> ALTER SYSTEM SET cluster_database=TRUE SCOPE=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 637534448 bytes
Database Buffers 1761607680 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL>

–2.node’da:

SQL> startup
ORACLE instance started.

Total System Global Area 2421825536 bytes
Fixed Size 2223888 bytes
Variable Size 620757232 bytes
Database Buffers 1778384896 bytes
Redo Buffers 20459520 bytes
Database mounted.
Database opened.
SQL>

 

Referans:  Applying the DSTv28 update for the Oracle Database (Doc ID 2190090.1)

Oracle index usage count

Bazen özellikle büyük tabloların büyük boyutlardaki indexleri eğer kullanılmıyorsa önce invisible a çekip belli bir zaman izlendikten sonra drop index yöntemine gidilebilir. Indexler eğer 1 kez bile kullanılıyorsa index monitoring yaptığımızda kullanılıyor olarak gösterir bize ancak biz indexlerin tarih bazında kullanım sayısını öğrenmek istediğimizde aşağıdaki gibi bir yolu izleyebiliriz.
index kullanım sayılarını tarih bazında sorgulamak üzere iki geçici tablo oluşturuyorum:

CREATE TABLE idx_TABLE1
(
 OWNER VARCHAR2(30 BYTE),
 INDEX_NAME VARCHAR2(30 BYTE),
 FIRST_LOAD_TIME VARCHAR2(20 BYTE),
 LAST_LOAD_TIME VARCHAR2(10 BYTE),
 LAST_ACTIVE_TIME VARCHAR2(10 BYTE),
 TOTEXEC NUMBER,
 RUN_DATE DATE DEFAULT sysdate
);

CREATE TABLE idx_TABLE2
(
 OWNER VARCHAR2(30 BYTE),
 INDEX_NAME VARCHAR2(30 BYTE),
 FIRST_LOAD_TIME VARCHAR2(20 BYTE),
 LAST_LOAD_TIME VARCHAR2(10 BYTE),
 LAST_ACTIVE_TIME VARCHAR2(10 BYTE),
 TOTEXEC NUMBER,
 RUN_DATE DATE DEFAULT sysdate
);

Oracle support un Doc ID 1033478.6 sindeki do_explain procedure ünü create ediyorum:

create or replace procedure do_explain
(addr IN varchar2, sqltext IN varchar2) as
dummy varchar2 (1100);
mycursor integer;
ret integer;
my_sqlerrm varchar2 (85);
begin
dummy:=’EXPLAIN PLAN SET STATEMENT_ID=’ ;
dummy:=dummy||””||addr||””||’ FOR ‘||sqltext;
mycursor := dbms_sql.open_cursor;
dbms_sql.parse(mycursor,dummy,dbms_sql.v7);
ret := dbms_sql.execute(mycursor);
dbms_sql.close_cursor(mycursor);
commit;
exception — Insert errors into PLAN_TABLE…
when others then
my_sqlerrm := substr(sqlerrm,1,80);
insert into plan_table(statement_id,remarks)
values (addr,my_sqlerrm);
— close cursor if exception raised on EXPLAIN PLAN
dbms_sql.close_cursor(mycursor);
end;
/

Oracle support un Doc ID 1033478.6 sindeki scrpitleri customize ederek tarih bilgilerini çekiyorum ve
toplanan bilgileri geçici tablolarıma aktarıyorum:

create or replace procedure idx_big_tables_prc as
— declare
cursor c1 is select address, sql_text, DISK_READS, EXECUTIONS,
PARSE_CALLS,FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME
from gv$sqlarea where command_type in (2,3,6,7)
and parsing_schema_id != 0;
cursor c2 is select addr, sql_text from sqltemp;
addr2 varchar(16);
sqltext v$sqlarea.sql_text%type;
dreads v$sqlarea.disk_reads%type;
execs v$sqlarea.executions%type;
pcalls v$sqlarea.parse_calls%type;
f_load_time v$sqlarea.FIRST_LOAD_TIME%type;
l_load_time v$sqlarea.LAST_LOAD_TIME%type;
l_active_time v$sqlarea.LAST_ACTIVE_TIME%type;

begin
execute immediate ‘drop table sqltemp’;

execute immediate ‘create table sqltemp
(ADDR VARCHAR2 (16),
SQL_TEXT VARCHAR2 (2000),
DISK_READS NUMBER,
EXECUTIONS NUMBER,
PARSE_CALLS NUMBER,
FIRST_LOAD_TIME VARCHAR2(20),
LAST_LOAD_TIME DATE,
LAST_ACTIVE_TIME DATE)’;
open c1;
fetch c1 into addr2,sqltext,dreads,execs,pcalls,f_load_time,l_load_time,l_active_time;
while (c1%found) loop
insert into sqltemp values(addr2,sqltext,dreads,execs,pcalls,f_load_time,l_load_time,l_active_time);
commit;
fetch c1 into addr2,sqltext,dreads,execs,pcalls,f_load_time,l_load_time,l_active_time;
end loop;
close c1;
open c2;
fetch c2 into addr2, sqltext;
while (c2%found) loop
do_explain(addr2,sqltext);
fetch c2 into addr2, sqltext;
end loop;
close c2;

insert into idx_TABLE1
(OWNER, INDEX_NAME, FIRST_LOAD_TIME, LAST_LOAD_TIME, LAST_ACTIVE_TIME,TOTEXEC)
select owner,name index_name,FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME, sum(totexec) totexec from (
select p.owner, p.name,
FIRST_LOAD_TIME,
to_char(s.LAST_LOAD_TIME,’dd.mm.yyyy’) LAST_LOAD_TIME,
to_char(s.LAST_ACTIVE_TIME,’dd.mm.yyyy’) LAST_ACTIVE_TIME,
sum(s.executions) totexec
from sqltemp s, (select distinct statement_id stid, object_owner owner, object_name name from plan_table where operation = ‘INDEX’) p
where s.addr = p.stid
and p.name in (select distinct index_name from dba_indexes where table_name=’TABLE1′)
group by p.owner, p.name,s.FIRST_LOAD_TIME,s.LAST_LOAD_TIME,s.LAST_ACTIVE_TIME
order by 2 desc)
group by owner,name,FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME;

insert into idx_TABLE2
(OWNER, INDEX_NAME, FIRST_LOAD_TIME, LAST_LOAD_TIME, LAST_ACTIVE_TIME,TOTEXEC)
select owner,name index_name,FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME, sum(totexec) totexec from (
select p.owner, p.name,
FIRST_LOAD_TIME,
to_char(s.LAST_LOAD_TIME,’dd.mm.yyyy’) LAST_LOAD_TIME,
to_char(s.LAST_ACTIVE_TIME,’dd.mm.yyyy’) LAST_ACTIVE_TIME,
sum(s.executions) totexec
from sqltemp s, (select distinct statement_id stid, object_owner owner, object_name name from plan_table where operation = ‘INDEX’) p
where s.addr = p.stid
and p.name in (select distinct index_name from dba_indexes where table_name=’TABLE2′)
group by p.owner, p.name,s.FIRST_LOAD_TIME,s.LAST_LOAD_TIME,s.LAST_ACTIVE_TIME
order by 2 desc)
group by owner,name,FIRST_LOAD_TIME,LAST_LOAD_TIME,LAST_ACTIVE_TIME;

commit;

delete
from plan_table
where statement_id in(
select addr
from sqltemp
);

commit;

end;

 

Oluşturduğum idx_big_tables_prc procedure u sch. job ile 6 saatte bir çalıştırarak geçici tablolarımı besliyorum:

 

begin
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => ‘SYS.IDX_BIG_TABLES’
,start_date => TO_TIMESTAMP_TZ(‘2017/02/13 15:17:00.000000 +03:00′,’yyyy/mm/dd hh24:mi:ss.ff tzr’)
,repeat_interval => ‘FREQ=HOURLY; INTERVAL=6; BYMINUTE=00; BYSECOND=0’
,end_date => NULL
,job_class => ‘DEFAULT_JOB_CLASS’
,job_type => ‘STORED_PROCEDURE’
,job_action => ‘SYS.IDX_BIG_TABLES_PRC’
,comments => NULL
);
end;

 

Belli bir süre sonra aşağıdaki sorgularımla index kullanım sayısı düşük indexleri belirliyorum,
önce invisible a çekip bir müddet izledikten sonra indexleri drop ederek hem ASM de yer kazanıyorum hem de günlük backupların IO sunu düşürmüş oluyorum:

 

select index_name, run_date, sum(totexec) from idx_TABLE1
group by index_name, run_date
order by 2;

select index_name, run_date, sum(totexec) from idx_TABLE1 where index_name =’IX_TEST_ID’
group by index_name, run_date
order by 2;
select index_name, run_date, sum(totexec) from idx_TABLE1
having sum(totexec)< 50
group by index_name, run_date
order by 2;

 
Aşağıdaki gibi geçici index create ederek testlerinizde kullanabilirsiniz:

 

create table table_1 as select * from dba_objects;

select * from table_1 where object_id between 10 and 1000;

CREATE INDEX indx_table_1_01 ON table_1 (object_id);

select * from table_1 where object_id between :t1 and :t2;

select * from v$sql where sql_text like ‘%table_1%’;

select min (LAST_LOAD_TIME) from v$sql;

select * from v$sql_plan where sql_id=’awhh3a963v05u’;

select * from v$sql where sql_id=’awhh3a963v05u’;

select ADDRESS from v$sqlarea where sql_id=’awhh3a963v05u’;

select * from v$sqlarea where sql_id=’awhh3a963v05u’;

select * from plan_table where STATEMENT_ID=’07000000A2341B00′;

select * from sys.sqltemp where addr=’07000000A2341B00′;

————————————————————————————-
Referans: Script: To Monitor the Usage of Indexes (Doc ID 1033478.6)

Database Administration SIG 2017

TROUG Veritabanı Yönetimi Özel İlgi Grubu (Database Administration SIG) olarak 10 Şubat Cuma günü, Bilginç Akademi’de, birbirinden değerli konuşmacıların sunum yapacağı ücretsiz bir etkinlik düzenliyoruz. Veritabanı performans iyileştirmesinden, Veri sıkıştırmaya, Exadata’dan, Oracle Cloud’a bir çok konuda uzman arkadaşların sunumlar yapacağı bu etkinlik ile Oracle teknolojilerine ilgi duyan arkadaşlar arasında bilgi paylaşımı sağlamayı hedefliyoruz.

Eğer henüz TROUG’a üye değilseniz, hemen şimdi ücretsiz üye olarak etkinliğe kaydınızı yaptırabiliriniz.

Tarih:

10 Şubat 2017

 

Etkinlik Ajandası

09.30-10.15 Exadata x6 New and Cloud Features – Zekeriya Beşiroğlu
10.30-11.15 Zero Downtime Database Upgrade Using Oracle Data Guard – Gökhan Atıl
11.30-12.15 Oracle Database Benchmark Testing Tools – Talip Hakan Öztürk
13.30-14.15 Oracle Database Performance Checklist – Orhan Eripek
14.30-15.15 Oracle Public Cloud Fundementals – Okcan Yasin Saygılı
15.30-16.15 Oracle 12c Compression and Archiving – Fettullah Çabuk

 

Etkinlik Adresi:

Bilginç IT Academy
Huzur Mahallesi. Fatih Caddesi.
No:67 Kat:4
4.Levent/İstanbul
(Sanayi Mahallesi Metro İstasyonu Çıkışı)

 

Etkinlik Kayıt Formu:

Etkinliğe kayıt yaptırabilmek için http://www.troug.org/ sitesine giriş yapmanız gerekmektedir.

http://www.troug.org/haberler/database-administration-sig-2017/

“Oracle SQL, Analitik SQL ve PL/SQL” kitabımız çıktı!

Özgür Umut Vurgun ve Fahrettin Ateş ile birlikte hazırladığımız Türkiye’nin ilk “Oracle SQL, Analitik SQL ve PL/SQL” kitabını tüm kitap mağazalarından alabilirsiniz. Kitabımızın tüm Oracle Dba ve Plsql Developer arkadaşların yararlanabileceği bir başucu kaynağı olması dileğimizle.

bookhttps://www.abakuskitap.com/oracle-sql-analitik-sql-ve-pl-sql

TROUG Days 2016

2016 yılında Türk Oracle Kullanıcıları Derneği (TROUG) olarak, yeni hedeflerle yola çıkıyoruz. Uzun zamandır düzenleyemediğimiz yıllık etkinliğimizi tekrar canlandırmak, hatta öncekilerden daha büyük bir etkinlik düzenlemek adına, 29 Nisan – 1 Mayıs 2016 arasında iki günlük bir etkinlik düzenlemeyi planladık. Etkinlikte 3 paralel oturumda toplam 36 sunum yapılacak. Türkiye’den bir çok konuşmacının yanında, yurtdışından gelecek çok ünlü uzmanlar sunum yapacak. Etkinlik organizasyonunu düzenleyebileceğimiz alt yapıya sahip oteller ile görüştük ve iki alternatif belirledik. Hangisi olacağına sizin oylarınız ile karar vermek istiyoruz. Eğer Oracle teknolojileri ile uğraşıyor ve bu tür bir etkinliğe katılmaya sıcak bakıyorsanız, TROUG sitesini ziyaret edebilir, etkinlik hakkında daha detaylı bilgi alabilir ve anketimize katılabilirsiniz.

Ankete katılabilmek için (daha önce üyeliğiniz yoksa) ücretsiz olarak TROUG’a üye olmanız gerekmektedir.
Daha önce kayıt olduysanız, kullanıcı adı olarak email adresinizi girmelisiniz. Şifrenizi hatırlamıyorsanız password hatırlatma ile emailinizi girerek şifresini resetleyebilirsiniz: http://www.troug.org/sifre-resetleme/

JDE Edwards BI Publisher Template Import To ODA X4-2

“OTech Magazine – Winter 2015” yayınlandı. Makalemizi aşağıdaki linkten okuyabilirsiniz:

http://www.otechmag.com/magazine/2015/winter/ozgur-umut-vurgun—orhan-eripek.html

Oracle Cloud Day 2015 İstanbul

19 Kasım’da gerçekleştirilen Oracle Cloud Day bu yıl da dolu dolu geçti, özellikle TROUG sunumları ağırlıklı olarak teknik içerikli olduğundan her yıl olduğu gibi bu yıl da yoğun katılımcının olduğu oturumlar oldu. Detaylı anlatım için aşağıdaki linki inceleyebilirsiniz.

http://www.troug.org/haberler/oracle-cloud-day-2015-istanbul/

“Oracle Enterprise Manager Cloud Control 12c” konulu sunumumuza aşağıdaki linkten erişebilirsiniz.

http://www.slideshare.net/Orhan_Eripek/oracle-enterprise-manager-cloud-control-12c-55309385

Uploading Certificate with Oracle Wallet Manager and Orapki Utilities

“OTech Magazine Fall 2015” yayınlandı. Makalemizi aşağıdaki linkten okuyabilirsiniz:

http://www.otechmag.com/magazine/2015/fall/ozgur-umut-vurgun—orhan-eripek.html

Oracle VirtualBox’ta Disk Size’ını Artırma

 

Sanal makinamızın 3 diskinden 15 gb olanının boyutunu 20 gb’a artırmak istiyoruz.

Sanal makinamız: Oracle Enterpise Linux 6.4

Öncelikle cmd ve VirtualBox uygulamanızı Admin olarak açmalısınız.

  1. clonehd  komutu ile .vmdk formatındaki diskimizi .vdi formatında clone’unu alıyoruz
  2. showhdinfo komutu ile .vdi clone diskimizin mevcut bilgilerini görebiliriz
  3. modifyhd  komutu ile .vdi clone diskimizi (diskimizin yeni hali olacak) istediğimiz boyuta çıkarıyoruz
  4. showhdinfo komutu ile .vdi clone diskimizin boyutunun artırılmış son bilgilerini görebiliriz
  5. clonehd komutu ile de son olarak .vdi clone diskimizin formatını olması gereken .vmdk formatına çeviriyoruz

Adımları aşağıdaki gibi adım adım görebilirsiniz;

cmd ile:

Microsoft Windows [Sürüm 6.1.7601]
Telif Hakkı (c) 2009 Microsoft Corporation. Tüm hakları saklıdır.

C:\Windows\system32>cd ..

C:\Windows>cd ..

C:\>cd program

C:\>cd “Program Files”

C:\Program Files>cd Oracle

C:\Program Files\Oracle>cd VirtualBox
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd “C:\Users\orhan\Virtua
lBox VMs\DB_on_OEL6.4\DB_on_OEL-disk3.vmdk” “clone.vdi” –format vdi
0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%
Clone hard disk created in format ‘vdi’. UUID: a94f1a26-4165-4ce8-b88f-be4153af2
5a8

 
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo “clone.vdi”
UUID:           14374f36-572b-4ff6-b52b-dbef701008b4
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Program Files\Oracle\VirtualBox\clone.vdi
Storage format: vdi
Format variant: dynamic default
Capacity:       15360 MBytes
Size on disk:   2809 MBytes

 
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd “clone.vdi” –resize
20480
0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

 
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo “clone.vdi”
UUID:           14374f36-572b-4ff6-b52b-dbef701008b4
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Program Files\Oracle\VirtualBox\clone.vdi
Storage format: vdi
Format variant: dynamic default
Capacity:       20480 MBytes
Size on disk:   2809 MBytes

 
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd “clone.vdi” “C:\Users
\orhan\VirtualBox VMs\DB_on_OEL6.4\DB_on_OEL-disk3.vmdk” –format vmdk
0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%
Clone hard disk created in format ‘vmdk’. UUID: 97a504a5-27a9-496f-9d27-3b8d7612
79f8

 

.vdi formatlı diskimizin “C:\Program Files\Oracle\VirtualBox” dizinimizde oluştuğunu görebiliriz

1

 

 

 

 

 

 

yeni .vmdk diskimizin de diğer VM disklerimizin olduğu “C:\Users\orhan\VirtualBox VMs\DB_on_OEL6.4” dizininde oluştuğunu görebiliriz.

2

 

 

 

 

 

 

 

Önceki boyutu 15 gb. Bu eski diskimizi çıkarıyoruz.

3

 

 

 

 

 

 

Yeni diskimizi ekleyelim

4

 

 

 

 

 

 

5

 

 

 

 

 

 

 

Diskimizin yeni halini seçiyoruz

6

 

 

 

 

 

 

 

 

Son durumda boyutun 20 gb olduğunu görebiliriz.

7

 

Oracle Database ve Teknolojileri Semineri – THKU

09.05.2015 Cumartesi günü Ankara’da Türk Hava Kurumu Üniversitesinde “Oracle Database ve Teknolojileri” seminerimizde görüşmek üzere 🙂

oracleetkinlikafis

 

 

 

 

 

 

 

 

 

 

https://www.eventbrite.com/e/oracle-technologies-and-db-tickets-16903996308
https://www.facebook.com/thkubilgisayartoplulugu?ref=hl
https://twitter.com/utaacompclub
http://ceng.thk.edu.tr/

Uzmanlık Alanı Seçimi

Sosyal ağlardan bazı arkadaşlarımızın “Hangi uzmanlık alanını seçmeliyim?” şeklinde soruları oluyor ve tek tek cevaplıyordum, o yüzden bu makalede detaylı olarak açıklayarak paylaşmak istedim;

Uzmanlık seçimi yapmak için öncelikle hangi uzmanlık pozisyonlarının olduğunu ve nasıl bir iş akışı içerdiğini tanımak gerekiyor, veritabanı, yazılım, network, sistem uzmanlığı, analist veya proje yöneticisi,.. önemli olan bu uzmanlıkların hangisinin sizin karakter ve yaşam tarzınıza daha yakın olduğu..örneğin gecenin bir saatinde veritabanındaki problemi çözmek için uyanamam derseniz size göre olamaz veritabanı uzmanlığı veya kodlarla uğraşmayı seviyorum dersiniz yazılımı tercih edersiniz..veya da analistliği de düşünebilirsiniz -bayanlardan iyi analist çıkıyor, hatta proje yöneticiliği de bayanlara göre…şu varki herkesten öneri tavsiye alabilirsiniz ancak hiç kimse size “senin gözünden anladım sen network/veritabanı/sistem.. uzmanı olmalısın, tam sana göre” diyemez…iyi seçim yapın çünkü uzun yıllar bu işi yapacaksınız, en nihayetinde kararı yine siz verin.
Özetle öncelikle araştırma yaparak-hangi uzmanlık bana göre acaba deyip bol bol inceleyip okuyun, o alanda yapılan çalışmaların neler olduğunu..vs. uzmanların görüşlerini almaya devam edin, daha sonra da uzmanlığı ilgili uzmanına sorun memnun musunuz bu işinizden, önerir misiniz, kime göre neye göre önerirsiniz..vs. Seçim yaptıktan sonra kursuna gidebilirsiniz, başlangıç için çok faydası olur.

Üniversitedeki eğitimler eksik-yetersiz olduğundan genellikle işi işte öğreniyorsunuz, ekibinizde verilen projenin bir bölümü üzerinde kafa yordukça çalışıyorsunuz, eksiklerinizin farkına vardıkça daha çok yükleniyorsunuz, hem zaten sizi özel sektör yoracaktır işin belli bir sürede bitmesi için, o aşamalarda ekibinizdeki eski yıllanmış tecrübelilerden de birçok şey öğreneceksiniz, bir de bakmışsınız 3-4 sene sonra uzmanlaşmışsınız, burada bilmeniz gereken ilk 2-3 yıl zorluk çekmeniz olacak, hemen hepimiz mezun olduktan sonraki ilk toy yıllarımızda maalesef/mecburen sürünüyoruz, bunu atlattıktan sonrası daha kolay çünkü artık iş piyasasında da işinizde de tecrübeli, deneyimli oluyorsunuz.

Sıfır noktadan başlangıç seviyesine/bir işte çalışabilecek seviyeye gelmek için; hangi yazılım ise (.net, c#, c, c++, java,..vs) önce kendiniz çabalayınız, pdf’lerini, kitaplarını okuyunuz, uzmanlarını sosyal ağlardan takip ediniz, programı kurup çalışmalar pratikler yapınız, biraz aşina olunuz ki iş görüşmesinde IK’nın ve/veya teknik yöneticinin soracağı teknik konuları az çok cevaplayabilesiniz, ilk işe alınmanın yarısı az biraz görüşülen işe merakınız, isteğiniz, pratik çalışmalarınız yarısı da karakteriniz, ikisine de önemle bakılıyor.

Eğer seçiminiz Oracle Veritabanı üzerine bir uzmanlık alanı ise tavsiyelerimi madde madde belirteyim:

  • Oracle dokümantasyonunu, pdf’lerini, GUIDE’larını bol bol okuyun
  • OTN makalelerini – http://www.oracle.com/technetwork/articles/index.html, Linkedin’deki Oracle makalelerini, Oracle Magazine – http://www.oracle.com/technetwork/oramag/magazine/home/index.html  dergilerini bol bol okuyun
  • http://www.oracle.com ve yerli/yabancı Oracle blog’larını takip edin
  • youtube ve diğer bazı kanallarda yer alan Oracle videolarını izleyin
  • Oracle uzmanlarını sosyal hesaplarından takip edin, sorularınızı sormaktan çekinmeyin
  • Her yıl Kasım ayında gerçekleştirilen “Oracle Day” etkinliğine katılın
  • Üniversite ve/veya çeşitli kurumlarda gerçekleştirilen Oracle içerikli seminerlere katılın
  • Türk Oracle Kullanıcıları Grubu’nun tüm etkinliklerini duyurduğu http://www.troug.org/ platformunu takip edin, websitesine üye olun, fırsatları değerlendirin
  • Mümkünse/imkan bulabilirseniz stajınızı Oracle sistemlerinin kullanıldığı IT departmanlarında yapın
  • İmkanınız varsa Oracle eğitimlerini alın, çalışan iseniz şirketinizin sizi eğitime göndermesini talep edin
  • Bilgi birikiminizin ardından bilginizi resmi olarak kanıtlayabilmek, bilgi seviyenizi ispatlayabilmek için Oracle sertifikalarınızı da alın
  • Oracle Plsql Developer, Oracle DBA, Oracle Apps DBA, Oracle BI/DWH Developer, Oracle Weblogic Admin, Oracle EBS Admin,..vs. alanlardan hangisine yöneleceğinize Oracle veritabanı üzerine bilgi sahibi olduktan sonra karar verin
  • Deneyim sahibi olabilmek için uzun yıllar pratikler yapmalı, veritabanı sistemleri üzerinde projelerde bulunmalısınız
  • Her zaman söylediğim gibi “Paylaşmak Öğrenmektir”, bu yüzden öğrendiklerinizi blog ve sunumlarınızda paylaşın
  • http://dergi.bimo.org.tr/sayi02/#/46  – “Oracle Veritabanı Kariyer’ine Nasıl Başlamalı?” makalemi de okuyabilirsiniz

Uzmanlık alanı seçiminizde ve kariyerinizde başarılar dilerim.

A Day of Real World Performance 2015

taslak4B_800

 

 

 

 

 

 

 

 

 

 

Sanal performans grafiklerini bir kenara bırakın ve gerçek dünyadaki veritabanı performansına şahit olun. İstanbul’u ilk ziyaretleri 2012 yılında, yine TROUG ev sahipliğinde olan üç büyük ustanın bu özel sunumunu kaçırmayın.Türkiye’de Ask Tom’un da yazarı olarak da tanınan Tom Kyte, Real World Performans ekibinin liderlerinden Andrew Holdsworth ve bu üçlünün ayrılmaz parçası, usta mimar Graham Wood ile benzersiz bir günün tadını çıkarın. Oracle Rock Star’larından, sahnede 12c’nin incelikleri, ileri düzey sorgulama ipuçları ve performans optimizasyonu tekniklerini örnek uygulamalar ile canlı izleyin! Üç yıl aradan sonra ikinci ziyaretlerinde TROUG olarak yine bu ekibe ev sahipiliği yapmaktan gurur duyuyoruz.

Bu üst düzey etkinlikte Oracle veritabanı performansı hakkında bilmediklerinizi en iyilerden öğrenecek, sorularınızı yöneltebilecek ve tüm etkinliklerimizde olduğu gibi yine iletişim ağınızı genişletme imkanı bulacaksınız.

Etkinlikte Anlatılacak Konular:

  • Performance Problemlerini Araştırmak
  • Veri Ambarları ve Mitler
  • Indeksler ve Mitler
  • Veri Ambarı Genel Kavramlar
  • Veri Yüklemedeki Zorluklar
  • İstatistik Toplama
  • SQL Sorgularını İzlemek
  • Kaynak Yönetimi
  • OLTP Sistemler ve Performans Stratejileri
  • Eş zamanlı Sorgu İşleme
  • Otutumlar, Kursör ve SQL
  • Oracle Exadata’da Performans

Etkinlik Tarihi ve Lokasyonu:

27 Mart 2015 Cuma Saat: 09:00-16:00 – Elite World İstanbul
Ücretsiz etkinliğe kayıt ve detaylar için:

http://www.troug.org/haberler/a-day-of-real-world-performance-2015/

 

Step by Step Installing Oracle 12c on Oracle Solaris 11.2 for Sparc T5-2

Sparc T5-2 sunucu üzerine Oracle 12c database kurulumunu adım adım yapalım. Sunucu üzerine kuracağımız Solaris işletim sistemini, IP tanımlamasını ve network yapılanmasını ILOM (Integrated Lights Out Manager) konsolu üzerinden yapıyoruz. Bu şekilde rahatça uzaktan installation ve monitoring yapabiliyoruz. Konsol’a sunucu IP’si ile tarayıcıdan erişebilirsiniz. Default olarak root/changeme ile login olabilirsiniz.

Sunucu özellikleri:

Sun Sparc T5-2

  • 2 * Sparc T5 CPU
  • 256 GB RAM
  • 2 * 300GB SAS2 Disk

Sunucu hakkında detay bilgiler için: http://www.oracle.com/us/products/servers-storage/servers/sparc/oracle-sparc/t5-2/overview/index.html

Sunucu üzerinde yapılacak kurulum ve konfigurasyon ayarları için: http://docs.oracle.com/cd/E28853_01/html/E28854/docinfo.html#scrolltoc

Sunucu üzerine kuracağımız Solaris işletim sistemini – Oracle SPARC Solaris 11.2 Text Installer (sol-11_2-text-sparc.iso) bu linkten indirebilirsiniz:  http://www.oracle.com/technetwork/server-storage/solaris11/downloads/install-2245079.html

Oracle Database 12c  Release 1 (12.1.0.2.0) for Oracle Solaris on SPARC (64-bit) versiyonunu bu linkten indirebilirsiniz: http://www.oracle.com/technetwork/database/enterprise-edition/downloads/download12c-sparc64-download-2240594.html

Solaris 11.2’yi .iso file’ından kurduktan sonra sunucunun internete çıkışını sağlıyoruz ve telnet, ping başarılı ise netten Solaris için gerekli key ve paketlerini online yükleyebiliriz:

root@t5:/etc# telnet pkg.oracle.com 443
Trying 137.254.56.21…
Connected..

root@t5:/sun# pkg set-publisher -k /var/pkg/ssl/pkg.oracle.com.key.pem -c /var/pkg/ssl/pkg.oracle.com.certificate.pem -G “*” -g https://pkg.oracle.com/solaris/support/   solaris
root@akt5:/sun# pkg install solaris-desktop
root@t5:/sun# pkg install -r compatibility/packages/SUNWxwplr

root@t5:/sun# pkg install motif

root@t5:~# pkg update –accept
WARNING: The boot environment being modified is not the active one.  Changes
made in the active BE will not be reflected on the next boot.

Packages to remove:   1
Packages to install:   1
Packages to update: 196
Create boot environment: Yes
Create backup boot environment:  No
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                            198/198   10754/10754  416.8/416.8  303k/s

PHASE                                          ITEMS
Removing old actions                       3430/3430
Installing new actions                     4345/4345
Updating modified actions                  8796/8796
Updating package state database                 Done
Updating package cache                       197/197
Updating image state                            Done
Creating fast lookup database                   Done
Updating package cache                           1/1

….

  • Oracle kurulumu öncesi grup/user ve yetkileri tanımlıyoruz:

root@t5:~# groupadd oinstall
root@t5:~# groupadd dba
root@t5:~# groupadd dbgroup
root@t5:~# mkdir –p /export/home/oracle
root@t5:~# useradd -g oinstall -G dba -d /export/home/oracle oracle
root@t5:~# passwd -r files oracle
root@t5:~# chown –R oracle:oinstall /export/home/oracle
root@t5:~# mkdir -p /u01
root@t5:~# mkdir -p /oradata
root@t5:~# chown -R oracle:oinstall /u01
root@t5:~# chown -R oracle:oinstall /oradata

  • Oracle Database için Oracle user profile’ına vi editörü ile gerekli path’leri tanımlıyoruz:

root@t5:~# su – oracle
Oracle Corporation      SunOS 5.11      11.2    June 2014

oracle@t5:~$ vi /export/home/oracle/.profile

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
export PATH=$ORACLE_HOME/bin:$PATH

ulimit -n 65536

ulimit -s 32768

  • /etc/inittab  file’ına vi editörü ile aşağıdaki parametre ve değerlerini ekliyoruz:

tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500 > /dev/console

  • OS memory kaynaklarını Oracle user’ının verimli kullanabilmesi için aşağıdaki parametrelere optimum değerleri atıyoruz, OS memory’imiz 256 gb olduğundan project.max-shm-memory değerini yüksek tutabiliriz

root@t5:~#projadd -c “oracle” ‘user.oracle’

root@t5:~#projmod -sK “project.max-shm-memory=(privileged,248G,deny)” user.oracle
root@t5:~#projmod -sK “process.max-sem-nsems=(priv,4096,deny)” user.oracle
root@t5:~#projmod -sK “project.max-shm-ids=(priv,1024,deny)” user.oracle
root@t5:~#projmod -sK “project.max-sem-ids=(priv,1024,deny)” user.oracle

root@t5:~# projects -l  -> projeleri listeleyebiliriz

oracle@t5:~$ id -p  -> Oracle user id’sini görebiliriz
oracle@t5:~$ export DISPLAY=10.10.10.10:0.0

oracle@t5:~$ xhost +

 

root@t5:~#unzip solaris.sparc64_12102_database_1of2.zip

root@t5:~#unzip solaris.sparc64_12102_database_2of2.zip  

0

 

 

 

 

oracle@t5:~$ cd /export/home/database

oracle@t5:/export/home/database$ ./runInstaller

1 2 3 4 5 6 7 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • !!! swap alanı yetersiz olması durumunda extend edebilirsiniz;

mkfile 1024m /export/home/oracle/new_swap
swap -a /export/home/oracle/new_swap
swap -a /dev/zvol/dsk/rpool/new_swap

Passed..

9 10 11 12 13

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • !!!!  “ora-27125 unable to create shared memory segment” hatasını project.max-shm-memory değerinden dolayı aldık çünkü aşağıdaki çıktıdan da görüleceği gibi oracle user’ı için 2 ayrı project set edilmiş ve 100 olan oracle id’si proje değerlerimizi görmüyordu, 101 olan kaldırıldığında proje değerlerimizi gördü ve hata giderildi, set ederken buna dikkat etmeliyiz:

oracle@t5:~$ projects -l
system
projid : 0
comment: “”
users  : (none)
groups : (none)
attribs:
user.root
projid : 1
comment: “”
users  : (none)
groups : (none)
attribs:
noproject
projid : 2
comment: “”
users  : (none)
groups : (none)
attribs:
default
projid : 3
comment: “”
users  : (none)
groups : (none)
attribs:
group.staff
projid : 10
comment: “”
users  : (none)
groups : (none)
attribs:
user.oracle
        projid : 100
comment: “oracle”
users  : (none)
groups : (none)
attribs: process.max-file-descriptor=(priv,65536,deny)
process.max-sem-nsems=(priv,4096,deny)
project.max-sem-ids=(priv,1024,deny)
project.max-shm-ids=(priv,1024,deny)
project.max-shm-memory=(privileged,266287972352,deny)
oracle
        projid : 101
comment: “”
users  : (none)
groups : (none)
attribs:
oracle@t5:~$

oracle@t5:~$ id -p
uid=1101(oracle) gid=1000(oinstall) projid=100(user.oracle)

oracle@t5:~$ prctl $$

oracle@akt5:~$ projects -l
system
projid : 0
comment: “”
users  : (none)
groups : (none)
attribs:
user.root
projid : 1
comment: “”
users  : (none)
groups : (none)
attribs:
noproject
projid : 2
comment: “”
users  : (none)
groups : (none)
attribs:
default
projid : 3
comment: “”
users  : (none)
groups : (none)
attribs:
group.staff
projid : 10
comment: “”
users  : (none)
groups : (none)
attribs:
user.oracle
        projid : 100
        comment: “oracle”
        users  : (none)
        groups : (none)
        attribs: process.max-file-descriptor=(priv,65536,deny)
                 process.max-sem-nsems=(priv,4096,deny)
                 project.max-sem-ids=(priv,1024,deny)
                 project.max-shm-ids=(priv,1024,deny)
                 project.max-shm-memory=(privileged,266287972352,deny)

oracle@akt5:~$

 

Passed…

 

14
15

 

 

 

 

 

 

 

 

 

Audit Vault Collector Status Check & Send Automatic E-mail

Audit Vault 10.3 sürümünü kullanırken collector’lerin farklı zamanlarda farklı sebeplerden dolayı kapandığına şahit oldum, tabi bu collector’lerin sürekli up durumunda olmaları gerekir ki audit kayıtlarını loglayabilsinler, bu yüzden zamanında aşağıdaki gibi bir otomatik alert mekanizması kurmuştum;

CREATE TABLE av_collector_status
(
   log_date       DATE DEFAULT SYSDATE,
   collector_id   NUMBER,
   collector      VARCHAR2 (50),
   agent          VARCHAR2 (20),
   source         VARCHAR2 (20),
   bps            VARCHAR2 (20),
   rps            VARCHAR2 (20),
   ia             VARCHAR2 (10)
);
CREATE TABLE av_collector_status_history
(
   log_date       DATE DEFAULT SYSDATE,
   collector_id   NUMBER,
   collector      VARCHAR2 (50),
   agent          VARCHAR2 (20),
   source         VARCHAR2 (20),
   bps            VARCHAR2 (20),
   rps            VARCHAR2 (20),
   ia             VARCHAR2 (10)
);

CREATE OR REPLACE PROCEDURE AV_COLLECTOR_STATUS_CHECK
IS
   -- Orhan Eripek 16.12.2013
   v_dyntask   VARCHAR2 (2000);
BEGIN
   EXECUTE IMMEDIATE 'TRUNCATE TABLE av_collector_status';
   COMMIT;
   v_dyntask :=
      'insert all
      into av_collector_status_history ( collector_id, collector,agent, source, bps,rps,ia)
      into av_collector_status ( collector_id, collector,agent, source, bps,rps,ia)
select collector_id, collector,agent, source, bps,rps,ia from
(SELECT collector.collector_id,
         collector.collector_name collector,
         agent.agent_name agent,
         source.source_name source,
         bps_metric.metric_value bps,
         rps_metric.metric_value rps,
         ia_metric.metric_value ia
    FROM avsys.av$source source,
         avsys.av$collector collector,
         avsys.av$agent agent,
         (SELECT id, metric_value
            FROM AVSYS.av$valid_metrics metrics
           WHERE     metric_name = ''BYTES_PER_SEC''
                 AND metrics.CATEGORY = ''COLLECTOR'') bps_metric,
         (SELECT id, metric_value
            FROM AVSYS.av$valid_metrics metrics
           WHERE metric_name = ''IS_ALIVE'' AND metrics.CATEGORY = ''COLLECTOR'') ia_metric,
         (SELECT id, metric_value
            FROM AVSYS.av$valid_metrics metrics
           WHERE     metric_name = ''RECORDS_PER_SEC''
                 AND metrics.CATEGORY = ''COLLECTOR'') rps_metric
   WHERE     collector.source_id = source.source_id
         AND collector.agent_id = agent.agent_id
         AND source.status != 0
         AND collector.status != 0
         AND collector.collector_id = bps_metric.id
         AND collector.collector_id = ia_metric.id
         AND collector.collector_id = rps_metric.id
ORDER BY collector.collector_name)';
   EXECUTE IMMEDIATE v_dyntask;
   COMMIT;
END; 
/

CREATE OR REPLACE PROCEDURE AV_COLLECTOR_STATUS_EMAIL
IS
-- Orhan Eripek 16.12.2013
v_text long;
v_col varchar2(200);
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''10.10.10.10''';
    
for text in (select to_char(log_date,'dd.mm.yyyy hh24:mi') as log_date, collector_id,
 collector,agent, source, bps,rps,ia from avsys.av_collector_status
where collector_id in ('21','22','23'))
loop
       
    if text.ia='false' then  
    
    v_text:=v_text||'"Log_date"         '||'"Collector" '||'       "Agent"  '||' 
        "Audit_Source" '||'     "Bytes_Per_Second"  '||'     "Records_Per_Second"'||'
   "Status" '||chr(10);
    v_text:=v_text||'________'||'   ________'||'     ________'||'      ________'||'
     _____________  '||'         ______________'||'       ______'||chr(10);                                                                                                                                                                                                                                                                                                                                                       ||chr(10);
 
  v_text:=v_text||text.log_date||'   '||text.collector||'    '||text.agent||' 
  '||text.source||'   '||text.bps||'   '||text.rps||'   '||text.ia||'   ' ||chr(10);
    v_col:= text.collector;
  UTL_MAIL.send(sender => '...@...com.tr',
           recipients =>  '....@...com.tr', 
           subject => 'Otomatik Alert Mail: Prod Audit Vault''un  "'||v_col||'" Collector''ü kapanmıştır!!!',
           message => v_text,
           mime_type => 'text; charset=us-ascii'); 
             
v_text:='';                      
END IF;
end loop;        
END;
/

Bu procedure’leri istediğiniz zaman periyodunda job ile çalıştırabilirsiniz, yarım saatte bir kontrol etsin gibi.

Resim4 Resim5

 

Automatic Alert Mail

Tablespace doluluk oranı belli bir eşik değeri (örneğin %90 limitini) aştığında otomatik alert mailini alabiliriz, eski sonuçlarla karşılaştırma yapmak istiyorsak tablomuzun history’sini de oluşturabiliriz;

CREATE TABLE TABLESPACE_SIZE_DAILY
(
  LOG_AS_DATE      DATE,
  TABLESPACE_NAME  VARCHAR2(20 BYTE),
  GBYTE_USED       NUMBER,
  GBYTE_FREE       NUMBER,
  GBYTE_SUM_AREA   NUMBER,
  PERCENT_USED     NUMBER
);
CREATE TABLE TABLESPACE_SIZE_DAILY_HIST
(
  LOG_AS_DATE      DATE,
  TABLESPACE_NAME  VARCHAR2(20 BYTE),
  GBYTE_USED       NUMBER,
  GBYTE_FREE       NUMBER,
  GBYTE_SUM_AREA   NUMBER,
  PERCENT_USED     NUMBER
);


CREATE OR REPLACE PROCEDURE TABLESPACE_SIZE_CHECK
IS
   -- tablespace alanlarının kullanım durumları,dolu ve boş alanlar,yüzdeleri
   -- Orhan Eripek 16.12.2013
   v_dyntask   VARCHAR2 (2000);
BEGIN
   EXECUTE IMMEDIATE 'TRUNCATE TABLE tablespace_size_daily';
   COMMIT;
   v_dyntask :=
      'INSERT     /*+ APPEND NOLOGGING */ALL
      INTO tablespace_size_daily
           (log_as_date, tablespace_name, GBYTE_used, GBYTE_free, GBYTE_sum_area,percent_used)
      INTO tablespace_size_daily_hist
           (log_as_date, tablespace_name,GBYTE_used, GBYTE_free, GBYTE_sum_area,percent_used)
SELECT systarih, tablespace_name, TRUNC(GBYTE_used,1) as GBYTE_used, TRUNC(GBYTE_free,1) as
GBYTE_free, TRUNC(GBYTE_sum_area,1) as GBYTE_sum_area, TRUNC(percent_used,1) as percent_used
FROM                   
(SELECT SYSDATE AS systarih, a.tablespace_name,
                            a.BYTES/1024/1024/1024 AS GBYTE_used, b.BYTES/1024/1024/1024 AS GBYTE_free,
                            ((a.BYTES/1024/1024/1024)+(b.BYTES/1024/1024/1024)) AS GBYTE_sum_area,
                            ROUND (((a.BYTES - b.BYTES) / a.BYTES) * 100, 2 ) as percent_used
                       FROM (SELECT   tablespace_name, SUM (BYTES) BYTES
                                 FROM SYS.dba_data_files
                             GROUP BY tablespace_name) a,
                            (SELECT   tablespace_name, SUM (BYTES) BYTES,
                                      MAX (BYTES) max_free_area
                                 FROM SYS.dba_free_space
                             GROUP BY tablespace_name) b
                      WHERE a.tablespace_name = b.tablespace_name
                   ORDER BY ((a.BYTES - b.BYTES) / a.BYTES) DESC)';
   EXECUTE IMMEDIATE v_dyntask;
   COMMIT;
END;
/

CREATE OR REPLACE PROCEDURE TABLESPACE_SIZE_EMAIL
IS
-- Orhan Eripek 16.12.2013
v_text long;
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION SET smtp_out_server = ''10.10.10.10''';
  
 v_text:=v_text||'log_date    '||'    tablespace_name '||'    GBYTE_used   '||'   GBYTE_free '||'
    GBYTE_sum_area    '||'   percent_used '||chr(10);
 
 v_text:=v_text||'________'||'      ___________'||'       ________'||'      _________'||' 
 _____________  '||'     _________'||chr(10);
                                                                                                                                                                      
for text in (select to_char(log_as_date,'DD.MM.YYYY HH24:MI:SS') as tarih,tablespace_name,
GBYTE_used,GBYTE_free, GBYTE_sum_area, percent_used from tablespace_size_daily
where percent_used>'90')

loop
v_text:=v_text||text.tarih||’       ‘||text.tablespace_name||’                  ‘||text.GBYTE_used||’                               ‘||text.GBYTE_free||’                              ‘||text.GBYTE_sum_area||’                           ‘||text.percent_used||chr(10);
end loop;

UTL_MAIL.send(sender => ‘no-reply@……com.tr’,
recipients => ‘orhan.eripek@…..com.tr’,
subject => ‘Otomatik Alert Mail: Prod Tablespace kullanim orani %90 ı gecmistir!!!’,
message => v_text,
mime_type => ‘text; charset=us-ascii’);
END;
/

Bu procedure’leri istediğiniz zaman periyodunda job ile çalıştırabilirsiniz,
bu manuel yöntem dışında Enterprise Manager konsoldan da otomatik mail mekanizmaları oluşturulabilir

DECLARE
X NUMBER;
BEGIN
DBMS_JOB.SUBMIT
( job       => X
,what      => ‘TABLESPACE_SIZE_CHECK;’
,next_date => to_date(‘24.02.2015 06:00:00′,’dd/mm/yyyy hh24:mi:ss’)
,interval  => ‘TRUNC(SYSDATE+1)+6/24’
,no_parse  => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE(‘Job Number is: ‘ || to_char(x));
COMMIT;
END;
/

FGA (Fine Grained) Audit –Detaylı Denetim

Tabloların tüm kolonlarını seçerek veya istediğimiz kolonlar için filtreleme koyarak denetim sağlayabiliriz, denetim kayıtları sys.fga_log$ view’inde tutulur.

Örneğin orhan user’ının orhan_deneme ismindeki tablosunu FGA denetimine alalım ve raporunu Audit Vault konsolundan çekelim;

create table orhan_deneme (id number, adi varchar2(20), per_no number);
BEGIN
DBMS_FGA.ADD_POLICY 
 (object_schema    => '"ORHAN"',
                        object_name         => '«ORHAN_DENEME"',
                        policy_name         => '«ORHAN_DENEME_IUD"',
                        statement_types   => 'DELETE,INSERT,UPDATE',
                        audit_trail              => DBMS_FGA.DB,
                        audit_column_opts   => DBMS_FGA.any_columns);
END;
select POLICY_NAME from dba_audit_policies where OBJECT_NAME=‘ORHAN_DENEME';

drop etmek için;


BEGIN
   DBMS_FGA.DROP_POLICY (object_schema   => '"ORHAN"',
                         object_name     => '"ORHAN_DENEME"',
                         policy_name     => '"ORHAN_DENEME_IUD"');
END;
/
select * from orhan_deneme;
insert into orhan_deneme (id, adi, per_no) values (12,'ahmet', 76);
insert into orhan_deneme (id, adi, per_no) values (:t1,:t2, :t3);
update orhan_deneme set per_no=38 where id=22;
delete orhan_deneme where id=12;
commit;
Declare
c number;
begin
for rec in 1..100 loop 
c:=rec;
insert into orhan_deneme values(c,'orhan'||c,rec+10);
end loop;
commit;
end;


Audit Vault konsoldan tablomuzun audit loglarının raporunu çekebiliriz; Resim2
















Resim3
















aşağıdaki gibi bir sorgu ile de konsolun verdiği raporu çekebiliriz;

select B.HOST_NAME, C.USER_NAME, e.TARGET_NAME, D.EVENT_NAME, A.EVENT_TIME,
A.SQL_TEXT_str, a.SQL_BIND_STR
from
  AVSYS.AUDIT_EVENT_FACT A,
  AVSYS.CLIENT_HOST_DIM B ,
  AVSYS.USER_DIM C,
  AVSYS.EVENT_DIM d,
  AVSYS.TARGET_DIM E
where B.DIMENSION_KEY = A.CLIENT_HOST_DIM AND C.DIMENSION_KEY = A.USER_DIM 
AND D.DIMENSION_KEY = A.EVENT_DIM AND E.DIMENSION_KEY = A.TARGET_DIM AND
D.EVENT_NAME IN ('UPDATE','INSERT','DELETE') AND E.TARGET_NAME = 'ORHAN_DENEME'  
--and A.EVENT_TIME between to_timestamp( '02.11.2013','dd.mm.yyyy') and
to_timestamp( '03.11.2013','dd.mm.yyyy') 
order by event_time, c.user_name;

Auditing with triger

Triger ile denetleme örneği yapalım; çok önemli gördüğümüz tablolar için trigger yapısıyla ‘old value’ , ‘new value’ değerlerini loglayabiliriz, ‘ORHAN_TRIGGER_DENEME’ isminde oluşturduğum triger’ın nasıl logladığını inceleyelim;

-- ÖRNEK TABLO YARATILIR
CREATE TABLE ORHAN_DENEME
(
  OWNER           VARCHAR2(30 BYTE),
  OBJECT_NAME     VARCHAR2(128 BYTE),
  SUBOBJECT_NAME  VARCHAR2(30 BYTE),
  OBJECT_ID       NUMBER,
  DATA_OBJECT_ID  NUMBER,
  OBJECT_TYPE     VARCHAR2(19 BYTE),
  CREATED         DATE,
  LAST_DDL_TIME   DATE,
  TIMESTAMP       VARCHAR2(19 BYTE),
  STATUS          VARCHAR2(7 BYTE),
  TEMPORARY       VARCHAR2(1 BYTE),
  GENERATED       VARCHAR2(1 BYTE),
  SECONDARY       VARCHAR2(1 BYTE),
  NAMESPACE       NUMBER,
  EDITION_NAME    VARCHAR2(30 BYTE)
);

-- AUDIT KAYITLARINI TUTACAK BIR TABLO OLUSTURULUR
CREATE TABLE ORHAN_AUDIT_TABLE (
OWNER VARCHAR2(30),
TABLE_NAME VARCHAR2(30),
MODIFYING_USER VARCHAR2(30),
MODIFY_TIME DATE DEFAULT SYSDATE,
COLUMN_NAME varchar2(30),
BEFORE_VALUE varchar2(30),
AFTER_VALUE varchar2(30));

CREATE OR REPLACE TRIGGER ORHAN_TRIGGER_DENEME
AFTER UPDATE ON ORHAN_DENEME
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
SELECT user INTO v_username FROM dual;
INSERT INTO ORHAN_AUDIT_TABLE ( OWNER, TABLE_NAME,
MODIFYING_USER, MODIFY_TIME, COLUMN_NAME, BEFORE_VALUE, AFTER_VALUE )
VALUES ( 'AV_SRV', 'ORHAN_AUDIT_TABLE', v_username, SYSDATE,
'OBJECT_NAME', :OLD.OBJECT_NAME, :NEW.OBJECT_NAME );
END;

-- ORNEK OLMASI ACISINDAN BİRKAÇ KAYIT GIRILIR
 
Insert into ORHAN_DENEME
   (OWNER, OBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, 
    CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY, 
    GENERATED, SECONDARY, NAMESPACE)
Values
   ('SYS', 'C_OBJ#', 2, 2, 'CLUSTER', 
    TO_DATE('10/21/2011 03:16:47', 'MM/DD/YYYY HH24:MI:SS'),
    TO_DATE('10/21/2011 03:16:47', 'MM/DD/YYYY HH24:MI:SS'),
    '2011-10-21:03:16:47', 'VALID', 'N', 
    'N', 'N', 5);

Resim1

Database Administration SIG 2015

afis

 

 

 

 

 

 

 

 

 

 

TROUG olarak “Database Administration SIG 2015‏” etkinliğimizde sizlere Oracle 12c ile gelen yenilikleri, Database In-Memory, Real Application Testing ve diğer teknoloji çözümlerini, veritabanı güvenliğini ve önemli yönetim tekniklerini sunmak istiyoruz. BMO ve IKU IEEE Ortak etkinliğimizde katılımcılara çekiliş ile süpriz hediyelerimiz de olacaktır. Etkinliğimiz ücretsiz olup, kayıt yaptıran herkes davetlidir.

Etkinlik Programı:

10:00-10:20 Açılış Konuşması, Baki Şahin
10:20-11:00 Oracle 12c Database In-Memory – Gökhan Atıl
11:10-11:50 Oracle Real Application Testing Kullanımı – Baki Şahin
11:50-13:30 Öğle arası
13:30-14:10 Oracle 12c ile Gelen Yeni Özellikler – Ercan Üret
14:20-15:00 Oracle Security – Onur Çınar
15:10-15:50 Database & DWH Best Practices – Zekeriya Beşiroğlu
16:00-16:40 Oracle Veritabanı Yönetiminde Önemli Teknikler – Orhan Eripek
16:40-17:10 Panel: Genel Söyleşi

Etkinlik Tarihi ve Lokasyonu:

21 Şubat 2015 Cumartesi – İstanbul Kültür Üniversitesi Prof. Dr. Önder Öztunalı Konferans Salonu

Kayıt:  http://www.troug.org/haberler/database-administration-sig-2015/

Oracle Veritabanı Kariyeri’ne Nasıl Başlamalı?

Bilgisayar Mühendisleri Odası (BMO) Dergisinde yayınlanan “Oracle Veritabanı Kariyeri’ne Nasıl Başlamalı?” makalemi bu linkten okuyabilirsiniz; http://dergi.bimo.org.tr/sayi02/#/46

bmo_e-dergi_aralik_Ana_Sayfa_Duyuru_v2

TROUG Day Ankara 2014

poster_ankara15_v2

 

 

 

 

 

 

 

 

 

 

Türk Oracle Kullanıcıları Grubu (TROUG) olarak 23 Aralık’ta Elektrik Mühendisleri Odası (EMO) Genel Merkezindeyiz, kayıt ve detaylar için: http://www.troug.org/haberler/troug-day-ankara-2014/

Etkinlik Programı:

09:00-09:10 Açılış Konuşması
09:10-09:50 Oracle 12c Database In-Memory – Gökhan Atıl
10:00-10:40 Oracle 12c Active Dataguard New Features – Emre Baransel
10:50-11:30 Oracle 12c Multitenant – Mahir Quluzade
11:40-12:20 Oracle 12c RAC ve Flex ASM – Özgür Umut Vurgun
12:20-13:30 Yemek arası
13:30-14:10 Oracle Ürünleri ile Pizza Yapımı – Gürcan Orhan
14:20-15:00 Git ile Oracle’da Versiyon Yonetimi – Yalım Gerger
15:10-15:50 Oracle Veritabanı Yönetimi – Orhan Eripek
16:00-16:40 Veritabanı Güvenliği ve Oracle Çözümleri – Onur Çınar

 

Adres:  Elektrik Mühendisleri Odası Genel Merkezi – Eğitim Salonu Ihlamur sokak No:10 Kızılay / Ankara

Oracle Day İstanbul 2014

11.11.2014’te İstanbul Kongre Merkezinde gerçekleşen ‘Oracle Day’ bu yıl da çok verimli geçti. Her yıl mutlaka katıldığım bu güzel organizasyonda bizzat görüşemediğim Oracle’a gönül veren değerli insanlarla yakından tanışma ve sohbet etme imkanı buldum. Bilişim sektörlerinde kendi geliştirdikleri ürünleri, çözümleri tanıtan yerli IT şirketlerini ve yöneticilerini dinledim. Bu 3th party şirketlerde eski çalışma arkadaşlarımı da gördüğümde sohbetlerimiz uzadıkça uzadı 🙂 Önümüzdeki yıl ‘Oracle Day 2015’ te buluşmak üzere…

TROUG sunumlarını bu linkten inceleyebilirsiniz;

http://www.troug.org/?p=744

1 2 3

Connecting to Oracle db on Vmware virtual machine with Toad

Bu makalede, Vmware sanal Linux’umuza kurduğumuz Oracle 11g R2 db’e Windows PC’mizden Toad ile uzak bağlantı yapacağız,
Vmware sanal makimamızda Oracle Linux 6.3 ‘e Oracle 11g R2 db kurulumu için https://orhaneripek.com/2013/03/10/installing-oracle-database-11g-release-2-11-2-0-1-0-for-linux-x86-64-to-oracle-linux-6-3/ linkini inceleyebilirsiniz,
Vmware sanal Linux’umuza kurduğumuz Oracle 11g R2 db’e Windows PC’mizden Toad ile uzak bağlantı yapabilmek için öncelikle Oracle 11g R2 Client’ı ve Toad 11.6’yı Windows PC’mize kurduk,

‘Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)’ için www.oracle.com

‘Toad 11.6’ için http://toadfororacle.com

Öncelikle Linux sistemimizin firewall ayarlarını disable edelim,

Sıfırdan Win PC’mize ilk kez db tns adresi ekleyeceğimizden Windows’ta başlat-programlar’dan Oracle Net Manager tool’unu açalım ve tns bağlantı ismi için sanal makinamızdaki Oracle db ismini girelim,
TCP/IP bağlantı protokünü seçiyoruz,
sanal Linux makinamızın IP adresini giriyoruz,
Oracle db ismini girelim,

finish’ten sonra G:\app\Orhan\product\11.2.0\client_1\network\admin path’i altında tnsnames.ora file’ını create ettiğini kontrol edebiliriz,

Toad tool’u ile ordba db’imizi seçiyoruz, sys user’ını ve şifresini girerek connect oluyoruz,

Installing Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86-64 to Oracle Linux 6.3

Bu makalemde, Oracle 11G R2 64bit db’i sanal makinamıza kurduğumuz Oracle Linux 6.3 sistemi üzerine kuracağız,
Sanal makinamıza Oracle Linux 6.3 kurulumu için https://orhaneripek.com/2013/03/09/installing-oracle-linux-release-6-update-3-for-x86_64-64-bit-to-vmware-workstation-8/ linkini inceleyebilirsiniz,

‘Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86-64’ için www.oracle.com
‘SecureCRT’ için http://www.vandyke.com/
Öncelikle önceden indirdiğimiz Oracle 11g R2 db’i Windows pc’mizde unzip yapıyoruz,
SecureCRT veya WinSCP, Putty ..vb. programlarla Linux sanal makinamıza connect olup SFTP bağlantı yöntemi ile Windows pc’mizde bulunan Oracle 11g R2 db’in bulunduğu klasörü sürükleyerek SecureCRT programı üzerine bırakıyoruz ve böylelikle eğer root user’ı ile bağlanmışsak sanal Linux’ümüzde root user’ının home’u altına kopyalamış oluruz,
2 adet zip file’ı direk linux’e de atarak oradan da unzip yapabilirsiniz,

/etc/pam.d/login dosyasına

session required pam_limits.so komutunu ekleyin
/etc/security/limits.conf dosyasında aşağıdaki komut satırlarının olup olmadığını kontrol edin, yoksa ekleyin,
oracle    soft    nproc   2047
oracle    hard    nproc   16384
oracle    soft    nofile  1024
oracle    hard    nofile  65536
Oracle kurulumu için gerekli dizinleri oluşturun ve Oracle kullanıcısına bu dizinleri kullanabilme hakları verin, kurduğumuz Linux’ta Oracle kullanıcısı tanımlı olduğundan tanımlamıyoruz,
mkdir -p /u01/home/oracle/product/11.2.0/db_1/
chown root:oinstall /u01
chown -R oracle:oinstall /u01
chmod -R 777 /u01
mkdir /u01/home/oracle/oraInventory
chmod -R 777 /u01/home/oracle/oraInventory
chown oracle:oinstall /u01/home/oracle/oraInventory
.bash_profile dosyasına Oracle Home’un path’ini tanıtıyoruz,
kurulum için Oracle user’ına login oluyoruz,

Oracle 11gR2 db’ini kopyaladığımız klasörün bulunduğu dizine terminalde erişerek ./runInstaller komutunu çalıştırarak kuruluma başlıyoruz, bu ilk sayfayı boş bırakarak geçiyoruz,

database create edeceğimizden ilk seçeneği seçiyoruz,

büyük data center’larda server db oluşturmayıp laptop’umuzda db server create edeceğimizden desktop class’ı seçiyoruz,

Oracle base ve lokasyonları bu ekranda otomatikmen geliyor, burada db instance name olarak ordba‘i belirledim ve tüm db user’ları için geçerli olacak olan ortak şifreyi belirledim,

daha önce create ettiğim oraInventory path’im burda gözüktüğü gibi aynı olmalı,

özet ekranı,
kurulum gerçekleştiriliyor,
database kuruluyor,

Enterprise Manager (em)’ın bağlantı linkini bu ekranda görebiliriz,

root user’ı için gerekli olan Oracle konfigürasyon dosyalarını terminalde root user’ı ile connect olup çalıştırmamız gerekiyor,

ve finish’imiz,

Enterprise Manager’a bağlanabilmemiz için Firefox tarayıcısına Enterprise Manager linkinin güvenli olduğunu tanıtmamız gerekiyor,

sys user’ı ile login oluyoruz,
em’e bağlandık ve db’imizin genel durumu,

sqlplus’tan da db’imize bağlantı testi yapıyoruz,

Sanal makinamızdaki Oracle veritabanına bağlantı kurmak için https://orhaneripek.com/2013/03/10/connecting-to-oracle-db-on-vmware-virtual-machine-with-toad/ makalesini inceleyebilirsiniz.

Installing Oracle Linux Release 6 Update 3 for x86_64 (64 Bit) to Vmware Workstation 8

    Bu 3 aşamalı makale dizisinde sizlere ‘Vmware Workstation 8’ uygulaması ile  Oracle Linux 6.3 sanal sistemi kurulumunu, bu sistem üzerine Oracle 11g r2  kurulumunu ve lokal Windows pc’mizde kurduğumuz Oracle 11g r2 Client ile Toad 11.6 uygulaması üzerinden sanal makinemizdeki Oracle Server’ımıza nasıl bağlanabileceğimizi anlatacağım, bunun için son sürüm uygulamaları indirdim ve kurdum, inş. sizlere faydası dokunur…

‘Vmware Workstation 8 (64bit)’  için http://www.vmware.com,

‘Oracle Linux Release 6 Update 3 for x86_64 (64 Bit)’  için https://edelivery.oracle.com,

MY Local PC info:

Win 8 Enterprise N,

Intel Core i7 2.00 Ghz

8 gb ram,

64 bit

Vmware Network Editor’den ve Vmware Network ayarlarından göröbileceğiniz gibi 3 farklı seçenekte (NAT, Bridged, Host-only) bağlantı seçebilirsiniz, eğer static IP’im olsun derseniz NAT, otomatik IP alsın derseniz diğer seçenekleri kullanabilirsiniz,

 Aşağıdaki adımları izleyerek Linux’u kurabilirsiniz,
 
 lokalinizde bulunan Linux’un .iso dosyasını seçiniz,
 
sanal makinanıza isim verin ve create edeceğiniz diski, klasörü belirleyin,
 Linux disk boyutunu 20 gb olarak belirledim,
 
özet bilgisi,
Vmware’de ayarları yaptıktan sonra Linux kurulumunda aşağıdaki ilk seçeneği seçerek yolumuza devam ediyoruz…
 
 Linux .iso içeriğini test etmesin, direk Skip ile geçiniz burayı,
 
Next,
 
 English seçiniz,
 
 sonrakinde dil desteği için Turkish seçiniz,
 
her zamanki şekilde disk ayarlarımız, partition’larımız için ilk seçeneği seçiyoruz,
sanal disk’teki tüm verilerin kaybolacağına dair uyarı veriyor, zaten diskimiz yeni ve boş, Yes deyin geçin,
Host’unuza isim veriniz,
DHCP, IP aralığınızdan birini verebilirsiniz,
Time Zone için İstanbul’u seçiniz,
Root şifresi belirleyiniz,
İstediğimiz gibi disk partition’ları için ‘Create Custom Layout’ ı seçiyoruz,
20 gb’lık diskimizi seçip Create butonu ile /boot, /swap ve / partition’larımızı belirliyoruz,
/boot alanı için 100 mb’ı yeterli gördüm,
/swap alanı için 2 gb verdim,
diğer kalan tüm disk alanını kalan / partition’ına veriyoruz, ‘Fill to maximum allowable size’ ı seçioruz,
son durum bu şekilde,

burasını varsayılan olarak bırakıp ilerliyoruz,

‘Database Server’ ı seçip ilerliyoruz,

‘Customize now’ ile Oracle için gerekli bazı paketleri seçip kuruyoruz,
Desktop, Desktop Platform, General Purpose

Desktop, X Windows System,… seçebilirsiniz,

Explorer ekleyebilirsiniz,
ASM için isterseniz aşağıdaki paketi ekleyebilirsiniz,

paketleri yüklüyor, kurulumu yapıyor,

ardından reboot ediyorsunuz,

Welcome,

License?, Yes,

Eğer geçerli bir CSI’ınız varsa bu adımda kaydetmeniz gerekir, yoksa daha sonraki bir zamanda register olacağım deyip NO ile geçiniz,
Bu alanda Oracle user’ını create etmenize gerek yok çünkü default’ta Oracle user’ı tanımlı durumda,Oracle user’ı ve gruplarında ayar yapmak için Advanced..’i tıklayabilirsiniz,

Zaman bilgisi için senkronize’yi seçin,

Kdump ayarlarını default’ta bırakıp geçiniz,

reset’ten sonra karşımıza login ekranı çıkacak,

desktop,

Vmware menüsünden ‘Install VMware Tools’ u tıklayarak Windows pc’niz ile Linux’unuz arasında çözünürlük, mause geçişleri, ekran boyutları vs.. gibi senkronizasyonları ayarlamak için masaüstüne gelen ‘Vmware Tools’ cd’sindeki paketi kuruyoruz,
Windows pc’nizden Linux’e ve Linux’den Windows pc’nize karşılıklı ping atabiliyor olmanız lazım, atamıyorsanız network ayarlarınızı gözden geçiriniz,
   Vmware sanal makimamızda Oracle Linux 6.3 ‘e Oracle 11g R2 db kurulumu için https://orhaneripek.com/2013/03/10/installing-oracle-database-11g-release-2-11-2-0-1-0-for-linux-x86-64-to-oracle-linux-6-3/ linkini inceleyebilirsiniz,