Hướng dẫn các thao tác vận hành và tác động vào DB cho các DBA với từng bước cụ thể, dựa vào các hướng dẫn để giám sát và vận hành các DB hàng ngày:
1. Hướng dẫn khai báo datafile:
+ Khai báo thêm các datafile cho DB theo qui trình đảm bảo hoạt động của DB, tránh nhầm lẫn khi thao tác với DB.
+ Sử dụng I/O của các mount point một cách hiệu quả nhất.
2. Hướng dẫn khai báo partition cho DB:
+ Thêm partition cho các bảng chia partition trong DB theo qui trình đảm bảo hoạt động của DB, tránh nhầm lẫn khi thao tác với DB.
3. Hướng dẫn kiểm tra lỗi lock bảng và tồn session:
+ Xử lý lỗi liên quan tới việc lock bảng và tồn session.
+ Đảm bảo lỗi phải được xử lý nhanh nhất.
+ Lưu lại log toàn bộ quá trình xử lý.
+ Thống nhất cách xử lý giữa các DBA.
4. Hướng dẫn kiểm tra cơ sở dữ liệu:
+ Kiểm tra log của DB, nhằm kiểm tra hoạt động của DB có gì bất thường không.
+ Kiểm tra log backup của DB, mục đích xem bản backup DB có thành công hay không.
5. Hướng dẫn rebuild index:
+ Đảm bảo DB và ứng dụng hoạt động ổn định.
+ Rebuild lại các index bị lỗi trong quá trình hoạt động.
6. Hướng dẫn tác động vào profile của user:
+ Kiểm tra các user bị giới hạn số lần login fail và bỏ giới hạn này.
+ Kiểm tra các user chưa có quyền unlimited tablespace và bổ sung thêm.
+ Đảm bảo các ứng dụng hoạt động bình thường sau khi tiếp nhận, các user ứng dụng không bị ảnh hưởng sau khi tác động.
7. Hướng dẫn quản trị oracle ASM:
+ Hướng dẫn các DBA cách quản lý, giám sát và vận hành oracle ASM.
8. Hướng dẫn vận hành oracle dataguard:
+ Cung cấp các bước vận hành giám sát trên 2 DB có cấu hình dự phòng bằng oracle dataguard.
9. Hướng dẫn vận hành oracle goldengate:
+ Hướng dẫn cấu hình oracle goldengate giữa 2 DB.
1.Hướng dẫn khai báo datafile
1. Tổng hợp thông tin cho việc khai báo
- Kiểm tra dung lượng free của các mount point hiện tại.
- Kiểm tra vị trí và sequence các datafile (của tablespace) được khai báo gần nhất.
- Datafile được khai báo sẽ tương ứng với 02 loại tablespace:
+ Tablespace chung, lưu trữ lâu dài (forever)
2. Thực hiện khai báo datafile
- Khi khai báo datafile cho 01 tablespace ta sẽ add đồng thời datafile (với N là số nguyên dương), tức là mỗi lần sẽ có một số chẵn datafile được khai báo thêm.
- Datafile sẽ được khai báo lần lượt trên 02 mount point /uA, /uB cụ thể như sau:
+ Datafile có sequence lẻ sẽ được khai báo trên /uA.
+ Datafile có sequence chẵn sẽ được khai báo trên /uB.
- Dung lượng của mỗi datafile sẽ tùy thuộc tốc độ tăng trưởng của tablespace tương ứng.
- Câu lệnh dùng để khai báo datafile:
create tablespace "<TABLESPACE_NAME>" logging datafile '/<PATH_DATAFILE>/<TABLESPACE _NAME_XX>.dbf' size <y> extent management local segment space management auto; |
<TABLESPACE_NAME> : Tên tablespace cần add thêm datafile
<PATH_DATAFILE> : Đường dẫn chứa datafile
<TABLESPACE _NAME_XX> : Tên datafile cần add thêm, có định dạng:
tablespace_name + sequence
<Y> : Dung lượng datafile cần add thêm
Ví dụ:
create tablespace "DATA201902" logging datafile '/u03/oradata/oraaz/DATA201002_01.dbf' size 4g extent management local segment space management auto; alter tablespace "DATA201902" add datafile '/u04/oradata/oraaz/DATA201002_02.dbf' size 4g autoextent off; |
Chú ý: Dùng câu lệnh trên cho việc khai báo datafile để tăng hiệu năng đọc ghi của DB.
2.Hướng dẫn khai báo partition cho DB
Cách sử dụng script này:
1. Mở TOAd hoặc SQL Navigator
2. Copy toàn bộ và thực hiện từng bước một cho đến khi kết thúc
(hoặc có thể đặt job để tự động sinh partition nhé):
(hoặc có thể đặt job để tự động sinh partition nhé):
/***** 1. Tao tablespace *****/
--select * from dba_tablespaces where tablespace_name like '%2021%' order by tablespace_name;
--select * from dba_data_files where tablespace_name in ('DATA2021','INDX2021');
-- Sau nay read only tablespace này
create tablespace DATA2020 datafile '+DATA' size 1g autoextend on next 100m;
create tablespace INDX2020 datafile '+DATA' size 1g autoextend on next 100m;
-- Sau này read write tablespace 3, 5, 10 năm
create tablespace DATA2020_RW datafile '+DATA' size 1g autoextend on next 100m;
create tablespace INDX2020_RW datafile '+DATA' size 1g autoextend on next 100m;
/**** 2. GEN PARTITION *****/
/* 2.1.GEN PARTITION THEO NĂM: */
select 'alter table '||table_owner||'.'||table_name||' add PARTITION DATA2021 VALUES LESS THAN (TO_DATE(''2021-01-01 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE DATA2020;'
from dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2019%'
and table_name not like '%$%' and table_name not like 'XXX%' --and table_name not like 'TMP%'
and table_owner not in ('Test')
GROUP BY table_owner, table_name
having length(max(partition_name))<9
order by table_owner,table_name;
--2.1.1.Rebuild index theo năm:
DECLARE
v_nam varchar2(4) := '2020';
v_tablespace varchar2(50):='INDX';
cursor c1 is
select table_owner,table_name,max(partition_name)
from dba_tab_partitions where table_name not like '%$%' and table_name not like 'XXX%' --and table_name not like 'TMP%'
and table_name not in ('Test')
group by table_owner,table_name having max(partition_name) like '%'||2020||'%' and length(max(partition_name))<9 order by table_owner,table_name;
cursor c2 (p_tablename varchar2,p_owner varchar2) is
select * from DBA_PART_INDEXES where table_name = p_tablename and owner=p_owner;
BEGIN
for r1 in c1
LOOP
FOR r2 in c2(r1.table_name,r1.table_owner)
LOOP
DBMS_OUTPUT.put_line ('alter index '|| r1.table_owner||'.'||r2.index_name || ' REBUILD PARTITION DATA'||v_nam||' TABLESPACE '||v_tablespace||v_nam||' nologging noparallel online;');
END LOOP;
end loop;
END;
/* 2.2.GEN PARTITION THEO THÁNG */
DECLARE
v_nam NUMBER (4) := 2020;
v_thang_from NUMBER (2) := 1;
v_thang_to NUMBER (2) := 12;
v_tablespace varchar2(50):='DATA';
CURSOR c1
IS
select table_owner, table_name,max(partition_name)
from dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2019%'
and table_name not like '%$%' and table_name not like '%TEST%' and table_name not like 'XXX%' and table_name not like '%BAK' and table_name not like 'BK%'
GROUP BY table_owner, table_name
having length(max(partition_name))=10 and max(partition_name) like '%201912'
order by table_owner,table_name;
BEGIN
for r1 in c1 loop
FOR i IN v_thang_from .. (v_thang_to-1)
LOOP
DBMS_OUTPUT.put_line ('alter table '||r1.table_owner ||'.'|| r1.table_name || ' add PARTITION DATA'||v_nam||LPAD (i, 2, '0')||' VALUES LESS THAN (TO_DATE('''|| v_nam ||'-'||LPAD (i+1, 2, '0')||'-01 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE '||v_tablespace||v_nam||';');
END LOOP;
DBMS_OUTPUT.put_line ('alter table '|| r1.table_owner ||'.'|| r1.table_name || ' add PARTITION DATA'||v_nam||LPAD (to_char(v_thang_to), 2, '0')||' VALUES LESS THAN (TO_DATE('''|| (v_nam +1) ||'-01-01 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE '||v_tablespace||v_nam||';');
end loop;
END;
-- 2.2.1.Rebuild INDEX theo thang:
DECLARE
v_nam varchar2(4) := '2020';
v_thang_from NUMBER (2) := 01;
v_thang_to NUMBER (2) := 12;
v_tablespace varchar2(50):='INDX';
cursor c1 is
select table_owner,table_name,max(partition_name)
from dba_tab_partitions where table_name not like '%$%' and table_name not like 'XXX%'
group by table_owner,table_name having max(partition_name) like '%'||2020||'%' and length(max(partition_name))=10 order by table_owner,table_name;
cursor c2 (p_tablename varchar2,p_owner varchar2) is
select * from DBA_PART_INDEXES where table_name = p_tablename and owner=p_owner;
BEGIN
for r1 in c1
LOOP
FOR r2 in c2(r1.table_name,r1.table_owner)
LOOP
FOR i IN v_thang_from .. (v_thang_to)
LOOP
DBMS_OUTPUT.put_line ('alter index '|| r1.table_owner||'.'||r2.index_name || ' REBUILD PARTITION DATA'||v_nam||LPAD (to_char(i), 2, '0')||' TABLESPACE '||v_tablespace||v_nam||' nologging parallel 8 online;');
END LOOP; END LOOP;
end loop;
END;
/* 2.3.GEN PARTITION THEO NGAY */
--2.3.1.Gen data partition theo ngay_MAIN_OWNER
-- Chay vao ban dem > 22h, lock ~200, active session ~ 1000
-- Có thể gặp Event: library cache lock, cursor: pin S wait on X
DECLARE
v_tablename VARCHAR2 (50);
v_date_from date;
v_date_to date := to_date('31/12/2020','dd/mm/yyyy');
v_numday number;
v_tablespace varchar2(50):='DATA';
cursor c1 is
select table_owner,table_name,MAX(PARTITION_NAME) par_name from dba_tab_partitions where (table_owner, table_name, partition_name) in (
select table_owner,table_name,MAX(PARTITION_NAME) par_name
from dba_tab_partitions
where LENGTH(PARTITION_NAME)>=11
and table_name not like '%$%' and table_name not like 'XXX%'
and table_owner= 'MAIN_OWNER'
group by table_owner, table_name
)
and partition_name like 'DATA20191231%'
GROUP BY table_owner,table_name order by table_owner,table_name;
BEGIN
for r1 in c1 loop
v_tablename:=r1.table_owner||'.'||r1.table_name;
v_date_from:=to_date(substr(r1.par_name,5,8),'YYYYMMDD')+1;
v_numday:=v_date_to-v_date_from;
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter table '|| v_tablename || ' add PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE DATA2020;');
END LOOP;
end loop;
END;
-- 2.3.1.1.Rebuild Index theo ngay MAIN_OWNER
DECLARE
v_date_from date := to_date('01/01/2020','dd/mm/yyyy');
v_date_to date := to_date('31/12/2020','dd/mm/yyyy');
v_numday number;
v_tablespace varchar2(50):='INDX';
cursor c1 is
select a.* from DBA_PART_INDEXES a, DBA_TAB_PARTITIONS b where a.owner=B.TABLE_OWNER and a.table_name=B.TABLE_NAME
and a.owner='CUS_OWNER' and a.index_name not like '%$%' and b.partition_name like '%20191231' order by a.owner,a.index_name;
BEGIN
v_numday:=v_date_to-v_date_from;
FOR i1 in c1
LOOP
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter index '||i1.owner||'.'||i1.index_name || ' REBUILD PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' TABLESPACE '||v_tablespace||to_char(v_date_from+i,'YYYY')||' nologging parallel 8 online;');
END LOOP;
END LOOP;
END;
--2.3.2.Gen data partition theo ngay_User khac
DECLARE
v_tablename VARCHAR2 (50);
v_date_from date;
v_date_to date := to_date('31/12/2020','dd/mm/yyyy');
v_numday number;
v_tablespace varchar2(50):='DUMP_DATA';
cursor c1 is
select table_owner,table_name,MAX(PARTITION_NAME) par_name
from dba_tab_partitions
WHERE (LENGTH(PARTITION_NAME)>=12 AND PARTITION_NAME LIKE '%20201231'
and table_name not like '%$%' and table_name not like 'XXX%' and table_name not like '%TEST%' and table_name not like '%DAILY_20%'
and table_owner not in ('MAIN_OWNER')
GROUP BY table_owner,table_name order by table_owner,table_name;
BEGIN
for r1 in c1 loop
v_tablename:=r1.table_owner||'.'||r1.table_name;
v_date_from:=to_date(substr(r1.par_name,5,8),'YYYYMMDD')+1;
v_numday:=v_date_to-v_date_from;
if r1.table_name in ('REQUEST_LOG','RESPOND_LOG') then
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter table '|| v_tablename || ' add PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE LOB noparallel;');
END LOOP;
elsif r1.table_name in ('AUDIT_LOG') then
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter table '|| v_tablename || ' add PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE ' || substr(r1.par_name,1,8)|| ' noparallel;');
END LOOP;
else
LOOP
DBMS_OUTPUT.put_line ('alter table '|| v_tablename || ' add PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' VALUES LESS THAN (TO_DATE('''|| to_char(v_date_from+i+1,'YYYY-MM-DD')||' 00:00:00'', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN'')) LOGGING TABLESPACE ' || substr(r1.par_name,1,8) ||' noparallel;');
END LOOP;
end if;
end loop;
END;
-- 2.3.2.1.Rebuild Index theo ngày user khac
-- Lưu tại DUMP_INDX
DECLARE
v_date_from date := to_date('01/01/2020','dd/mm/yyyy');
v_date_to date := to_date('31/12/2020','dd/mm/yyyy');
v_numday number;
v_tablespace varchar2(50):='DUMP_INDX';
select a.*,b.partition_name from DBA_PART_INDEXES a, DBA_TAB_PARTITIONS b where a.owner=B.TABLE_OWNER and a.table_name=B.TABLE_NAME
and a.owner!='CUS_OWNER' and a.index_name not like '%$%' and b.partition_name like '%20201231'
order by a.owner,a.index_name;
BEGIN
v_numday:=v_date_to-v_date_from;
FOR i1 in c1
LOOP
if i1.owner='TEST_GATEWAY' then
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter index '||i1.owner||'.'||i1.index_name || ' REBUILD PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' TABLESPACE LOB nologging parallel 8 online;');
END LOOP;
DBMS_OUTPUT.put_line ('alter index '||i1.owner||'.'||i1.index_name || ' noparallel;');
else
FOR j IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter index '||i1.owner||'.'||i1.index_name || ' REBUILD PARTITION DATA'||to_char(v_date_from+j,'YYYYMMDD')||' TABLESPACE INDX' || substr(i1.partition_name,5,4) ||' nologging parallel 8 online;');
END LOOP;
DBMS_OUTPUT.put_line ('alter index '||i1.owner||'.'||i1.index_name || ' noparallel;');
end if;
END LOOP;
END;
-- 2.3.4.Set noparallel index
DECLARE
cursor c1 is
select distinct a.index_owner, a.index_name from DBA_ind_partitions a where a.index_owner='CUS_OWNER' and a.index_name not like '%$%' and a.partition_name like '%20201231'
order by a.index_owner,a.index_name;
BEGIN
FOR i1 in c1
LOOP
DBMS_OUTPUT.put_line ('alter index '||i1.index_owner||'.'||i1.index_name || ' noparallel;');
END LOOP;
END;
-- Một số câu lệnh khác hỗ trợ trong quá trình thực hiện
--Optional: Rebuild INDX PARTITION theo ngay, 1 bang
DECLARE
v_tablename VARCHAR2 (50) := 'REQUEST';
v_owner VARCHAR2 (50) := 'TEST_OWNER';
v_date_from date := '1/11/2011';
v_date_to date := '31/12/2011';
v_numday number(2);
v_tablespace varchar2(50):='INDX';
cursor c1 is
select * from DBA_PART_INDEXES where table_name = v_tablename and owner=v_owner;
BEGIN
v_numday:=v_date_to-v_date_from;
FOR i1 in c1
LOOP
FOR i IN 0 .. v_numday
LOOP
DBMS_OUTPUT.put_line ('alter index '||v_owner||'.'||i1.index_name || ' REBUILD PARTITION DATA'||to_char(v_date_from+i,'YYYYMMDD')||' TABLESPACE '||v_tablespace||to_char(v_date_from+i,'YYYYMM')||';');
END LOOP;
END LOOP;
END;
-- MONITORING: Neu active session > 600, lock > 50 thi kill tien trinh
-- Trong quá trình thêm partition cần MONITOR chặt chẽ tránh tình trạng lock, cao tải gây timeout ứng dụng, nếu gặp lock, cao tải cần dừng lại và chọn thời điểm THẤP TẢI khác để chạy (ví dụ 1h,2h,...)
-- Active session
SELECT distinct s.inst_id i#, s.username, s.SID SID, s.osuser, s.machine,DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') ACTION,
s.sql_id, SUBSTR(DECODE(SS.SQL_TEXT, NULL, AA.NAME, SS.SQL_TEXT), 1, 1000) SQLTEXT,s.logon_time,s.p1text, S.P1, s.p2text, S.P2, s.p3text, S.P3
FROM GV$SESSION S, GV$SQLSTATS SS, AUDIT_ACTIONS AA
WHERE S.STATUS = 'ACTIVE' AND S.SQL_ID = SS.SQL_ID (+) AND AA.ACTION = S.COMMAND and s.type != 'BACKGROUND' AND S.TYPE = 'USER'
--and s.username not in ('SYS','SYSMAN')
--AND username LIKE 'SYS'
--and s.sid=1234
--and s.machine like '%app-2%'
--and DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') like '%cell single block physical read%'
--and s.sql_id ='cb66zngs8xz5j'
--and lower(ss.sql_text) like lower('%test_customer%')
ORDER BY i#,username,sql_id,machine,S.SID;
/************************************************** LOCK SESSION, WAITING *********************************************************/
select status, count(*) from gv$session group by status order by status;
Select /*blocking_session*/ inst_id,blocking_session, sid, serial#, sql_id, wait_class, seconds_in_wait, username,STATUS,SCHEMANAME,OSUSER,MACHINE,PROGRAM,TYPE,LOGON_TIME
From gv$session where blocking_session is not NULL and type not like 'BACKGROUND' order by inst_id --order by blocking_session;
SELECT /*blocking_session*/ inst_id, sid, DECODE (request, 0, 'Holder: ', 'Waiter: ') || sid sess, id1,id2,lmode, request,TYPE
FROM GV$LOCK WHERE (id1, id2, TYPE) IN (SELECT id1, id2, TYPE FROM GV$LOCK WHERE request > 0) ORDER BY id1, request;
/************************************************** SESSIONS *********************************************************/
select count(*) from gv$session ;
select /* count , status*/ username,status, count(*) from gv$session group by username,status order by count(*) desc;
select USERNAME,count(*) from gv$session group by USERNAME order by count(*) desc;
select machine,count(*) from v$session group by machine order by count(*) desc;
select inst_id, count(*) from gv$session group by inst_id;
select /*Thong ke theo status*/ username,status,count(*) from gv$session where username like 'TEST_OWNER%' group by username,status order by count(*) desc;
select /*Thong ke theo inst_id*/ inst_id,count(*), username from gv$session where username like 'TEST_OWNER%' group by inst_id, username order by username;
select /* user theo machine */ machine,count(*), username from gv$session where username like 'TEST_OWNER%' group by machine, username order by username;
/************************************************** KILLER *********************************************************/
SELECT /*username*/ 'kill -9 ' || SPID A ,a.INST_ID,A.SID,A.SQL_ID, a.USERNAME, a.STATUS,A.SCHEMANAME,a.OSUSER,A.MACHINE,A.PROGRAM,A.TYPE,A.LOGON_TIME,BACKGROUND, A.EVENT
FROM gv$session a, gv$process b
WHERE b.ADDR = a.paddr
AND a.inst_id=b.inst_id
--AND B.inst_id = 1
--and a.status='INACTIVE'
--and A.USERNAME LIKE 'TEST%'
--AND A.USERNAME not in ('SYS','SYSTEM','SYSMAN','BINHTV','DBSNMP','GGATE')
--and a.username not in ('SYS','SYSTEM','SYSMAN','BINHTV','DBSNMP','GGATE','APP1','APP2','APP3')
AND a.program not LIKE '%Toad.exe%'
--AND sql_id in ('44t0dk94q3xqg','6uac7nnud2gfa')
and machine like '%TCTK-BINHTV%'
--and a.event in ('library cache lock','brary cache load lock','cursor: pin S wait on X','library cache pin','gc buffer busy acquire','enq: TS - contention','enq: TX - row lock contention','db file parallel read')
and type='USER'
order by a.inst_id;
SELECT /*SID*/ 'kill -9 ' || spid a, a.INST_ID,A.SQL_ID,A.SID, A.SERIAL#, a.USERNAME, a.STATUS,A.SCHEMANAME,a.OSUSER,A.MACHINE,A.PROGRAM,A.TYPE,A.LOGON_TIME,BACKGROUND
FROM gv$session a, gv$process b
WHERE b.addr = a.paddr
AND a.inst_id=b.inst_id
--and b.inst_id=2
AND a.sid in (
5812
)
and type='USER'
order by inst_id;
/***** 3.CHECK PARTITION *****/
-- Check partition theo NAM, max partition 2020 la OK
select table_owner,table_name,partition_name from dba_tab_partitions
where (table_owner,table_name,partition_position) in
(select table_owner,table_name,max(partition_position) from dba_tab_partitions
where table_name not like '%$%'
group by table_name,table_owner)
and length(partition_name)<9
order by 1,2,3;
---- Check partition theo THANG, max partiton 202012 la OK
select table_owner,table_name,partition_name from dba_tab_partitions where (table_owner,table_name,partition_position) in
(select table_owner,table_name,max(partition_position) from dba_tab_partitions
where table_name not like '%$%'
group by table_name,table_owner)
and length(partition_name)>=9
--and partition_name like 'DATA201912'
and length(partition_name)<11
order by table_owner, table_name, partition_name;
---- Check partition theo NGAY, max partiton 20201231 la OK
select table_owner,table_name,partition_name from dba_tab_partitions where (table_owner,table_name,partition_position) in
(select table_owner,table_name,max(partition_position) from dba_tab_partitions
where table_name not like '%$%'
group by table_name,table_owner)
and length(partition_name)>=11
and partition_name like 'DATA20191231'
order by table_owner, table_name, partition_name;
-- Check ALL (nam, thang, ngay)
-- Dam bao nam 2019, thang 201912, ngay 20201231
select table_owner,table_name,partition_name from dba_tab_partitions where (table_owner,table_name,partition_position) in
(select table_owner,table_name,max(partition_position) from dba_tab_partitions
where table_name not like '%$%'
group by table_name,table_owner)
order by table_owner, table_name, partition_name;
--Test lai sau khi gen partitioin, null la OK
SELECT table_owner, table_name
FROM ( SELECT table_owner, table_name, MAX (PARTITION_NAME) FROM dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2019%' and table_name not like '%$%'
GROUP BY table_owner, table_name)
MINUS
SELECT table_owner, table_name
FROM ( SELECT table_owner, table_name, MAX (PARTITION_NAME) FROM dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2020%' and table_name not like '%$%'
GROUP BY table_owner, table_name);
SELECT table_owner, table_name
FROM ( SELECT table_owner, table_name, MAX (PARTITION_NAME) FROM dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2020%' and table_name not like '%$%'
GROUP BY table_owner, table_name)
MINUS
SELECT table_owner, table_name
FROM ( SELECT table_owner, table_name, MAX (PARTITION_NAME) FROM dba_tab_partitions
WHERE PARTITION_NAME LIKE '%2019%' and table_name not like '%$%'
GROUP BY table_owner, table_name);
3.Hướng dẫn kiểm tra lỗi lock bảng và tồn session
1 Tiếp nhận yêu cầu
DBA tiếp nhận phản ánh về các vấn đề liên quan đến lock session: import vào bảng chậm, delete dữ liệu từ bảng chậm, update dữ liệu vào bảng chậm hay thay đổi cấu trúc bảng không thành công. Với phạm vi những phản ánh này không có yêu cầu cụ thể về biểu mẫu, DBA có trách nhiệm phối hợp với nhân viên quản trị ứng dụng từ các phòng, ban để xử lý:
+ Từ các phòng sử dụng cơ sở dữ liệu
+ Từ cảnh báo tinh nhắm qua SMS
2 Kiểm tra DB
Kiểm tra số lượng session active và inactive
- Dùng câu lệnh sau để kiểm tra session active <--- Rất quan trọng
select username, machine, status,server, count (*)
from v$session
where status = 'ACTIVE'
group by username, machine, status, server
order by count (*) desc;
- Dùng câu lệnh sau để kiểm tra session inactive
select username, machine, status,server, count (*)
from v$session
where status = 'INACTIVE'
group by username, machine, status, server
order by count (*) desc;
- Nếu thấy số lượng session active >80 (tùy thuộc vào ngưỡng của mỗi hệ thống) thì cần restart lại ứng dụng này
- Nếu thấy số lượng session inactive >250 thì cần restart lại ứng dụng này
Kiểm tra số lượng lock session
- Dùng câu lệnh sau để kiểm tra lock session <--- Rất quan trọng
select sid,SERIAL#,username, machine, server, sql_address
from v$session
where blocking_session is not null;
- Dùng câu lệnh sau để kiểm tra lock bảng
select a.session_id, a.oracle_username, a.os_user_name, a.process, b.owner, b.object_name, b.subobject_name, b.object_type
from v$locked_object a, all_objects b
where a.object_id = b.object_id and locked_mode = 3
order by oracle_username, session_id;
- Nếu session, hoặc bảng nào lâu không giải phóng thì kiểm tra cụ thể session đó đang chạy câu lệnh gì
select *
from v$sqltext
where address = '0000000A90D92F52'
order by piece;
- Trong quá trình thực hiện yêu cầu lưu các file kết quả view ra file excel phục vụ việc đánh giá khi cần.
3 Tác động DB để giải phóng lock
Nếu câu lệnh gây lock bảng của ứng dụng thuộc về người dùng thì thực hiện kill session này.
alter system kill session 'sid,SERIAL#';Nếu câu lệnh gây lock thuộc về ứng dụng cần xin ý kiến của lãnh đạo để thực hiện việc restart ứng dụng nhằm giải phóng session.
4 Test ứng dụng và kiểm tra DB
Kiểm tra lại số lượng lock session:
- Dùng câu lệnh sau để kiểm tra lock session
select sid,serial#,username, machine, server, sql_address
from v$session
where blocking_session is not null;
- Dùng câu lệnh sau để kiểm tra lock bảng
select a.session_id,a.oracle_username,a.os_user_name,a.process,b.owner, b.object_name,b.subobject_name,b.object_type
from v$locked_object a, all_objects b
where a.object_id = b.object_id and locked_mode = 3
order by oracle_username, session_id;
Yêu cầu các session có locked_mode=3 giải phóng liên tục không bị tồn, hoạt động của ứng dụng sau khi tác động nằm trong giới hạn KPI cho phép.
5 Thực hiện restart database
Trong vòng 45p mà DB vẫn duy trì trạng thái lock các bảng ứng dụng hoặc DB chậm cần xin ý kiến để thực hiện việc restart DB này:
- Tắt hết ứng dụng trỏ vào DB
- Tắt listener của DB
- Switch log DB
- Kiểm tra CPU của DB
- Shutdown DB ở chế độ immediate, nếu cần abort
- Start DB và kiểm tra lại DB, ứng dụng. nếu vẫn không giải quyết được cần phải Reboot OS
6 Restart OS
DBA xin ý kiến các cấp lãnh đạo Công ty thực hiện restart OS, chuyển yêu cầu ban phần cứng reboot OS khi ý đề xuất được chấp thuận.
7 Kết thúc
Báo cáo trực tiếp lãnh đạo phòng về nguyên nhân, cách xử lý và đánh giá lại nguyên nhân để tránh gây ra tình trạng tương tự.
4.Hướng dẫn kiểm tra cơ sở dữ liệu (alert log, backup log,...)
1. Kiểm tra alert log của DB
- Trong hướng dẫn này lấy minh họa trên DB orcl có các thông tin sau:
Ip: 192.168.1.20 Oracle_home: /u01/app/oracle/product/11.2.0/db_1 |
- Kiểm tra thư mục lưu file alert log của DB:
SQL> show parameter background_dump_dest; |
- Sau khi có được kết quả từ câu lệnh kiểm tra trên, truy cập vào đường dẫn kết quả đó và tiến hành kiểm tra file alert của DB để có được thông tin hoạt động của DB:
cd /u01/app/oracle/admin/orcl/bdump |
- Kiểm tra 100 dòng cuối cùng của file alert log:
tail -100f alert_orcl.log |
- Kiểm tra thông tin file alert log:
more alert_ orcl.log |
- Kiểm tra thông tin file alert log và tìm kiểm thông tin lỗi
more alert_ orcl.log| grep ORA more alert_ orcl.log| grep error |
2. Kiểm tra backup log của DB
- Trong hướng dẫn này lấy minh họa trên DB orcl có các thông tin sau:
Ip: Oracle_home: /u01/app/oracle/product/11.2.0/db_1 Oracle_sid: orcl |
- DB được backup full hàng ngày theo script, kiểm tra backup log của DB để biết dược DB backup có thành công hay không.
- Kiểm tra xem file log backup của ngày 16/12/2019 có lỗi không, nếu chạy câu lệnh sau không có kết quả trả về thì backup thành công, nếu có kết quả trả về thì backup đang bị lỗi. Để biết lỗi chi tiết thì tiến hành more chi tiết file log backup:
grep –i error rman_backup_full_orcl_3_24_20141016.log grep –i ERROR rman_backup_full_orcl_3_24_20141016.log |
- Kiểm tra xem file log backup của ngày 16/10/2014 có cảnh báo gì không, nếu chạy câu lệnh sau không có kết quả trả về thì backup thành công, nếu có kết quả trả về thì backup đang có cảnh báo. Để biết chi tiết của cảnh báo thì tiến hành more chi tiết file log backup:
grep –i warning rman_backup_full_orcl_3_24_20141016.log grep –i WARNING rman_backup_full_orcl_3_24_20141016.log |
- Kiểm tra xem file log backup của ngày 16/12/2019 kết thúc chưa, nếu có kết quả trả về thì backup đã kết thúc, nếu không có kết quả trả về thì backup chưa kết thúc.
grep "Recovery Manager complete" rman_backup_full_orcl_3_24_20141016.log |
5.Hướng dẫn rebuild index
1 Tiếp nhận yêu cầu
DBA tiếp nhận yêu cầu thực hiện rebuid index từ các nguồn sau
- Từ phòng sử dụng cơ sở dữ liệu
- Từ đơn vị quản lý ứng dụng
- Từ phần mềm cảnh báo
2 Kiểm tra index
- DBA kiểm tra bảng chứa index bị lỗi có thuộc view nào không.
SELECT NAME, TYPE, REFERENCED_NAME, REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME = 'VIEW_NAME' AND TYPE = 'VIEW' AND REFERENCED_TYPE = 'TABLE'; |
- Nếu có bản ghi thì chuyển sang bước 3
- Nếu khổng có bản ghi nào thì chuyển sang bước 4
3 Bỏ bảng khỏi view
- Nếu bảng thuộc view thì DBA phải thực hiện comment lại phần select của bảng trong view.
- Nếu bảng không thuộc view nào thi chuyển sang 4.
4 Rebuild lại Index
- DBA kiểm tra xem Index cần rebuild có đánh partition không
- Nếu Index đánh partition thì DBA thực hiện rebuild theo partition
ALTER INDEX index_owner.index_name REBUILD PARTITION partition_name; |
- Nếu Index không đánh partition thì DBA thực hiện rebuild lại toàn bộ
ALTER INDEX index_owner.index_name REBUILD; |
5 Kiểm tra lại việc đánh Index
- Từ cửa sổ chạy SQL, DBA thực hiện chạy câu lệnh sau :
SELECT * FROM dba_ind_partitions WHERE INDEX_NAME NOT LIKE 'BIN$%' AND STATUS='UNUSABLE'; SELECT * FROM dba_indexes WHERE INDEX_NAME NOT LIKE 'BIN$%' AND STATUS ='INVALID'; |
Nếu không có bản ghi nào nghĩa là việc rebuild lại Index đã hoàn thành.
- Nếu có thì DBA phải thực hiện rebuild lại Index trong kết quả Select.
6 Kết thúc
- Thông báo cho đơn vị gửi yêu cầu và theo dõi hiệu năng sau khi tạo lại index
6.Hướng dẫn tác động vào profile của user
Các yêu cầu có thể là: tạo user mới, thay đổi quyền user (Check quyền DBA của các user cần revoke, Revoke quyền DBA và thực hiện grant lại quyền), tiếp nhận database mới.
Nếu có thì thực hiện revoke quyền DBA:
revoke dba from <user_name>; |
Sau khi revoke, thực hiện grant lại các quyền cần thiết cho user
grant connect, resource … to <user_name>; |
Loại bỏ giới hạn số lần login fail của các user trong profile default
alter profile "DEFAULT" limit failed_login_attempts unlimited; |
Bổ sung thêm quyền unlimited tablesapce cho các user còn thiếu.
alter user '<USER_NAME>' quota unlimited on '<tablespace_name>'; |
Loại bỏ giới hạn thời gian đổi password của user trong profile default.
alter profile default limit password_life_time unlimited;
Kiểm tra lại quyền DBA của user vừa revoke3. Kiểm tra
select * from dba_role_privs where granted_role = 'DBA' and grantee = <user_name>; |
Kiểm tra các user bị giới hạn số lần login fail
select profile, resource_name, limit from dba_profiles where resource_name = 'FAILED_LOGIN_ATTEMPTS' and limit not in ('UNLIMITED'); |
Kiểm tra quyền unlimited tablespace của các user trên database
select * from dba_ts_quotas where username in ('<USER_NAME>') and max_bytes <> -1; |
Kiểm tra các profile giới hạn password lifetime trong các profile
select profile, resource_name, limit from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME' and limit not in ('UNLIMITED'); |
7.Vận hành Oracle ASM
1. ASM instance architecture:
- ASM có 3 thành phần chính: ASM instance, disk groups và ASM files.
- Một ASM instance có một số background processes như SMON, PMON và LGWR processes. Ngoài ra có 2 background processes mới: ASM Rebalance Master (RBAL) và ASM Rebalance (ARBn).
- Oracle DB instance sử dụng ASM instance sẽ có thêm 2 background processes liên quan đến ASM: RBAL và ASM Background (ASMB) processes
+ ASM Files backup phải thực hiện bằng RMAN
2.Managing the ASM instance
- Tạo ASM instance: Sử dụng DBCA và chọn các option như hình vẽ sau:
Tạo ASM instance trên môi trường single-instance:
Tạo ASM instance trên môi trường oracle RAC:
Các bước khi sử dụng DB configuration assistant (DBCA) để tạo ASM instance trên môi trường RAC tương tự với trên môi trường single-instance, ngoại trừ bước thứ 1 và bước 3, bạn phải chọn option oracle real application clusters DB trong bước đầu tiên, và sau đó chọn select all ở bước thứ 3.
3. Các tham số khởi tạo cho ASM instance:
3.1. Dynamic performance view trong ASM instance
3.3. Quản lý ASM Disk Groups
3.4. Quản lý ASM Files
3.5. Giám sát ASM
- ASM có 3 thành phần chính: ASM instance, disk groups và ASM files.
- Một ASM instance có một số background processes như SMON, PMON và LGWR processes. Ngoài ra có 2 background processes mới: ASM Rebalance Master (RBAL) và ASM Rebalance (ARBn).
- Oracle DB instance sử dụng ASM instance sẽ có thêm 2 background processes liên quan đến ASM: RBAL và ASM Background (ASMB) processes
+ ASM Files backup phải thực hiện bằng RMAN
2.Managing the ASM instance
- Tạo ASM instance: Sử dụng DBCA và chọn các option như hình vẽ sau:
Tạo ASM instance trên môi trường single-instance:
Tạo ASM instance trên môi trường oracle RAC:
Các bước khi sử dụng DB configuration assistant (DBCA) để tạo ASM instance trên môi trường RAC tương tự với trên môi trường single-instance, ngoại trừ bước thứ 1 và bước 3, bạn phải chọn option oracle real application clusters DB trong bước đầu tiên, và sau đó chọn select all ở bước thứ 3.
3. Các tham số khởi tạo cho ASM instance:
- Các tham số tương tự như sau:
NSTANCE_TYPE = ASM
DB_UNIQUE_NAME = +ASM
ASM_POWER_LIMIT = 1
ASM_DISKSTRING = '/dev/rdsk/*s2', '/dev/rdsk/c1*'
ASM_DISKGROUPS = dgroupA, dgroupB
LARGE_POOL_SIZE = 8MB
3.1. Dynamic performance view trong ASM instance
- Để xem thông tin của ASM intsance, select các view sau:
3.2. Starting up/shutting down ASM instance
- Sử dụng SQLPLUS như một DB instance bình thường tương tự như sau:
$ sqlplus /nolog
SQL> CONNECT / AS sysdba
Connected to an idle instance.
SQL> STARTUP;
ASM instance started
Total System Global Area 147936196 bytes
Fixed Size 324548 bytes
Variable Size 96468992 bytes
DB Buffers 50331648 bytes
Redo Buffers 811008 bytes
ASM diskgroups mounted
Hoặc sử dụng công cụ srvctl trong môi trường RAC
srvctl stop asm -n <node_name> [-i <asm_inst_name>] [-o <stop_options>] |
-n <node> Node name
-i <asm_inst_name> ASM instance name
-o <stop_options> Options shutdown command (normal, transactional, immediate, abort)
- Tương tự với shutdown DB instance sử dụng sqlplus
Chú ý: Nếu shutdown ASM instance, tất cả oracle DBs đang kết nối tới nó cũng sẽ shut down.
Hoặc sử dụng công cụ srvctl trong môi trường RAC
srvctl start asm -n <node_name> [-i <asm_inst_name>] [-o <start_options>] |
-i <asm_inst_name> ASM instance name
-o <stop_options> Options shutdown command (normal, transactional, immediate, abort)
3.3. Quản lý ASM Disk Groups
- Khái niệm ASM Mirroring: Cung cấp mức dự phòng cho dữ liệu.
- Có 3 loại ASM Mirroring:
· External redundancy: Chọn loại này khi các disk đã được cấu hình dự phòng trên các thiết bị lưu trữ nằm ngoài máy.
· Normal redundancy: Cung cấp two-way mirroring. Để hỗ trợ loại này, phải tạo ít nhất 2 failure group.
· High redundancy: Cung cấp three-way mirroring. Để hỗ trợ cho loại này, phải tạo ít nhất 3 failure group.
- Create và Delete Disk Groups:
· Tạo Diskgroup tương tự sau:
CREATE DISKGROUP data NORMAL REDUNDANCY FAILGROUP controller1 DISK '/devices/A1' NAME diskA1 SIZE 120G FORCE, '/devices/A2', '/devices/A3' FAILGROUP controller2 DISK '/devices/B1', '/devices/B2', '/devices/B3'; |
Hoặc:
CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/devices/A1' name DATA; |
· Xoá Diskgroup tương tự sau:
DROP DISKGROUP data INCLUDING CONTENTS; |
- Thay đổi Diskgroup:
· Thêm Disks vào một Disk Group
ALTER DISKGROUP data ADD DISK '/dev/rdsk/c0t4d0s2' NAME A5, '/dev/rdsk/c0t5d0s2' NAME A6, '/dev/rdsk/c0t6d0s2' NAME A7, '/dev/rdsk/c0t7d0s2' NAME A8; |
· Xoá Disk khỏi Diskgroup:
ALTER DISKGROUP data DROP DISK A5; |
· Tạo directory:
ALTER DISKGROUP data DROP DIRECTORY '+data/mydir'; |
· Xoá file trong diskgroup:
ALTER DISKGROUP data DROP FILE '+data/thread_1_seq_57.333.74511' |
· Tạo và xoá Alias:
ALTER DISKGROUP data ADD ALIAS '+data/mydir/second.dbf' FOR '+data/sample/datafile/mytable.342.3'; |
ALTER DISKGROUP data DROP ALIAS '+data/mydir/second.dbf'; |
3.4. Quản lý ASM Files
- Qui ước tên trong ASM files tương ứng với 1 trong 6 qui tắc như sau:
select NAME,PATH,GROUP_NUMBER from v$asm_disk; |
select a.name,b.name,b.path from v$asm_diskgroup a, v$asm_disk b where a.GROUP_NUMBER=b.GROUP_NUMBER; |
3.5. Giám sát ASM
- Trong ASM cung cấp một số view phục vụ cho việc giám sát thông tin như sau:
· V$ASM_DISKGROUP: Cung cấp thông tin về disk group. Chứa 1 row cho mỗi ASM disk group được mount bởi ASM instance.
· V$ASM_CLIENT: Xác định tất cả các client DBs sử dụng các disk groups. Chứa 1 row cho mỗi ASM instance nếu DB open ASM files bất kỳ.
· V$ASM_DISK: Chứa 1 row cho mỗi disk được phát hiện bởi ASM instance. Chỉ chứa các rows cho các disks đang sử dụng bởi DB instance.
· V$ASM_FILE: Chứa 1 row cho mỗi ASM file trong mọi disk group được mount bởi ASM instance.
· V$ASM_TEMPLATE: Chứa 1 row cho mỗi template trong mỗi disk group được mount bởi ASM instance.
- Ngoài ra có thể giám sát theo thông tin trong file alert log
· Kiểm tra trạng thái, dung lượng của diskgroup:
select NAME,STATE,TYPE,TOTAL_MB,FREE_MB from v$asm_diskgroup; |
· Kiểm tra đường dẫn device của từng disk được cấu hình trong ASM
· Xem thông tin alias:
select name,FILE_NUMBER,FILE_INCARNATION,ALIAS_DIRECTORY from v$ASM_ALIAS; |
select name,FILE_NUMBER,FILE_INCARNATION,ALIAS_DIRECTORY from v$ASM_ALIAS; |
8.Hướng dẫn vận hành oracle dataguard
1. Các bước stop, start standby database
- Start Physical standby database gồm 3 bước:
1. Start chế độ nomount:
2. Mount standby database:
ALTER DATABASE MOUNT STANDBY DATABASE; |
3. Start managed recovery:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; |
- Stop Physical Standby Database gồm 2 bước:
1. Cancel managed recovery:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; |
2. Shut down standby database.
SHUTDOWN IMMEDIATE; |
2. Kiểm tra kết nối mạng giữa 2 database
Bước 1: Trên primary database, bằng user oracle thực hiện:
tnsping to_standby sqlplus sys/password@to_standby as sysdba |
Luôn đảm bảo 2 lệnh trên là thành công
Bước 2: Tương tự trên standby database thực hiện:
tnsping to_primary sqlplus sys/password@to_primary as sysdba |
Luôn đảm bảo 2 lệnh trên là thành công
3. Kiểm tra hoạt động chuyển archive tới physical standby database
Mục đích để kiểm tra đồng bộ giữa 2 database với nhau, các thao tác dưới đây sẽ thực hiện hàng ngày để kiểm tra đảm bảo tiến trình đồng bộ thành công
Bước 1: Kiểm tra archived redo logs hiện có.
- Trên standby database, query V$ARCHIVED_LOG view:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; |
Bước 2: Thực hiện archiving current log.
- Trên primary database, archive current log sử dụng lệnh sau:
ALTER SYSTEM ARCHIVE LOG CURRENT; |
Bước 3: Kiểm tra new archived redo log nhận được trên standby database.
- Trên standby database, queryV$ARCHIVED_LOG view:
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; |
Bước 4: Kiểm tra new archived redo log applied.
- Trên standby database, query theV$ARCHIVED_LOG view:
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; |
- Kết quả trả về, giá trị của trường APPLIED là YES có nghĩa archive đã được apply vào standby database, trường SEQUENCE# có gí trị lớn nhất băng với giá trị lớn nhất của trường này ở bên primary database
9.Thủ tục cài đặt, vận hành Oracle Goldengate
1. Mô hình đồng bộ goldengate triển khai
2. Các bước thực hiện cấu hình đồng bộ dữ liệu giữa 2 DB ORACLE
- Bước 1: Tạo user, gán các quyền cho user trên cả nguồn và đích
Create user ogg identified by ***;
Grant create session, dba to ogg;
Thực hiện enable supplemental trên DB nguồn
alter DB add supplemental log data;
alter system switch logfile;
- Bước 2: Thực hiện cấu hình đồng bộ goldengate command line
Download bộ phần mềm GG tương ứng với OS trên trang chủ oracle.com hoặc Oracle Delevery, DB của môi trường đồng bộ sau đó thực hiện unzip ra thư mục goldegate.
Thực thi file ggsci (./ggsci) xuất hiện màn hình command line
· Tạo các thự mục mặc định cho tiến trình đồng bộ (trên cả nguồn và đích)
ggsci>create subdirs
· Các file tham số theo phụ lục
· Sửa các file cấu hình theo nội dung phần phụ lục bằng lệnh edit trong môi trường ggsci> hoặc sử dụng trình vi từ môi trường OS
· Cấu hình trên server nguồn của tiến trình đồng bộ
o ggsci>dblogin userid ogg, password ***
o ggsci>add trandata ten_owner.ten_bang (tên bảng cần đồng bộ)
o ggsci>add extract ext, TRANLOG, BEGIN NOW
o ggsci>add exttrail /path_source/dirdat/im, extract ext
o ggsci>add extract pump, EXTTRAILSOURCE /path_source/dirdat/im
o ggsci>add rmttrail /path_target/dirdat/im, extract pump
· Cấu hình trên server đích của tiến trình đồng bộ
o ggsci> dblogin userid ogg,password *** (user/pass của db target)
o ggsci> add checkpointtable ogg.cpt_table
o ggsci> ADD REPLICAT rep1, EXTTRAIL /u01/app/gg/dirdat/im, checkpointtable ogg. cpt_table
· Bật tiến trình đồng bộ trên cả 2 server
o ggsci>start mgr
o ggsci>start ext
o ggsci>start pump
o ggsci>start rep
· Kiểm tra trạng thái của tiến trình đồng bộ cả nguồn và đích
o ggsci>status all
3. Danh sách các file tham số cơ bản của goldengate và cách cấu hình
- File tham số datapump pump.mgr (cấu hình trên server nguồn).
- File tham số replicat rep.mgr (cấu hình trên server đích).
(Danh sách bảng đồng bộ/ nội dung file tham số lấy trên DB_Source(192.168.1.60) đồng bộ sang DB_Dest (192.168.1.68))
Nội dung file Ext.mgr
EXTRACT ext -- Reporting reportrollover on Monday reportcount every 1 hours, rate --USERID ogg, PASSWORD USERID ogg, password AACAAAAAAAAAAAGALDEJEBZFLJMEQGJB , encryptkey default --RMTHOST 192.168.1.68, MGRPORT 7809 EXTTRAIL /path_source/dirdat/in TABLE user1.shop; TABLE user1.staff; |
Nội dung file Pump.mgr
EXTRACT pump
--USERID ogg, PASSWORD
USERID ogg, password AACAAAAAAAAAAAGALDEJEBZFLJMEQGJB , encryptkey default
discardfile ./dirout/pump1.dsc, APPEND
-- Reporting
reportrollover on Monday
reportcount every 1 hours, rate
RMTHOST 192.168.1.68, MGRPORT 7809
RMTTRAIL /path_target/dirdat/im
PASSTHRU
TABLE user1shop;
TABLE user1.staff;
Nội dung file mgr.prm (Sử dụng trên cả server nguồn và đích)
port 7809
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPHOURS 48
autostart er *
autorestart er * , WAITMINUTES 3, RETRIES 10
Nội dung file rep.mgr
REPLICAT rep
SETENV (NLS_LANG = "AMERICAN_AMERICA.UTF8")
USERID ogg, password AACAAAAAAAAAAALANAXFJGGBYDHICBGENCUIPAZBLJJAMHAD , encryptkey default
INSERTDELETES
INSERTUPDATES
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/RORA01.DSC, append
MAP user1.STAFF, TARGET user1.STAFF
MAP user1.SHOP, TARGET user1.SHOP
4. Các bước vận hành oracle goldengate
- Start các tiến trình oracle goldengate:
Start mgr Start ext Start pump Start rep |
- Stop các tiến trình oracle goldengate
Stop mgr Stop ext Stop pump Stop rep |
- View report các tiến trình oracle goldengate
View report mgr View report ext View report pump View report rep |
- Alter các tiến trình oracle goldengate
Alter extract ext begin ... ---- thay đổi lại thời điểm bắt đầu extract. Alter extract pump extseqno ..., extrba ... --- thay đổi sequence, rba của tiến trình pump Alter extract rep extseqno ..., extrba ... --- thay đổi sequence, rba của tiến trình rep |
- Edit các file param của tiến trình
Edit param mgr Edit param ext Edit param pump Edit param rep |
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,khóa học pl/sql, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, middleware, hoc solaris, hoc linux, hoc aix, unix, securecrt, xshell, mobaxterm, putty