Thứ Tư, 30 tháng 3, 2022

Triển khai OCFS2 cùng đọc/ghi cho ứng dụng Cluster trên Linux

Oracle Cluster File System (OCFS2) là một hệ thống file mà các node của cluster có thể cùng đọc/ghi vào đó cùng 1 lúc, bao gồm cả RAC. Mặc dù OCFS2 có thể được sử dụng để chia sẻ tệp dữ liệu giữa các node RAC, nhưng khuyến cáo không nên dùng mà thay vào đó sử dụng ASM dưới dạng raw device hoặc thông qua phần mềm ASMLib. Mặc dù vậy, OCFS2 có một số công dụng trong môi trường RAC, chẳng hạn như cung cấp vị trí được chia sẻ cho UTL_FILE và các hoạt động bảng bên ngoài cho toàn bộ RAC. Bài viết dưới đây minh họa cài đặt và cấu hình cơ bản của OCFS2.

Thứ Ba, 29 tháng 3, 2022

Các câu lệnh hay sử dụng với IBM HMC (Hardware Management Console)

Mục đích: Các câu lệnh hay sử dụng với IBM HMC (Hardware Management Console)

Hướng dẫn tắt IPv6 trênCentOS / RHEL 7

Khi bạn gặp lỗi: Mar 29 15:11:55 linux7 kernel: IPv6: eth0: IPv6 duplicate address 2402:9d80:1:1045:b4bd:40ff:fe46:1402 detected! --> Bạn có thể disable IPv6 nếu không dùng

Kiểm tra user nào, sql_id, bảng nào sinh ra archived redo log

Mục đích: Kiểm tra user nào, sql_id, bảng nào sinh ra archived redo log

Job cảnh báo user sắp hết hạn mật khẩu trong Oracle Database

Mục đích: Job cảnh báo user sắp hết hạn mật khẩu, cần phải đổi gấp trước khi bị lock

Thứ Sáu, 25 tháng 3, 2022

Job tự động dọn dẹp log Grid, DB trong Oracle Database RAC

Mục đích: Đặt job để tự động dọn dẹp log Grid, DB trong Oracle Database RAC

Tự động add datafile cho Oracle Database ASM với datafile autoextend

Mục đích: Add thêm datafile cho tablespace khi sử dụng đến ngưỡng >=90% hoặc khi còn free < 50.000MB (gần 50GB) (code dưới tôi sử dụng < 50GB free là thêm datafile)

Hoạt động:  Mỗi 30 phút kiểm tra dung lượng tablespace, nếu >= 90% (ngưỡng) hoặc khi còn free < 50.000MB (gần 50GB) sẽ tự động khai báo thêm datafile


BƯỚC 1: TẠO CÁC BẢNG LƯU LOG:

CREATE TABLE binhtv.dbamf_log_op
    (id                             NUMBER,
    msg                            VARCHAR2(1000 BYTE),
    event_datetime                 TIMESTAMP (6) DEFAULT sysdate,
    type                           VARCHAR2(1000 BYTE),
    note                           VARCHAR2(1000 BYTE))
  PCTFREE     10
  INITRANS    1
  MAXTRANS    255
  TABLESPACE  users
  STORAGE   (
    INITIAL     65536
    NEXT        1048576
    MINEXTENTS  1
    MAXEXTENTS  2147483645
  )
  NOCACHE
  MONITORING
  NOPARALLEL
  LOGGING
/

CREATE SEQUENCE BINHTV.DBAMF_LOG_OP_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;

BƯỚC 2: TẠO THỦ TỤC TRÊN SYS

    PROCEDURE sys.auto_extend_space
    IS
        v_err varchar2(1000):='';
       free_space_low_level   NUMBER := 50000; 
           CURSOR c_free_space                 -- get tablespace free left 50000MB.
        IS
            SELECT  a.tablespace_name,100 - ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Usage",
            ROUND (a.bytes_alloc / 1024 / 1024) "Size MB",
            ROUND (a.bytes_alloc / 1024 / 1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024) "Used MB",
            ROUND (NVL (b.bytes_free, 0) / 1024 / 1024) "Free MB",
            --ROUND ( (NVL (b.bytes_free, 0) / a.bytes_alloc) * 100) "%Free",
            ROUND (maxbytes / 1048576)  "Max MB",
            round(maxbytes/1048576-(ROUND (a.bytes_alloc / 1024 / 1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024)),0) "Free_MB_Max",
            ROUND (ROUND ( (a.bytes_alloc - NVL (b.bytes_free, 0)) / 1024 / 1024)/  ROUND (maxbytes / 1048576) * 100) "%Used of Max"
            FROM (SELECT f.tablespace_name, SUM (f.bytes) bytes_alloc,  SUM (DECODE (f.autoextensible, 'YES', f.maxbytes, 'NO', f.bytes)) maxbytes
                    FROM dba_data_files f
                    GROUP BY tablespace_name) a,
                (SELECT f.tablespace_name, SUM (f.bytes) bytes_free  FROM dba_free_space f  GROUP BY tablespace_name) b
         WHERE a.tablespace_name = b.tablespace_name(+)  
         --and  ( a.tablespace_name not in ('DUMP'))
        -- and "Free_MB_Max" < 50000
        and round(maxbytes/1048576-(ROUND (a.bytes_alloc / 1024 / 1024)- ROUND (NVL (b.bytes_free, 0) / 1024 / 1024)),0) < free_space_low_level
         order by "%Used of Max" desc;


        v_sql           VARCHAR2 (2000);
        msg             VARCHAR2 (1000);
        next_datafile   VARCHAR2 (1000);
    BEGIN
        insert into binhtv.dbamf_log_jobs (id,name,status,event_date, note)
            values(binhtv.dbamf_log_jobs_seq.nextval,'Starting sys.dba_op.extend_space',1,sysdate,'binhtv.dbamf_log_jobs, binhtv.dbamf_log_op');
        commit;
        FOR v_free_space IN c_free_space                 -- tablespace < 200MB
        LOOP
            BEGIN
                v_sql :=
                       'ALTER TABLESPACE '
                    || v_free_space.tablespace_name
                    || ' ADD DATAFILE ''+DATA'' size 1g autoextend on next 100m';
                DBMS_OUTPUT.put_line (v_sql);
                EXECUTE IMMEDIATE v_sql;               
                insert into binhtv.dbamf_log_op (msg, type, note) values (v_sql, 'df','Add a new datafile');
                commit;
            EXCEPTION
                WHEN OTHERS
                THEN
                    null;
            END;
        END LOOP;

        insert into binhtv.dbamf_log_jobs (id,name,status,event_date, note)
            values(binhtv.dbamf_log_jobs_seq.nextval,'Completed sys.dba_op.extend_space',1,sysdate,'binhtv.dbamf_log_jobs');
        commit;
   EXCEPTION
        WHEN others THEN
            v_err := substr(SQLERRM,1,200);        
            insert into binhtv.dbamf_log_jobs (id,name,status,event_date, note)
                values(binhtv.dbamf_log_jobs_seq.nextval,'Error sys.dba_op.extend_space',-1,sysdate,'Error sys.dba_op.extend_spac, '||v_err);
            commit;
   END;

BƯỚC 3: Tạo job từ sched.Jobs: 10 phút chạy 1 lần

Vào giao diện hoặc chạy câu lệnh

BEGIN
  SYS.DBMS_SCHEDULER.DROP_JOB
    (job_name  => 'SYS.DBAVIET_ADD_DF');
END;
/

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SYS.DBAVIET_ADD_DF'
      ,start_date      => TO_TIMESTAMP_TZ('2021/05/07 10:45:13.876967 Asia/Ho_Chi_Minh','yyyy/mm/dd hh24:mi:ss.ff tzr')
      ,repeat_interval => 'FREQ=MINUTELY;INTERVAL=10'
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'STORED_PROCEDURE'
      ,job_action      => 'SYS.AUTO_EXTEND_SPACE'
      ,comments        => NULL
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'RESTARTABLE'
     ,value     => TRUE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_FULL);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'MAX_RUNS');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'STOP_ON_WINDOW_CLOSE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.DBAVIET_ADD_DF'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);

  SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.DBAVIET_ADD_DF');
END;
/

BƯỚC 4: MONITOR JOBS:

Hoặc select * from binhtv.dbamf_log_op;


Hy vọng hữu ích cho bạn.

=============================
* 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

Thứ Bảy, 19 tháng 3, 2022

Thứ Sáu, 18 tháng 3, 2022

Backup và Restore MySQL Database bằng dòng lệnh

Thay đổi tham số initial_rsrc_consumer_group của người dùng

SQL> select * from v$version;

Thứ Tư, 16 tháng 3, 2022

Các câu lệnh hay dùng với Oracle Auditing

Mục đích: Chia sẻ Các câu lệnh hay dùng với Oracle Auditing truyền thống và unified auditing

1. Auditing được bật :(truyền thống)

-- Auditing được tắt, khi audit_trail đặt là NONE

SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- --------------------------
audit_trail string NONE

- audit_trail đặt là DB hoặc DB,EXTENDED.

alter system set audit_trail=db scope=spfile;
(hoặc)
alter system set audit_trail=db, extended scope=spfile;

-- Restart database.

shutdown immediate;
startup;

SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- --------------------------
audit_trail string DB 

2. Audit mức câu lệnh:

-- Hiển thị các câu lệnh được audit
select * from STMT_AUDIT_OPTION_MAP;

-- Cho phép audit mức câu lệnh 
audit table by DBAVIET.

audit table by DBAVIET whenever successful;
audit role by DBAVIET;
-- Tắt auditing: noaudit table by DBAVIET;
-- Liệt kê các câu lệnh đã audit trong  database: col user_name for a12 heading "User name" col audit_option format a30 heading "Audit Option" set pages 1000 prompt prompt System auditing options across the system and by user select user_name,audit_option,success,failure from sys.dba_stmt_audit_opts order by user_name, proxy_name, audit_option / 

3. Audit mức object:

audit insert,update on DBAVIET.EMP by MANAGER;
AUDIT delete on DBAVIET.EMP; 

 -- Tắt auditing:
noaudit insert,update on DBAVIET.EMP by MANAGER;
noAUDIT delete on DBAVIET.EMP by MANAGER;


-- Audit hoạt động SELECT/DML của 1 user (DBAVIET):
audit select table,insert table,update table,delete table by DBACLASS by access; audit execute procedure by dbaclass by access; audit all by dbaclass by access;

4. Audit mức quyền hệ thống:

-- Bật audit mức quyền hệ thống:
audit drop any table ;
audit create table;
audit drop user;

-- Liệt kê các quyền hệ thống được audit:
col user_name for a12 heading "User name"
col privilege for a30 heading "Privilege"
set pages 1000
prompt
prompt System Privileges audited across system
select user_name,privilege,success,failure from dba_priv_audit_opts
order by user_name, proxy_name, privilege
/

5. Tìm các dữ liệu đã audit của 1 user:

col user_name for a12 heading "User name"
col timest format a13
col userid format a8 trunc
col obn format a10 trunc
col name format a13 trunc
col object_name format a10
col object_type format a6
col priv_used format a15 trunc
set verify off
set pages 1000
SET PAGESIZE 200
SET LINES 299
select username userid, to_char(timestamp,'dd-mon hh24:mi') timest ,
action_name acname, priv_used, obj_name obn, ses_actions
from sys.dba_audit_trail
where timestamp>sysdate-&HOURS*(1/24) and username='&USER_NAME'
order by timestamp
/

6. Cho phép audit user sys :

SQL>ALTER SYSTEM SET audit_sys_operations=true SCOPE=spfile;

SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP
SQL> show parameter audit_sys_operations

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_sys_operations boolean TRUE

7. Bật pure unified auditing:

-- False tức là kiểu mixed auditing;
SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
VALUE
-----------------
FALSE

-- relink thư viện 
shutdown immediate;

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk unaiaud_on ioracle

startup

SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
VALUE
-----------------
TRUE

8. Hiển thị policy unified audit đã cấu hình trong db:

-- False có nghĩa là chế độ mixed auditing;
SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
VALUE
-----------------
FALSE

-- relink thư viện
shutdown immediate;

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk unaiaud_on ioracle

startup

SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
VALUE
-----------------
TRUE

9. Hiển thị dữ liệu unified audit:

- Unified report trong 1h trước:
set lines 299
col SQL_TEXT for a23
col action_name for a18
col UNIFIED_AUDIT_POLICIES for a23
select action_name,SQL_TEXT,UNIFIED_AUDIT_POLICIES ,EVENT_TIMESTAMP from unified_AUDIT_trail
where EVENT_TIMESTAMP > sysdate -1/24

10. Tạo  unified audit policy:

-- Tạo audit policy với tuỳ chọn audit:

create audit policy test_case2
ACTIONS CREATE TABLE,
INSERT ON DBAVIET.EMP_TAB,
TRUNCATE TABLE,
select on DBAVIET.PROD_TAB;

select POLICY_NAME,audit_option,AUDIT_CONDITION,OBJECT_SCHEMA,OBJECT_NAME FROM
AUDIT_UNIFIED_POLICIES where POLICY_NAME='TEST_CASE2';

-- Bật policy:

audit policy TEST_CASE2;

select distinct policy_name from AUDIT_UNIFIED_ENABLED_POLICIES where policy_name='TEST_CASE2';

11 . Ngoại trừ 1 số user không quan trong ra khỏi policy:

SQL> noaudit policy TEST_CASE2;

Noaudit succeeded.

SQL> audit policy TEST_CASE2 except stcdba;

Audit succeeded.

SQL> select USER_NAME,POLICY_NAME,ENABLED_OPT from AUDIT_UNIFIED_ENABLED_POLICIES where POLICY_NAME='TEST_CASE2';

USER_NAME POLICY_NAME ENABLED_OPT
------------- ------------ -----------------------
CLASSDBA TEST_CASE2 EXCEPT


12. Purge audit table dùng dbms :

-- Move aud$ table to new tablespace if present under SYSTEM tablespace:

select owner,segment_name,segment_type,tablespace_name,bytes/1024/1024 from dba_segments where segment_name='AUD$';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME BYTES/1024/1024
------------ ------------ ------------------ ------------------------------ ---------------
SYS AUD$ TABLE SYSTEM 176


SQL>
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
audit_trail_location_value => 'TS_AUDIT');
END;
/

SQL>

PL/SQL procedure successfully completed.



-- Khởi tạo dọn dẹp log audit 
SQL>
BEGIN
DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 12 /* hours */);
END;
/

PL/SQL procedure successfully completed.

-- Cấu hình vòng đời lưu trữ
BEGIN
DBMS_AUDIT_MGMT.set_last_archive_timestamp(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
last_archive_time => SYSTIMESTAMP-30);
END;
/



-- Chạy job purge:

BEGIN
DBMS_AUDIT_MGMT.clean_audit_trail(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
use_last_arch_timestamp => TRUE);
END;
/

=============================
* 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

Các câu lệnh hay dùng về Flashback trong Oracle Database

Mục đích: Chia sẻ Các câu lệnh hay dùng về Flashback trong Oracle Database

1. Kiểm tra  flashback DB có được bật hay không?

select flashback_on from v$database; 

2. Bật flashback mức database:

--- make sure database is in archivelog mode:

alter system set db_recovery_file_dest_size=10G scope=both;
alter system set db_recovery_file_dest='/dumparea/FRA/B2PMT3' scope=both;
alter database flashback on; 

3. Tắt flashback mức database:

alter database flashback off; 

4. Tạo flashback restore point :

create restore point FLASHBACK_PREP guarantee flashback database; 

5. Hiển thị các restore points:

-- Từ SQL:
SQL>Select * from v$restore_points:

-- Từ RMAN:
RMAN>LIST RESTORE POINT ALL; 

6. Drop restore point:

drop restore point FLASHBACK_PREP; 

7. Flashback database về thời điểm restore point:

--- Dưới đây là thủ tục flashback database về thời điểm restore point;

1. Lấy thông tin restore point name và thời điểm:

SQL> select NAME,time from v$restore_point;

NAME TIME
-------------------------------- -----------------------------------------------
FLASHBACK_PREP 21-MAR-17 03.41.33.000000000 PM

2. Shutdown database và start db ở chế độ Mount:

shutdown immediate;
startup mount;

3. flashback db về thời điểm restore point:

flashback database to restore point FLASHBACK_PREP;

4. Open cùng với tuỳ chọn resetlog:

alter database open resetlogs; 

8. Flashback database về thời điểm SCN hay timestamp cụ thể:

shutdown immediate;
startup mount;
--FLASHBACK DATABASE TO SCN 202381; -- Sửu dụng SCN cụ thể
--FLASHBACK DATABASE TO TIMESTAMP (SYSDATE-1/24); - Sử dụng flashback về 1 giờ trước 
--FLASHBACK DATABASE TO TIMESTAMP to_timestamp('2018-03-11 16:00:00', 'YYYY-MM-DD HH24:MI:SS');  --tới timestamp cụ thể:

alter database open resetlogs; 

9. Flashback query với timestamp:

SELECT * FROM DBAVIET.EMP AS OF TIMESTAMP
TO_TIMESTAMP('2017-01-07 10:00:00', 'YYYY-MM-DD HH:MI:SS');


SELECT * FROM DBAVIET.EMP AS OF TIMESTAMP SYSDATE -1/24;

Tạo bảng mới để lưu trữ dữ liệu trên:
create table dbaviet.emp_new as select * from  FROM DBAVIET.EMP AS OF TIMESTAMP
TO_TIMESTAMP('2017-01-07 10:00:00', 'YYYY-MM-DD HH:MI:SS');

10. Flashback  table từ recyclebin:

-- Đàu tiên càn kiểm tra xem bảng còn ở trong recyclebin hay không:
SELECT object_name, original_name, createtime FROM recyclebin where original_name='EMP';

-- restore table giống tên ban đầu:
FLASHBACK TABLE int_admin_emp TO BEFORE DROP;

-- Restore  table với tên mới:
FLASHBACK TABLE int_admin_emp TO BEFORE DROP
RENAME TO int2_admin_emp; 

11. Lấy thông tin phân vùng flashback đang sử dụng:

SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;   

12. Chúng ta có thể flashback lâu nhất là khi nào?

-- Chúng ta có thể Flashback được bao lâu (theo thời gian)?
select to_char(oldest_flashback_time,’dd-mon-yyyy hh24:mi:ss’) “Oldest Flashback Time”
from v$flashback_database_log;

--Chúng ta có thể Flashback được bao lâu (theo SCN)?
col oldest_flashback_scn format 99999999999999999999999999
select oldest_flashback_scn from v$flashback_database_log;
=============================
* 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

=============================
oracle flasback,  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

Các câu lệnh Gather statistic trong Oracle Database

Mục đích: Các câu lệnh Gather statistic trong Oracle Database

Các lệnh Asmcmd hay sử dụng để quản lý ASM

Mục đích: Các lệnh Asmcmd hay sử dụng để quản lý ASM

Sử dụng lệnh OPATCH để patch Oracle Database

1. Liệt kê chi tiết thông tin bản patch: 

TOP 15 câu lệnh để montor Oracle Database

1. Hiển thị các active sesion trong Database:

Sử dụng lệnh DGMGRL để quản trị Oracle Dataguard

Trong bài viết này tôi sẽ chia sẻ cách sử dụng dgmgrl để quản trị Oracle dataguard

Sử dụng lệnh CRSCTL A-Z để quản trị tài nguyên cluster Oracle RAC

Tiện ích được sử dụng để quản lý các tài nguyên và thành phần oracle clusterware

Sử dụng lệnh SRVCTL A-Z để quản trị Oracle RAC

SRVCTL (server control utility) được sử dụng để thêm, xoá, thiết lập lại hay quản lý các dịch vụ CRS hay các thành phần của RAC:

Thứ Ba, 15 tháng 3, 2022

Các lệnh quản lý cơ sở dữ liệu MySQL/MariaDB

I. TỔNG QUAN

Hầu hết chúng ta đều quen quản lý cơ sở dữ liệu MySQL/MariaDB thông qua công cụ phpMyAdmin. Thực tế công cụ phpMyAdmin quá phổ biến giúp người dùng có thể quản lý cơ sở dữ liệu một cách nhanh chóng, hiện quả thông qua giao diện trực quan. Nhưng nếu máy chủ bạn không cài đặt phpMyAdmin thì để quản lý cơ sở dữ liệu phải thực hiện bằng cách nào.

Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các hàng của truy vấn theo nhóm. Các nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY. Thông thường, GROUP BY được sử dụng để tính tổng theo điều kiện, đếm bản ghi thỏa mãn điều kiện nào đó hoặc tìm dữ liệu MIN, MAX.

Mệnh đề ORDER BY trong SQL Server

Mệnh đề ORDER BY được dùng để lọc bản ghi trong bộ kết quả trả về của SQL Server. Mệnh đề này chỉ có thể dùng trong lệnh SELECT.

Mệnh đề WHERE trong SQL Server

Trong SQL Server (T-SQL), mệnh đề WHERE được dùng để lọc kết quả từ các lệnh SELECT, INSERT, UPDATE hoặc DELETE.

Các toán tử so sánh trong SQL Server

Bài viết này sẽ đưa ra các toán tử so sánh được dùng để kiểm tra tính cân bằng cùng với các toán tử nâng cao hơn trong SQL Server. Bạn đọc có thể tham khảo thêm bài viết Toán tử trong SQL.

Mệnh đề FROM trong SQL Server

Mệnh đề FROM trong SQL Server (T-SQL) được dùng để liệt kê các bảng cần thiết trong truy vấn của SQL Server.

Lệnh SELECT trong SQL Server

Bài hướng dẫn này sẽ giúp bạn dùng câu lệnh SELECT trong SQL Server (T-SQL) với cú pháp và các ví dụ.

Các dịch vụ phân tích trong MS SQL Server

Dịch vụ này được dùng để phân tích một lượng lớn dữ liệu và để doanh nghiệp đưa ra quyết định. Nó được dùng để tạo ra các mô hình kinh doanh 2 hoặc nhiều chiều.

Các dịch vụ tích hợp trong MS SQL Server

Dịch vụ tích hợp được dùng để thực hiện ETL (Extraction, Transform và Load dữ liệu) và các công việc của người quản trị. BIDS (Business Intelligence Studio cho đến bản năm 2008 R2) và SSDT (SQL Server Data Tools từ bản 2012 về sau) là các môi tường cho dịch vụ này.

Execution Plans - Kế hoạch thực thi trong MS SQL Server

Kế hoạch thực thi được tạo bằng Query Optimizer với sự trợ giúp của các con số thống kê, Algebrizer/cây quy trình. Đó là kết quả của Query Optimizer và cho biết công việc của bạn được thực hiện như thế nào.

Dịch vụ tạo báo cáo trong MS SQL Server

MS SQL Server có dịch vụ tạo các báo cáo rất hữu ích cho doanh nghiệp.

High Availability - Tính sẵn sàng của MS SQL Server

High Availability (HA) là một giải pháp/quy trình/công nghệ để đảm bảo ứng dụng/cơ sở dữ liệu có thể truy cập được 24/7 trong bất kì điều kiện nào, dù là có dự định trước hay bất ngờ.

Cách khởi động và dừng các dịch vụ trong MS SQL Server

MS SQL Server mang tới 2 dịch vụ chính để tạo và duy trì cơ sở dữ liệu (CSDL). Ngoài ra còn có các dịch vụ bổ sung phục vụ các mục đích khác.

Giám sát cơ sở dữ liệu trong MS SQL Server

Giám sát dùng để chỉ việc kiểm tra trạng thái cơ sở dữ liệu (CSDL), thiết lập tên người sở hữu, tên tập tin, kích thước tập tin, lịch trình sao lưu…

Việc giám sát CSDL trên SQL Server có thể thực hiện chủ yếu qua SQL Server Management Studio hoặc T-SQL, và cũng có thể kiểm soát qua nhiều cách khác như các công cụ của bên thứ 3, tạo Job trong Server Agent…

Cách tạo người dùng trong MS SQL Server

Người dùng ở đây tức là một tài khoản trên MS SQL Server để truy cập vào cơ sở dữ liệu (CSDL).

Cách khôi phục cơ sở dữ liệu trong MS SQL Server

Khôi phục là quá trình sao chép dữ liệu đã sao lưu và đưa các giao dịch được ghi lại vào dữ liệu của MS SQL Server. Hiểu đơn giản, đây là quá trình lấy file sao lưu và đưa nó trở lại CSDL.

Cách tạo bản sao dữ liệu trong MS SQL Server

Backup là một bản sao lưu dữ liệu/cơ sở dữ liệu. Việc sao lưu CSDL trong MS SQL Server là rất quan trọng để bảo vệ dữ liệu trước việc mất CSDL. Có 3 hình thức sao lưu chính trong MS SQL Server là Full/Database, Differential/Incremental, Transactional Log/Log.

Cách xóa cơ sở dữ liệu trong MS SQL Server

Để xóa cơ sở dữ liệu trong MS SQL Server, chúng ta sử dụng lệnh DROP. Dưới đây là 2 cách sử dụng lệnh này.

Cách chọn cơ sở dữ liệu trong MS SQL Server

Bạn có thể chọn cơ sở dữ liệu trong MS SQL Server để thao tác bằng một trong các cách dưới đây.

Cách tạo cơ sở dữ liệu trong MS SQL Server

Cơ sở dữ liệu bao gồm các đối tượng như bảng biểu, quy trình, hàm...Trong MS SQL Server có hai kiểu cơ sở dữ liệu: Cơ sở dữ liệu hệ thống và cơ sở dữ liệu người dùng

Các cách đăng nhập cơ sở dữ liệu trên MS SQL Server

Đăng nhập là cách thức đơn giản để truy cập vào SQL Server, cũng như bạn dùng ID và mật khẩu để đăng nhập Windows hay tài khoản email. SQL Server có 4 loại đăng nhập.

Quản lý MS SQL Server bằng Management Studio

SQL Server Management Studio là công cụ trong SQL Server nếu bạn có chọn khi cài đặt. Công cụ này giúp kết nối và quản lý SQL Server trên giao diện đồ họa thay vì phải dùng tới dòng lệnh.

Hướng dẫn cài đặt MS SQL Server

SQL Server hỗ trợ 2 kiểu cài đặt:

  • Standalone
  • Dựa trên Cluster

Kiến trúc của SQL Server

Trong các bài trước các bạn đã biết sơ qua về SQL Server, cách cài đặt SQL Server trên máy tính. Trong phần này chúng ta sẽ tìm hiểu về kiến trúc (architecture) của SQL Server.

Các phiên bản MS SQL Server

SQL Server hiện có nhiều phiên bản khác nhau. Dưới đây là danh sách các phiên bản cùng với tính năng của từng phiên bản.

Microsoft SQL Server là gì?

SQL Server là gì?

  • Phần mềm được Microsoft phát triển dựa trên RDBMS.
  • Cũng là một ORDBMS (Hệ quản trị cơ sở dữ liệu quan hệ đối tượng).
  • Một nền tảng độc lập.
  • Phần mềm sử dụng cả giao diện dòng lệnh và giao diện GUI.
  • Hỗ trợ ngôn ngữ SQL (trước đây là SEQUEL - ngôn ngữ truy vấn tiếng Anh có cấu trúc) - vốn là sản phẩm của IBM.

SQL Server Profiler – Công cụ theo dõi câu lệnh TSQL truy cập vào Database Engine

Hầu hết các chương trình đang được phát triển, vận hành tại EVNCPC lưu trữ dữ liệu trên Cơ sở dữ liệu (CSDL) SQL Server. Trong quá trình chương trình, ứng dụng hoạt động đôi lúc cũng gặp các sự cố về dữ liệu như: xử lý chậm, đọc, ghi dữ liệu không thành công gây ra hiện tượng truy cập chương trình hay gặp lỗi, truy cập các chức năng hay chạy báo cáo chậm… thì SQL Server Profiler là một giải pháp hiệu quả, đi kèm với CSDL SQL Server. Công cụ này rất hữu ích cho người quản trị CSDL để theo dõi các câu lệnh TSQL (SQL, DDL, DML) truy cập từ ứng dụng vào Database Engine. Dựa vào đó, người quản trị vận hành có thể phân tích, đánh giá và cải thiện tốc độ xử lý của CSDL.

Học Quản trị Cơ sở dữ liệu SQL Server A-Z

Học Quản trị Cơ sở dữ liệu SQL Server A-Z anh/em tham khảo tại đây: 

Hướng dẫn tải, cài đặt SQL Server 2019 cực đơn giản, chi tiết

 SQL Server là phần mềm chuyên gia về quản lí dữ liệu do Microsoft phát hành. Nó cung cấp cho người dùng, doanh nghiệp một cơ sở dữ liệu được bảo mật , hiệu suất cao và thông minh. Hãy cùng mình tìm hiểu cách tải và cài đặt SQL Server 2019 về máy tính ngay nào.

CÁC CÂU LỆNH HAY DÙNG ĐỂ QUẢN TRỊ POSTGRESQL

Mục đích: Chia sẻ những câu lệnh thường dùng để quản trị PostgreSQL

Oracle Fast Recovery Area (FRA) trong Oracle Database

Vị trí của Oracle Flash Recovery Area (FRA) để giúp đơn giản hóa việc quản lý sao lưu và phục hồi cho cơ sở dữ liệu Oracle. Flash Recovery Area có thể được xác định a là một nơi lưu trữ thống nhất, tập trung, duy nhất lưu tất cả các tệp liên quan đến sao lưu và phục hồi cơ sở dữ liệu Oracle.

Thứ Tư, 9 tháng 3, 2022

Tự động backup database trên Windows

Mục đích: Tự động backup database trên Windows

Tự động backup với Export Datapump (expdp) Oracle Database trên Windows

Mục đích: Backup Oracle Database dùng export dataupmp (expdp cho Oracle Database 10g, 11g, 12c, 19c )

Tự động Backup Oracle Database 10g dùng export trên Windows

Mục đích: Backup Oracle Database dùng export (cho Oracle Database 10g, 9i, tất nhiên 11g cũng được)

Tự động Backup Oracle Database 19c hàng ngày qua Crontab_New

Mục đích: Tự động Backup Oracle Database 19c hàng ngày qua Crontab

Bí quyết kiểm tra cấu hình, hiệu năng Oracle Database 1 cách nhanh chóng

Mục đích: Các câu lệnh  kiểm tra tổng thể DB 1 cách nhanh chóng, cùng các câu lệnh cao tải (bình thường lấy trong AWR)

Thứ Tư, 2 tháng 3, 2022

Các loại lock dữ liệu trong Oracle Database

Để ngăn chặn sự xung đột có thể xảy ra khi có nhiều transaction cùng truy cập vào một nguồn tài nguyên (table, row, bộ nhớ,…), Oracle đặt ra các cơ chế lock dữ liệu.

Theo mặc định thì Oracle sẽ tự động lock dữ liệu khi cần thiết mà không cần tới sự can thiệp của người dùng, gọi là lock ngầm định (implicit locking). Và khi tự động lock dữ liệu, Oracle luôn chọn cấp độ lock thấp nhất có thể được.

Bên cạnh đó, Oracle cũng cung cấp các câu lệnh để người dùng có thể tự lock dữ liệu khi cần, gọi là lock xác định (explicit locking).

1.Các chế độ lock

Oracle cung cấp hai chế độ lock như sau:

  • Exclusive lock (lock độc quyền): Chế độ lock này không cho phép các transaction khác thay đổi trên cùng một tài nguyên. Các transaction khác muốn thay đổi dữ liệu thì phải chờ cho tới khi dữ liệu được unlock. Khi một transaction đã lock độc quyền trên tài nguyên thì các transtaction khác không thể lock trên tài nguyên đó.
  • Share lock (lock chia sẻ): Chế độ lock này không cho phép các transaction khác tiến hành lock độc quyền nhưng vẫn cho phép chúng cùng lock chia sẻ trên một tài nguyên.

Ví dụ: Khi một transaction tiến hành sửa dòng có mã là 100 của bảng employees:

  • Dòng có mã 100 sẽ bị exclusive lock nên các transaction khác sẽ không thể chỉnh sửa dòng này.
  • Bảng employees sẽ bị share lock nên các transaction khác sẽ không thể cập nhật cấu trúc của nó (vì để thay đổi cấu trúc bảng thì cần phải tiến hành exclusive lock). Tuy nhiên các transaction khác vẫn có thể thay đổi các dòng khác của bảng employees (khi đó bảng employees sẽ bị nhiều share lock).

2.Thời hạn lock

Oracle không cung cấp lệnh unlock tài nguyên. Do đó, tài nguyên sẽ bị lock cho tới khi transaction lock nó kết thúc (commit hoặc roll back). Và chỉ sau khi transaction kết thúc thì những gì nó thay đổi trên dữ liệu mới được các transaction khác nhìn thấy.

Nếu tài nguyên bị lock sau một save point thì khi transaction được roll back về save point đó, tài nguyên trên sẽ được unlock. Tuy nhiên những transaction đang chờ tài nguyên này vẫn chưa được quyền chỉnh sửa nó mà phải chờ cho transaction kia (transaction đã lock tài nguyên) kết thúc hoàn toàn.

3.Chuyển đổi lock và leo thang lock

3.1.Chuyển đổi lock

Chuyển đổi lock là đưa lock ở mức thấp lên lock ở mức cao hơn.
Oracle sẽ chuyển đổi lock khi cần thiết. Ví dụ khi ta tiến hành lệnh SELECT với tùy chọn FOR UPDATE, Oracle sẽ lock các dòng bị ảnh hưởng ở mức độc quyền và lock bảng ở mức row share. Nếu sau đó ta tiếp tục cập nhật các dòng đã lock thì bảng sẽ được chuyển sang lock ở mức cao hơn là row exclusive.

Với các dòng được thêm, xóa, sửa thì Oracle sẽ lock chúng ở mức độc quyền. Đó là mức lock cao nhất nên không cần chuyển đổi nữa.

3.2.Leo thang lock

Một số hệ quản trị CSDL thường tiến hành leo thang lock khi có quá nhiều lock được thực hiện. Ví dụ: Khi ta lock nhiều dòng trong một bảng thì hệ quản trị CSDL sẽ tiến hành lock ở mức bảng. Cách này giúp giảm số lock phải quản lý nhưng sẽ khiến cho một số tài nguyên bị lock một cách không cần thiết.

Oracle không bao giờ sử dụng leo thang lock bởi vì cách này sẽ làm tăng khả năng xảy ra dead lock.

4.Dead lock

Dead lock xảy ra khi nhiều user cùng chờ các tài nguyên bị lock của nhau.
Ví dụ:

  • Thời điểm T1: user A tiến hành lệnh cập nhật dòng có mã 100 của bảng employees => dòng 100 đó bị lock độc quyền.
  • Thời điểm T2: user B tiến hành lệnh cập nhật dòng có mã 200 của bảng employees => dòng 200 đó bị lock độc quyền.
  • Thời điểm T3: user B tiến hành lệnh cập nhật dòng có mã 100 của bảng employees. Do dòng 100 đang bị lock độc quyền bởi user A nên user B phải chờ user A.
  • Thời điểm T4: user A tiến hành lệnh cập nhật dòng có mã 200 của bảng employees. Do dòng 200 đó đang bị lock độc quyền bởi user B nên user A phải chờ user B.
  • Như vậy hai user A và B sẽ phải chờ nhau mà không làm được gì khác => lock xảy ra.

Oracle tự phát hiện dead lock và sẽ rollback một trong các transaction bị dead lock, từ đó hủy bỏ các lock gây xung đột.

Để tránh dead lock, ta có thể đặt ra quy ước về thứ tự làm việc để luôn tiến hành lock các tài nguyên theo một thứ tự nào đó.

5.Các loại lock

Có các loại lock chính như sau:

  • DML lock (lock dữ liệu): có chức năng bảo vệ dữ liệu, ví dụ như lock toàn bộ dữ liệu của một bảng, lock một số dòng trong bảng,…
  • DDL lock (lock cấu trúc): có chức năng bảo vệ cấu trúc của các đối tượng trong schema, ví dụ như bảng, view,…
  • Latch (chốt) và internal lock (lock nội): bảo vệ cấu trúc nội bộ của CSDL. ví dụ như các datafile. Dạng lock này được tiến hành hoàn toàn tự động.

5.1.DML lock

DML lock có chức năng đảm bảo sự nhất quán của dữ liệu trong môi trường đa người dùng. Nói cách khác, DML lock bảo đảm rằng mỗi dòng chỉ có thể được cập nhật bởi tối đa một transaction trong một thời điểm. Bên cạnh đó, DML lock còn ngăn chặn sự thay đổi về cấu trúc của một bảng từ transaction khác nếu có một transaction đang cập nhật dòng trong bảng đó.

Ví dụ: Khi transaction A đang cập nhật dòng 100 của bảng employees thì transaction B phải chờ transaction A kết thúc mới được phép cập nhật trên dòng đó.

Lock dòng (row lock – TX)

Loại DML lock duy nhất mà Oracle tự động tạo ra là lock ở mức dòng. Không có giới hạn về số dòng được lock trong một transaction, và Oracle không bao giờ tiến hành leo thang lock.
Sự kết hợp của cơ chế quản lý đồng thời đa phiên bản với lock ở mức dòng cho phép:

  • Transaction đọc không cần phải chờ transaction ghi, ngay cả khi chúng cùng truy cập trên một dòng
  • Transaction ghi không cần phải chờ transaction đọc, ngay cả khi chúng cùng truy cập trên một dòng (trừ khi transaction đọc dùng thêm tùy chọn FOR UPDATE khi truy vấn dữ liệu).
  • Các transaction ghi chỉ phải chờ nhau khi chúng cần ghi trên cùng một dòng.

Một transaction sẽ dùng DML lock độc quyền khi nó chạy các câu lệnh DML (INSERT, UPDATE, DELETE) và lệnh SELECT với tùy chọn FOR UPDATE. Mà một dòng không thể bị hai lock độc quyền trong một thời điểm, do đó không thể có hai lệnh DML thực thi cùng lúc trên một dòng.

Khi một dòng đang bị lock độc quyền bởi một transaction, các transaction khác không thể chỉnh sửa dòng đó cho đến khi transaction đang lock được kết thúc (commit hoặc roll back). Tuy nhiên, có một ngoại lệ là nếu transaction bị kết thúc một cách bất bình thường (ví dụ như máy client đang chạy transaction đó bị cúp điện) thì các dòng sẽ được unlock trước khi transaction được phục hồi.

Nếu một transaction lock một dòng, nó cũng tiến hành lock bảng chứa dòng đó. Việc lock bảng là để ngăn chặn các transaction khác thay đổi cấu trúc (hoặc xóa) bảng.

VD: update customer set name='Trần Văn Bình_New' where cust_id=10;

Khi đó row với cust_id=10 sẽ Lock dòng (row lock – TX), tất cả mọi người cần update thông tin của cust_id=10 sẽ chờ cho đến khi session kia commit hoặc rollback hoặc bị kill hoặc 1 câu lệnh DDL của người dùng đó (gọi là implicit commit, nhiều DBA không để ý trường hợp này)

Đồng thời khi ta thay đổi cấu trúc của customer cũng bị treo đơ (VD lệnh alter table customer add column note varchar2(5000);) 

Lock bảng (Table lock – TM)

Bảng sẽ bị lock nếu transaction tiến hành các lệnh DML, lệnh SELECT với tùy chọn FOR UPDATE hoặc lệnh LOCK TABLE trên nó. Các lệnh DML cần phải lock bảng để bản đảm sự truy cập dữ liệu và ngăn chặn sự thay đổi trên cấu trúc bảng (lệnh DDL) từ transaction khác.

Lệnh DDL sẽ tiến hành lock bảng ở mức độc quyền trước khi chạy. Mà các loại lock bảng sẽ ngăn chặn sự lock bảng độc quyền, do đó lệnh DDL sẽ không thể chạy được trên bảng đang bị lock.

Có các chế độ lock bảng như sau: row share (chia sẻ dòng – RS), row exclusive (độc quyền dòng – RX), share (chia sẻ – S), share row exclusive (chia sẻ dòng độc quyền – SRX) và exclusive (độc quyền – X).

Câu lệnh SQLChế độ lockCác chế độ lock được phép
SRXSSRXX
SELECT …YYYYY
INSERT …RXYYNNN
UPDATE …RXY*Y*NNN
DELETE …RXY*Y*NNN
SELECT … FOR UPDATERSY*Y*Y*Y*N
LOCK TABLE table IN ROW SHARE MODERSYYYYN
LOCK TABLE table IN ROW EXCLUSIVE MODERXYYNNN
LOCK TABLE table IN SHARE MODESYNYNN
LOCK TABLE table IN SHARE ROW EXCLUSIVE MODESRXYNNNN
LOCK TABLE table IN EXCLUSIVE MODEXNNNNN

Chú thích:

  • RS: Row share
  • RX: Row exclusive
  • S: Share
  • SRX: Rhare Row exclusive
  • X: Exclusive
  • *: Nếu không có xung đột thì sẽ lock. Ngược lại thì phải chờ.
Cơ chế lock mặc định cho câu truy vấn

Câu truy vấn là câu lệnh SELECT không có tùy chọn FOR UPDATE.. Trong Oracle, câu truy vấn không tạo ra lock và do đó không chịu ảnh hưởng bởi lock. Do đó, một transaction có thể truy vấn dữ liệu trong khi transaction khác đang tiến hành sửa đổi trên cùng dữ liệu đó.

Cơ chế lock mặc định cho lệnh DML và SELECT với tùy chọn FOR UPDATE

Khi thực thi lệnh DML, transaction sẽ tiến hành lock các dòng bị ảnh hưởng ở chế độ độc quyền. Do đó, các transaction khác không thể chạy lệnh DML trên cùng dòng với transaction kia mà phải chờ cho tới khi transaction kia kết thúc.

Transaction chứa lệnh DML cũng không cần lock các dòng được trả về từ câu truy vấn con (nếu có) của lệnh DML đó.

Câu truy vấn trong transaction có thể thấy sự thay đổi dữ liệu từ các lệnh DML xảy ra trước trong cùng transaction, và không thể thấy sự thay đổi dữ liệu từ các lệnh DML xảy ra trong các transaction khác.

Khi chạy lệnh DML, bên cạnh việc lock exclusive row, transaction còn cần lock row exclusive trên bảng chứa các dòng bị ảnh hưởng. Nếu transaction đó đã lock bảng thuộc một trong các loại share, share row exclusive hoặc exclusive từ trước thì việc lock row exclusive không cần nữa. Nếu transaction đó đã lock bảng thuộc loại row share từ trước thì lock có sẵn này sẽ được chuyển thành row exclusive một cách tự động.

5.2.DDL lock

DDL lock có chức năng bảo vệ cấu trúc của đối tượng schema (schema object) khi nó đang tham gia vào một câu lệnh DDL nào đó. Cần nhớ rằng khi hoàn thành, lệnh DDL sẽ tự động làm chấm dứt transaction (implicit commit).

Ví dụ: Trong khi một thủ tục (procedure) đang được dịch, nhờ vào DDL lock mà các bảng do thủ tục đó sử dụng sẽ không thể bị xóa hay thay đổi cấu trúc.

DDL lock do Oracle tiến hành một cách tự động. Người dùng không thể gọi DDL lock. Khi tiến hành DDL lock thì Oracle chỉ lock những đối tượng cần thiết.

DDL lock gồm các loại: excluse DDL lock (lock cấu trúc độc quyền), share DDL lock (lock cấu trúc chia sẻ) và breakable parse lock.

Exclusive DDL lock

Đa số các lệnh DDL đều dùng exclusive DDL lock. DDL lock có chức năng ngăn cản sự xung đột khi có nhiều lệnh DDL cũng được tiến hành trên một đối tượng schema.

Ví dụ: Nếu một table đang được alter thì nó không thể bị drop (và ngược lại).

Nếu lệnh DDL cần tiến hành trên một đối tượng đang bị DDL lock, nó sẽ chờ đến khi đối tượng đó không còn bị lock rồi mới thực thi được.

Các lệnh DDL cũng thực hiện DML lock trên đối tượng đang được chỉnh sửa.

VD: Khi ta thay đổi cấu trúc của customer (VD lệnh alter table customer add column note varchar2(5000);) thì toàn bộ bảng sẽ bị lock lại, mọi câu lệnh DML đều bị quay đơ cho đến khi câu lệnh DDL thay đổi cấu trúc trên được thực hiện thành công hoặc bị kill session; câu lệnh drop bảng cũng bị treo; câu lệnh DDL khác của bảng cũng bị treo; các câu lệnh select vẫn diễn ra bình thường trong thời gian câu lệnh DDL thực hiện.

Share DDL lock

Một số lệnh DDL cần dùng share DDL lock để ngăn cản sự xung đột nhưng vẫn cho phép các lệnh DDL tương tự cùng chạy đồng thời trên đối tượng mà nó đang xử lý.

Ví dụ:

  • Khi câu lệnh CREATE PROCEDURE được thực thi, nó sẽ tiến hành share DDL lock trên các bảng mà thủ tục tham chiếu.
  • Trong khi các bảng trên đang bị share DDL lock thì các transaction khác cũng có thể chạy lệnh tạo thủ tục tham chiếu vào cùng các bảng đó một cách đồng thời.

Các transaction không thể tiến hành exclusive DDL lock trên đối tượng đang được share DDL lock, do đó đối tượng đang được share DDL lock sẽ không thể bị xóa hoặc thay đổi cấu trúc từ đó vẫn ngăn cản được các xung đột có thể xảy ra.

Breakable parse lock

Một câu lệnh SQL (hoặc thủ tục PL/SQL) trong shared pool sẽ giữ parse lock trên các đối tượng schema mà nó tham chiếu. Nhờ vào parse lock, Oracle biết rằng các lệnh SQL (hoặc thủ tục PL/SQL) trong shared pool cần phải dịch lại khi đối tượng mà chúng tham chiếu bị chỉnh sửa cấu trúc (hoặc bị xóa).

Parse lock không có chức năng bảo vệ các đối tượng mà nó đang lock. Parse lock sẽ bị hủy (break) nếu đối tượng mà nó đang lock bị thay đổi trong các câu lệnh DDL. Do đó, parse lock được gọi là breakble parse lock.

Thời hạn của DDL lock

Thời hạn của DDL lock tùy thuộc vào loại DDL lock.

Với share DDL lock và excluse DDL lock thì thời hạn của chúng là trong khi câu lệnh DDL đang chạy.

Với breakable parse DDL lock thì sẽ tồn tại trong khi mà lệnh SQL (hay thủ tục PL/SQL) liên kết với nó còn tồn tại trong shared pool.

DDL lock và cluster

Lệnh DDL trên một cluster sẽ tiến hành DDL lock trên chính cluster và các bảng và materialized view có dùng cluster đó.

Lệnh DDL trên bảng hoặc materialized view sẽ tiến hành share DDL lock trên các cluster mà chúng sử dụng, từ đó bảo vệ cluster không bị xóa khi lệnh DDL đang thực hiện.

6.Latch và internal lock

Latch và internal lock bảo vệ cấu trúc nội bộ của CSDL và bộ nhớ. Cả hai loại lock này đều do Oracle sử dụng và người dùng không thể can thiệp.

6.1.Latch

Latch khá đơn giản. Nó có chức năng bảo vệ ở cấo độ thấp cho các cấu trúc dữ liệu chia sẻ trong vùng SGA (system global area).

Ví dụ: Latch bảo vệ danh sách các user đang kết nối vào CSDL và bảo vệ cấu trúc dữ liệu dùng để mô tả các block dữ liệu trong vùng nhớ đệm (buffer cache).

Một tiến trình nền (background process) sẽ tiến hành latch trong thời gian rất ngắn trong khi nó đang chỉnh sửa hoặc tìm kiếm trên các cấu trúc đó. Sự cài đặt latch là tùy vào hệ điều hành

6.2.Internal lock

Internal lock phức tạp hơn và ở cấp độ cao hơn so với latch và phục vụ cho nhiều mục đích khác nhau.

Dictionary cache lock

Lock này diễn ra trong thời gian rất ngắn, có chức năng bảo vệ entry trong dictionary cache trong khi các entry đang được user chỉnh sửa. Nó bảo đảm rằng các câu lệnh đang được phân tích (parse) sẽ không bao giờ “nhìn thấy” cấu trúc chưa nhất quán của các đối tượng.

Dictionary cache lock có hai mức là share và exclusive. Share lock sẽ được hủy khi câu lệnh được parse xong. Exclusive lock được hủy khi lệnh DDL chạy xong.

File and Log Management Locks

Loại lock này bảo vệ các tập tin khác nhau.

Ví dụ: Loại lock này bảo vệ control file, từ đó trong một thời điểm chỉ có tối đa một tiến trình có thể thay đổi nó. Loại lock này cũng bảo vệ sự sử dụng và lưu trữ redo log file. thêm vào đó nó cũng bảo vệ các datafile, từ đó cho phép chỉ một (chế độ độc quyền) hay nhiều (chế độ chia sẻ) instance được sử dụng một data file.

Dạng lock này bảo vệ trạng thái của tập tin nên nó có thể kéo dài.

Tablespace và rollback segment lock

Như tên gọi, loại lock này có chức năng bảo vệ các tablespace và rollback segment.

Ví dụ: Các instance truy cập vào database sẽ phải kiểm tra xem tablespace online hay offline. Còn các rollback segment được lock để đảm bảo rằng mỗi segment chỉ được ghi dữ liệu bởi một instance.

7.Explicit locking

Oracle luôn tự động lock để đảm bảo tính đồng thời, tính đúng đắn của dữ liệu và tính nhất quán khi đọc dữ liệu ở cấp câu lệnh. Tuy nhiên người dùng có thể tự tự lock theo ý mình, trong các trường hợp sau:

  • Ứng dụng cần tính nhất quán khi đọc dữ liệu ở cấp độ transaction hoặc các thao tác đọc lặp đi lặp lại. Nói cách khác, các câu truy vấn cần lấy ra các khối dữ liệu thống nhất trong suốt transaction mà không bị ảnh hưởng bởi những thay đổi từ các transaction khác. Ta có thể bảo đảm tính nhất quán khi đọc ở cấp transaction bằng cách dùng explicit locking, tạo ra read only transaction, serializable transaction hoặc thay đổi chế độ lock mặc định.
  • Ứng dụng cần tạo ra transaction để truy cập lập tức vào tài nguyên mà không phải chờ đợi các transaction khác.

Chế độ lock mặc định của Oracle có thể được thay đổi ở cấp transaction hoặc session.

Ở cấp transaction:

  • Dùng câu lệnh SET TRANSACTION ISOLATION LEVEL.
  • Dùng câu lệnh LOCK TABLE.
  • Dùng câu lệnh SELECT với tùy chọn FOR UPDATE.

Ở cấp session:

  • Đặt các chế độ cô lập transaction bằng lệnh ALTER SESSION.

8.Oracle Lock Management Services

Với Oracle Lock Management Services, lập trình viên có thể tạo ra các khối PL/SQL với khả năng:

  • Tạo ra một lock thuộc loại nào đó.
  • Đặt cho lock một cái tên duy nhất mà các thủ tục khác có thể nhận ra.
  • Đổi loại của một lock
  • Hủy bỏ một lock.

Các lock trong khối lệnh PL/SQL cũng là Oracle lock nên có đầy đủ đặc trưng và tính năng lock của Oracle , bao gồm khả năng phát hiện dead lock. Lock được tạo ra bởi người dùng sẽ không xung đột với lock của Oracle vì chúng được đặt tên với tiền tố UL.

Oracle Lock Management Services được sử dụng thông qua các thủ tục trong package DBMS_LOCK.

=============================
* 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

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master