Ne Zaman Hangisini Kullanmalıyım? LOGGING mi? NOLOGGING mi?

Ne Zaman Hangisini Kullanmalıyım? LOGGING mi? NOLOGGING mi?

LOGGING kelimesi tablo, index veya tablespace oluştururken kullandığımız anahtar kelimedir. Objeyi oluştururken LOGGING kullanırsak ilgili obje üzerindeki DML işlemleri redo log dosyasında loglanır. NOLOGGING kullanılırsa log üretimi bazı durumlarda yapılmaz. LOGGING/NOLOGGING üzerine forumlarda bir çok soru sorulmaktadır. Sorulardan bazıları şu şekilde: NOLOGGING avantajı nedir? Ne zaman NOLOGGING kullanmalıyız? Tablespace düzeyinde NOLOGGING kullanıldıysa, bu tablespace içindeki tablolarımız LOGGING olabilir mi?

Tablespace seviyesindeki LOGGING/NOLOGGING kelimesi sadece bu tablespace içinde oluşturulacak objelerin varsayılan LOGGING durumunu tablespace ‘den miras (inherit) alması içindir. Şimdi test yaparak tek tek inceleyelim.

Önce NOLOGGING kullanarak NOLOGGING_TS adında bir tablespace oluşturuyorum.

CREATE TABLESPACE NOLOGGING_TS DATAFILE

‘/data_TALIPDB/nologging_ts.dbf’ SIZE 1024M AUTOEXTEND OFF

NOLOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO

FLASHBACK ON;

Şimdi oluşturduğumuz NOLOGGING_TS tablespace içinde aşağıdaki gibi bir tablo oluşturalım ve tablo scriptimizde LOGGING/NOLOGGING ifadesini kullanmayalım;

CREATE TABLE talip_deneme (

id NUMBER

)

TABLESPACE…

View original post 598 kelime daha

ORA-14402: UPDATING PARTITION KEY COLUMN WOULD CAUSE A PARTITION CHANGE

Partition’lı tablolarda partition key yaptığımız kolon bir update alıyorsa ORA-14402 hatasıyla karşılaşıyoruz. Partition key ‘i teslimat_zamani olan bir tabloda teslimat_zamanı update edildiğinde row hangi tarihe update edildiyse oraya taşınması gerekiyor. Bunun çözümü için partition’lı tablonun row movement özelliğini enable yapıyoruz.

 

CREATE TABLE PART_DENEME
(
id NUMBER NOT NULL,
isim VARCHAR2 (12) NOT NULL,
teslimat_zamani date NOT NULL
)
PARTITION BY RANGE (teslimat_zamani)
INTERVAL(NUMTODSINTERVAL(1, ‘DAY’))
(
PARTITION P_1 VALUES LESS THAN (TO_DATE(’01/10/2018 00:00:00′, ‘MM/DD/YYYY HH24:MI:SS’))
);

SQL>insert into PART_DENEME values(1,’Umut’,sysdate+1);

SQL>insert into PART_DENEME values(2,’Ahmet’,sysdate+2);

SQL>update PART_DENEME set teslimat_zamani=sysdate+5 where id = 1;

ORA-14402: updating partition key column would cause a partition change

SQL> select table_name,row_movement from user_tables where table_name = ‘PART_DENEME’

TABLE_NAME        ROW_MOVE

PART_DENEME        DISABLED

SQL> alter table PART_DENEME enable ROW MOVEMENT;

Table altered.

SQL> update PART_DENEME set teslimat_zamani=sysdate+5 where id = 1;

1 row updated.

 

Oracle Rename Table

Login olunan user’a ait bir tablonun adı değiştirilecekse:

rename ukc_deneme to deneme;

A user’ı ile login olunup B user’ına ait olan tablonun adı değiştirilecekse:

alter table B.ukc_deneme rename to deneme ;

NOT: ORA-14047 (ALTER TABLE|INDEX RENAME diğer işlemlerle birleştirilmez) hatası alınıyorsa rename to cümleciğinden sonra şema adını kaldırmalıyız.

DOĞRU KULLANIM :

alter table B.ukc_deneme rename to deneme ;,

YANLIŞ KULLANIM:(ORA-14047) 

alter table B.ukc_deneme rename to B.deneme ;

 

LSOF – Durumu Deleted ta Kalan Dosyaların Temizlenmesi

Merhabalar,

Linux işletim sistemi üzerinden bir dosya sildiniz diyelim. ls komutu ile baktınız ve dosyanın silindiğinden emin oldunuz. Diskler üzerindeki boş alan artmış mı diye baktığınızda ise bir değişikliği olmadığını görüyorsanız bu yazıyı okumaya devam edebilirsiniz.

Bu tür durumlarda lsof ile aşağıdaki komutu çalıştırarak sildiğimiz dosyanın deleted durumuna düştüğünü bu dosyayı hangi process in kullandığını bulabiliriz.

/usr/sbin/lsof | grep deleted

lsof

Bu dosyanın tamamen silinebilmesi için 2 yolumuz var.

  1.  Bağlı olduğu processler kill edilir. Dosya otomatik olarak silinecektir.
  2. Riskli bir yol olsa da disk doluluğu yaşadığımız zamanlarda bu işlemi yapabiliriz;

devdb_diag_5445.trc dosyasını tamamen silmek istediğimizde process id sinin 5445 olduğunu yukarıda görebiliyorum. /proc dizini ile bu processin yaptığı işlemleri görebiliyorum.

ls -l /proc/5445/fd

proc

Dosyayı da gördükten sonra içini truncate ederek boş alan sağlamış oluyoruz.

[root@devdb ~]# :>/proc/5445/fd/17

 

Oracle 12c R2 – Partitioning İyileştirmeleri

Herkese Selam,

Bu yazıda Oracle 12c R2 ile beraber gelen partitioning konusundaki iyileştirmelerden bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

Partitioning bilindiği üzere Oracle’ın en temel ve en çok beğendiğim özelliklerinden biri. Özellikle büyük hacimli tablolardaki verilere ulaşmada oldukça işimizi kolaylaştıran ve genel sorgu performansımızı arttıran bir veritabanı özelliği.

Oracle 12c R2’den önce bir tabloyu sadece yaratma aşamasında fiziksel olarak partitionlı bir şekilde yaratabiliyorduk. Bunun dışında partitionsız yaratılmış ve hızla büyüyen bir tabloyu partitionlı bir hale getirmek istediğimizde ne yazık ki bu işlemi gerçekleştiremiyorduk ve devamında veriye erişim performanslarımızda düşüşler yaşıyorduk.

Oracle 12c R2’den önce davranışın ne olduğuna bakmak gerekirse;

//db_version: 11g R2 CREATE TABLE partitionTest ( YEARMONTH NUMBER, INVOICE_ID NUMBER, PRICE NUMBER ); INSERT /*+append*/ INTO partitionTest SELECT TO_NUMBER (TO_CHAR (SYSDATE - MOD (LEVEL, 365), 'YYYYMM')) YEARMONTH, LEVEL INVOCE_ID, MOD (LEVEL, 365) * 10 price FROM DUAL CONNECT BY LEVEL < 100000; COMMIT; ALTER TABLE partitionTest MODIFY PARTITION…

View original post 364 kelime daha

FIND ORACLE BLOCKING SESSIONS

Aşağıdaki sorgu hangi session’ın blocking lock a sebebiyet verdiği ve hangi sessionların beklediği sonucunu vermektedir. Holder ile işaretlenmiş sid nin kill sql’i ve trace başlatma sorgusu da bulunabilir.

SELECT l. sess,
       s .inst_id || ‘_’
       || TRIM (
                NVL ( s.CLIENT_INFO , s. USERNAME)
             || ‘_’
             || s .ACTION
             || ‘_’
             || s .MODULE
             || ‘_’
             || s .USERNAME)
          “USER”,
       –o.object_name,
       s .status,
       s .inst_id,
       s .sid,
       s .serial#,
       w .event,
       ROUND ( w.seconds_in_wait / 60 , 2 ) minutes_in_wait,
       CASE
          WHEN l.block > 0 AND w.event NOT IN (‘enqueue’ )
          THEN
             ‘kill -9 ‘ || p. spid
          ELSE
             NULL
       END
          kill_os ,
       CASE
          WHEN l.block > 0 AND w.event NOT IN (‘enqueue’ )
          THEN
                ‘ALTER SYSTEM KILL SESSION ”’
             || s .sid
             || ‘,’
             || s .serial#
             || ‘,@’
             || S .INST_ID
             || ”’;’
          ELSE
             NULL
       END
          kill_sid ,
          ‘begin sys.dbms_system.set_sql_trace_in_session(‘
       || s .sid
       || ‘,’
       || s .serial#
       || ‘,TRUE); end;’
          start_trace ,
          ‘begin sys.dbms_system.set_sql_trace_in_session(‘
       || s .sid
       || ‘,’
       || s .serial#
       || ‘,FALSE); end;’
          stop_trace ,
       s .osuser,
       s .machine,
       s .last_call_et
  FROM (  SELECT DECODE (l.request , 0 , ‘Holder: ‘ , ‘      Waiter: ‘ ) sess, l.*
            FROM GV$LOCK l
           WHERE ( l.id1, l.id2, l.TYPE) IN (SELECT id1, id2, TYPE
                                              FROM gV$LOCK
                                             WHERE request > 0)
        ORDER BY l.id1, l.request ) l
       JOIN gv$session s
          ON l.sid = s.sid AND s.inst_id = l. inst_id
       —  left outer join dba_objects o on o.object_id=l.id1
       LEFT OUTER JOIN gv$session_wait w
          ON w.sid = s.sid AND w.INST_ID = s. INST_ID
       LEFT OUTER JOIN gv$process p
          ON p. addr = s.paddr AND p. inst_id = s.inst_id ;

Exadata power off/on steps

ibrisim

Selamlar,

aşağıdaki adımları izleyerek exadata’nızı tutarlı bir şekilde kapatıp açabilirsiniz.

###################CHEKCS###################
1. check all cell nodes (MS, RS & CELLSRV services must be running)

cd /opt/oracle.SupportTools/onecommand
cat dbs_group
cat cell_group

dcli -g cell_group -l root "su - celladmin -c "cellcli -e list cell detail ""

dcli -g cell_group -l root "su - celladmin -c "cellcli -e LIST GRIDDISK WHERE STATUS = 'inactive' ""

2. check cluster services

/u01/app/11.2.0/grid/bin/crsctl stat res -t

3. check all dbnodes and cellnodes

dcli -g cell_group -l root 'hostname; uptime'
dcli -g dbs_group -l root 'hostname; uptime'

###################DISABLE ASR###################

1. check asr configuration
– on db node

If your Exadata Server Software is release 12.1.2.x or later:
dcli -g dbs_group -l root -n "dbmcli -e list dbserver attributes snmpSubscriber"
If your Exadata Server Software release is earlier than 12.1.2.x:
dcli -g dbs_group -l root –n "/opt/oracle.cellos/compmon/exadata_mon_hw_asr.pl -get_snmp_subscribers -type asr"

– on cell

If your Exadata Server Software is release 12.1.2.x or…

View original post 587 kelime daha

HIGH AVABILITY: Oracle RAC vs. RAC One Node vs. Data Guard

Let IT know

I try to say as simple as possible. If we have to find HA solution for ORACLE DB, I will introduce for you the alternatives.  I collected as much information as possible about the available technologies such as RAC, One Node RAC and Data Guard.  In this article I do not want to consider explaining all of these technologies, more than compare with each other, help to someone summaries the features, advantages, disadvantages. And just one other important aspect: I take the focus just for high availability and I will not concentrate the other criteria. So, let’s start with basic introduction part:

View original post 937 kelime daha