1. Anar Godjaev
http://anargodjaev.wordpress.com/
UNDO TABLE SPACE OLUŞTURMA/UNDO SİZİNG/Materialized Views
Database oluşturulurken default olarak undo vermek mümkündür,
SQL>CREATE DATABASE db01
...
UNDO TABLESPACE undo1 DATAFILE 'undo1db01.dbf'
SIZE 20M AUTOEXTEND ON
Yada daha sonrası için tekrar bir undospace oluşturmak ta mümkündür.
SQL>CREATE UNDO TABLESPACE undo1
DATAFILE 'undo1db01.dbf' SIZE 20M;
Mevcut bir undo tablespace e yeni bir datafile eklemek te aşağıdaki gibidir.
SQL>ALTER TABLESPACE undotbs
ADD DATAFILE 'undotbs2.dbf' SIZE 30M
AUTOEXTEND ON;
Aşağıdaki komutlada undo görevini başka bir tablespace e verebiliriz.
SQL>ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
Mevcut bir undotablespace i bildiğimiz komutlar ile drop edebilmekteyiz.Ama dikkat etmemiz gerekn drop
ettiğimizin aktif undotablespace olmamasıdır.
SQL>SELECT a.name,b.status
FROM v$rollname a, v$rollstat b
WHERE a.name IN ( SELECT segment_name
FROM dba_segments
WHERE tablespace_name = 'UNDOTBS'
)
AND a.usn = b.usn;
Daha sonrada drop diyerek silebiliriz.
SQL>DROP TABLESPACE UNDOTBS2;
Undo istatistilerini almak istiyorsak aşağıdaki sorguyu kullanabiliriz.
SQL>SELECT end_time,begin_time,undoblks
FROM v$undostat;--Undo istatististikleri
END_TIME BEGIN_TIME UNDO
------------------ ------------------ ----22-JAN-01 13:44:18 22-JAN-01 13:43:04 19
22-JAN-01 13:43:04 22-JAN-01 13:33:04 1474
22-JAN-01 13:33:04 22-JAN-01 13:23:04 1347
2. Anar Godjaev
http://anargodjaev.wordpress.com/
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
13:23:04
13:13:04
13:03:04
12:53:04
12:43:04
12:33:04
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
22-JAN-01
13:13:04
13:03:04
12:53:04
12:43:04
12:33:04
12:23:04
1628
2249
1698
1433
1532
1075
UNDO SİZİNG
Sizing olarak ne kadar undo harcanıyor,yük nedir gibi bilgileri çalıştıracağımız sorgular ile görmek
mümkündür.
--(UR) UNDO_RETENTION değeri
--(UPS) Saniyede oluşan undo bloklarının sayısı
--(DBS) (db_block_size)
UndoSpace = [UR * (UPS * DBS)] + (DBS * 24)
SQL>SELECT (SUM(undoblks) / SUM( ((end_time - begin_time) * 86400)))
FROM v$undostat;--UPS HESAPLAMASI
Undo Space Aşağıdaki gibi de hesaplanabilir.
SQL>SELECT (UR * (UPS * DBS)) + (DBS * 24) AS "Bytes"
FROM (SELECT value AS UR
FROM v$parameter
WHERE name = 'undo_retention'),
(SELECT (SUM(undoblks)/SUM(((end_time begin_time)*86400))) AS UPS
FROM v$undostat),
(SELECT value AS DBS
FROM v$parameter
WHERE name = 'db_block_size');
DBA_ROLLBACK_SEGS view ı ile mevcut rollback segmentler görüntülenebilir.
SQL>SELECT segment_name,owner,tablespace_name,status
FROM dba_rollback_segs;
Segmentlerin kullanım bilgiside aşağıdaki sorgu ile görüntülenebilir.
SQL>SELECT n.name, s.extents, s.rssize,s.hwmsize,
s.xacts, s.status
FROM v$rollname n, v$rollstat s
WHERE n.usn = s.usn;
Kullanım amacı Uzak veritabalarındaki tabloların birebir görüntüleri yada lokal veritabalarında kullanılan
tablolar üzerinde hesaplama işlemlerini tutmak için kullanılır.En büyük Avantajı çok hızlıdırlar.Ve yeniden
oluşma süreleri olağünüstüdür.Genellikle Data Wharehouse porojelirnde kullanılırlar.
SQL>CREATE MATERIALIZED VIEW mv_emp_pk
REFRESH FAST START WITH SYSDATE
NEXT SYSDATE + 1/48
3. Anar Godjaev
http://anargodjaev.wordpress.com/
WITH PRIMARY KEY
AS SELECT * FROM emp@remote_db;
Materialized view created.
Yukarıda SQL SYSDATE + 1/48 zaman süresinde refresh olan primary key alanına göre yaratılmış bir
viewdır.
Fast optionu yarattıktan sonra remote tarafta aşağıdaki cğmleyi çalıştırmak zorundayız.
SQL> CREATE MATERIALIZED VIEW LOG ON emp;
Materialized view log created.
SQL>CREATE MATERIALIZED VIEW mv_emp_rowid
REFRESH WITH ROWID
AS SELECT * FROM emp@remote_db;
Yukarıdaki view ise rowid alanına göre refresh olan bir viewdır.
SQL> CREATE MATERIALIZED VIEW mv_empdept
AS SELECT * FROM emp@remote_db e
WHERE EXISTS
(SELECT * FROM dept@remote_db d
WHERE e.dept_no = d.dept_no)
Yukarıdaki view ise subquery mantığında yaratılmış bir viewdır.
SQL> CREATE MATERIALIZED VIEW
depart_sal_sum as
select d.department_name, sum(e.salary)
from departments d, employees e
where d.department_id = e.department_id
group by d.department_name;
Yukarıdaki view ise local tabanlı summary işlemi yapan bir viewdır.
MV leri istersek aşağıdaki komutlarla da manuel olarak refresh edebiliriz.
SQL>DBMS_MVIEW.REFRESH
(’CUST_SALES’, parallelism => 10);
SQL>DBMS_MVIEW.REFRESH_DEPENDENT(’SALES’);
SQL>DBMS_MVIEW.REFRESH_ALL_MVIEWS;
Ana tablodan oluşan MV nin yeniden yapılanabilmesi için öncelikle QUERY_REWRITE_ENABLED
parametresinin true yapılması gerekir.