Oracle Basic [ non-partition table into partitioned table ]

12 12 2008

Oracle basic, Bagaimana cara ngerubah tabel non-partisi ke tabel berpartisi, berikut beberapa cara yang biasa digunakan: A. Metode Export/Import B. Insert dengan metode sub-query C. metode Partition exchange. Metode2 berikut akan membuat sebuah tabel partisi dari tabel yang sebelumnya belum dipartisi. Sekarang kita umpamakan tabel EMP adalah sebuah tabel non-partisi.

A. Metode Export/import

1) Export tabel EMP non-partisi:

exp username/password tables=emp file=emp_export.dmp log=emp_export.log

2) Drop table EMP:

DROP TABLE EMP CASCADE CONSTRAINTS PURGE;

3) Recreate tabel EMP dengan partisi:

create table EMP (
empo number(3),
name varchar2(15))
partition by range (qty)
(
partition p1 values less than (501),
partition p2 values less than (maxvalue)
);

4) Import tabel dengan gunakan parameter ignore=y:

imp user/password file=emp_export.dmp ignore=y

Parameter ignore=y akan membuat proses import skip pada proses create tabel dan melanjutkan meload semua data.

B. Insert dengan metode subquery

1) Create tabel partisi :

create table EMP_PART (
empo number(3),
name varchar2(15))
partition by range (qty)
(
partition p1 values less than (501),
partition p2 values less than (maxvalue)
);

2) Insert data kedalam tabel yang sudah kita create dan berpartisi dengan subquery dari tabel non-partisi:

insert into EMP_TEMP (qty, name) select * from EMP

Note: EMP adalah tabel non-partisi.

3) Selanjutnya kita ubah tabel yang sudah berpartisi sehingga mempunyai nama yang sama dengan tabel yang

original, DROP tabel original dan rename tabel baru yang sudah berpartisi:

DROP TABLE EMP CASCADE CONSTRAINTS PURGE;

alter table EMP_TEMP rename to EMP;

C. Metode Partition Exchange ALTER TABLE EXCHANGE PARTITION dapat digunakan untuk convert sebuah partisi atau

subpartisi ke tabel non-partisi dan dari tabel non-partisi ke tabel partisi atau subpartisi dari tabel partisi

dengan exchange data dan index segment.

1) “Create table dummy_temp as select …” dengan partisi yang kita perlukan

2) Kemudian lakukan alter table EXCHANGE partition with tabel dummy yang kita create ;

SQL> CREATE TABLE p_emp
2 (sal NUMBER(7,2))
3 PARTITION BY RANGE(sal)
4 (partition emp_p1 VALUES LESS THAN (2000),
5 partition emp_p2 VALUES LESS THAN (4000));

Table created.

SQL> SELECT * FROM emp;

EMPNO ENAME JOB MGR HIREDATE SAL
——— ———- ——— ——— ——— ———
7369 SMITH CLERK 7902 17-DEC-80 800 7499 ALLEN SALESMAN 7698 20-FEB-81 1600
7521 WARD SALESMAN 7698 22-FEB-81 1250 7566 JONES MANAGER 7839 02-APR-81 2975
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 7698 BLAKE MANAGER 7839 01-MAY-81 2850
7782 CLARK MANAGER 7839 09-JUN-81 2450 7788 SCOTT ANALYST 7566 19-APR-87 3000
7839 KING PRESIDENT 17-NOV-81 5000 7844 TURNER SALESMAN 7698 08-SEP-81 1500
7876 ADAMS CLERK 7788 23-MAY-87 1100 7900 JAMES CLERK 7698 03-DEC-81 950
7902 FORD ANALYST 7566 03-DEC-81 3000 7934 MILLER CLERK 7782 23-JAN-82 1300

14 rows selected.

SQL> CREATE TABLE dummy_y as SELECT sal FROM emp WHERE sal<2000;

Table created.

SQL> CREATE TABLE dummy_z as SELECT sal FROM emp WHERE sal BETWEEN 2000 AND 3999;

Table created.

SQL> alter table p_emp exchange partition emp_p1 with table dummy_y;

Table altered.

SQL> alter table p_emp exchange partition emp_p2 with table dummy_z;

Table altered





Oracle 11g [ Access Control Lists for UTL_TCP/HTTP/SMTP ]

4 12 2008

utl_tcp, utl_http dan utl smtp adalah yang menghubungkan antara server diluar lingkungan database.utl_tcp adalah berguna untuk melakukan
koneksi TCP/IP diantara 2 host, tidak lewat penghubung database. Utl_http berguna untuk request http dari sebuah webserver dan utl_smtp untuk koneksi smtp mail antar host. Tool-tool ini memiliki celah keamanan yang besar. Menggunakan utl_tcp seorang user database bisa connect ke mesin lain yang dekat dari host tsb tanpa harus melewati system prompt.

Oracle 11g mempunyai solusi baru , kita dapat memberi grant untuk mengeksekusi privilege package ke semua orang tapi bisa menentukan resource mana yang dapat mereka panggil. Mudahnya utl_tcp dapat membatasi dalam memanggil hanya untuk beberapa IP address saja. Dan Mekanisme ini disebut Access Control List (ACL). Jika host ada didaftar ACL maka user bisa menggunakan utl_tcp. Beberapa eksekusi privillege di utl_tcp tidak cukup, meskipun begitu tidak mungkin proses dari luar mengambil alih utl_tcp package dan membuat koneksi yang tidak diperkenankan.

Cara kerjanya adalah sebagai berikut, kita create dahulu sebuah Access List

begin
dbms_network_acl_admin.create_acl (
acl => ‘utlpkg.xml’,
description => ‘Normal Access’,
principal => ‘CONNECT’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null
);
end;

Ini adalah parameter principal : ‘CONNECT’ berarti bahwa ACL bisa melakukan koneksi role, kita bisa mendefinisikan user atau role disini.
ACL dibuat sebagai file bernama utlpkg.xml

Setelah dibuat kita cek apakah ACL sudah ada

SELECT any_path
FROM resource_view
WHERE any_path like ‘/sys/acls/%.xml’;

Keluarannya adalah

ANY_PATH
—————————————————————————-
/sys/acls/ANONYMOUS/ANONYMOUS3553d2be53ca40e040a8c0680777c_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f93feb8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f944b8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f948b8dde040a8c068075b7_acl.xml
/sys/acls/OLAP_XS_ADMIN/OLAP_XS_ADMIN3551b25f94cb8dde040a8c068075b7_acl.xml
/sys/acls/all_all_acl.xml
/sys/acls/all_owner_acl.xml
/sys/acls/bootstrap_acl.xml
/sys/acls/ro_all_acl.xml
/sys/acls/ro_anonymous_acl.xml
/sys/acls/utlpkg.xml

Ada pada baris terakhir, ACL yang tadi dibuat. Selanjutnya kita ADD sebuah privilege ke ACL ini. Sebagai contoh kita coba membatasi ACL ini ke user SCOTT
Kita juga bisa menambahkan tanggal awal dan akhir.

begin
dbms_network_acl_admin.add_privilege (
acl => ‘utlpkg.xml’,
principal => ‘SCOTT’,
is_grant => TRUE,
privilege => ‘connect’,
start_date => null,
end_date => null);
end;

Tambahkan host dan detail tambahan yang menuju ACL ini

begin
dbms_network_acl_admin.assign_acl (
acl => ‘utlpkg.xml’,
host => ‘www.pratesis.com’,
lower_port => 22,
upper_port => 55);
end;

Disini kita coba menspesifikan bahwa “user SCOTT hanya dapat memanggil host www.pratesis.com dan hanya lewat port 22 sampai 55 dan tidak diluar ini”

SQL> grant execute on utl_http to scott

Grant succeeded.

SQL> conn scott/tiger
Connected.
SQL> select utl_http.request(‘http://www.pratesis.com’) from dual;
select utl_http.request(‘http://www.pratesis.com’) from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at “SYS.UTL_HTTP”, line 1577
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1

Kita lihat bahwa error 24247 : network access denied by access control list (ACL)
sedangkan user memanggil http pada port 80 , dimana itu diluar port antara 22-55 . Sehingga aksi tersebut diblock
Sekarang kita buat rule agar koneksi tersebut tidak dicegah

1 begin
2 dbms_network_acl_admin.assign_acl (
3 acl => ‘utlpkg.xml’,
4 host => ‘www.pratesis.com’,
5 lower_port => 1,
6 upper_port => 10000);
7* end;
8 /

PL/SQL procedure successfully completed.

SQL> conn scott/tiger
Connected.
SQL> select utl_http.request(‘http://www.pratesis.com’) from dual;

UTL_HTTP.REQUEST(‘HTTP://WWW.PRATESIS.COM’)
—————————————————————————
</iframe><!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>

<HTML><HEAD><TITLE>Pratesis Home</TITLE>
<META http-equiv=Content-Language content=en-us>

Tapi ini hanya bekerja untuk www.pratesis.com , tidak dengan situs lain. Jika kita coba memanggil situs lain maka akan muncul pesan kesalahan
ORA 24247 lagi.

Untuk melihat detail dari ACL, kita query DBA_NETWORK_ACLS

select host, lower_port, upper_port, acl, aclid
from dba_network_acls
where ACL=’/sys/acls/utlpkg.xml’;

Dan ini adalah salah satu fitur security terbaru yang dari Oracle 11g yang bener2 sangat “improvement”.








Follow

Get every new post delivered to your Inbox.