Thứ Hai, 30 tháng 6, 2014

[Oracle Database] Tự động Start hoặc Shutdown database instance

Mình làm trên công ty, máy server database cùi nên hay bị tắt giữa chừng. Mà mỗi lúc như vậy thì phải vào start listener rồi start database instance lên thấy mất công. Hôm nay post một bài mình tham khảo được về việc cấu hình tự động start 2 thứ đó lên cùng server, hoặc khi server shutdown thì nó tự động shutdown luôn.

Link tham khảo:

Đầu tiên, tạo thư mục chứa các script và cấp quyền sở hữu cho thư mục đó
mkdir -p /home/oracle/scripts
chown oracle.oracle/home/oracle/scripts 
Trong đó, user mình đang dùng là oracle, group là oracle luôn.
Dùng user root tạo file "/etc/init.d/dbora"
touch /etc/init.d/dbora
Sau đó chép đoạn nội dung này vào file vừa tạo
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database software.

ORA_OWNER=oracle

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        # Remove "&" if you don't want startup as a background process.
        su $ORA_OWNER -c "/home/oracle/scripts/startup.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1" &

        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "/home/oracle/scripts/shutdown.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
        rm -f /var/lock/subsys/dbora
        ;;
esac

Trong đó ORA_OWNER là user linux sở hữu database, của mình là user oracle (đa phần là vậy).

Cấp quyền cho file vừa tạo

chmod 750 /etc/init.d/dbora

Cấu hình để chạy file tự động khi khởi động cùng server
chkconfig --add dbora

Tạo script startup
touch /home/oracle/scripts/startup.sh
Chép nội dung này vào file vừa tạo
#!/bin/bash 
 
# cấu hình biến môi trường, giống file .bash_profile của user oracle
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export NLS_LANG=american_america.al32utf8
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl

ORAENV_ASK=NO
. oraenv
ORAENV_ASK=YES

# Start Listener
lsnrctl start

# Start Database
sqlplus / as sysdba << EOF
STARTUP;
EXIT;
EOF

Tạo script shutdown
touch /home/oracle/scripts/shutdown.sh
Chép nội dung này vào file vừa tạo
#!/bin/bash

# cấu hình biến môi trường, giống file .bash_profile của user oracle
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export NLS_LANG=american_america.al32utf8
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl
 
ORAENV_ASK=NO
. oraenv
ORAENV_ASK=YES

# Stop Database
sqlplus / as sysdba << EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF

# Stop Listener
lsnrctl stop

Cấp quyền thực thi và quyền sở hữu 2 file này cho user oracle, group oracle
chmod u+x /home/oracle/scripts/startup.sh /home/oracle/scripts/shutdown.sh
chown oracle.oracle /home/oracle/scripts/startup.sh /home/oracle/scripts/shutdown.sh

Ok xong rồi, có thể test thử lại bằng lệnh sau
Start database instance
service dbora start
Stop database instance
service dbora stop

Hoặc reboot lại server sẽ thấy sau khi server reboot, database instance sẽ tự động start lên

Chúc vui !

Thứ Năm, 26 tháng 6, 2014

[Oracle cơ bản] Kiến trúc Oracle Database

Các nội dung chính:
  • Liệt kê các thành phần quan trọng trong Oracle Database.
  • Mô tả thành phần memory (memory structure).
  • Mô tả các tiến trình background processes.
  • Cấu trúc lưu trữ logic và vật lý.
  • Mô tả tổng quan các thành phần ASM.
I - Các thành phần trong Oracle Database
1. Oracle database gồm 3 thành phần chính
  1. Memory structure
  2. Process structure
  3. Storage structure
Kiến trúc tổng quan Oracle Database
Như hình trên, thì khái niệm Instance bao gồm 2 thành phần 1,2, còn khái niệm Database bao gồm thành phần thứ 3.
Mô hình quan hệ giữa Instance - Database
2. Mối liên hệ giữa Instance - Database
  • 1 instance kết nối đến 1 và chỉ 1 database duy nhất.
  • Trên 1 server có thể có nhiều database, mỗi database có 1 instance riêng (như mô hình Nonclustered System ở hình trên).
  • 1 database có thể có nhiều instance (mô hình Real Applications Cluster (RAC) như hình trên).
3. Luồng kết nối từ user đến instance
Mô hình kết nối user đến database instance
Phân biệt User processServer process
  • User process:"When a user runs an application program (such as a Pro*C program) or an Oracle tool (such as Oracle Enterprise Manager or SQL*Plus), Oracle Database creates a user process to run the user's application"
  • Server process: Oracle database tạo ra server process để xử lý những request của user process khi kết nối đến instance. Nếu user process và server process là cùng 1 máy, thì có thể gọp chung thành 1 process để giảm tải cho server. Nếu user process đến từ 1 máy khác server, thì Oracle database sẽ luôn luôn tạo ra 1 server process để phục vụ cho 1 user process khi kết nối đến.
Phân biệt connection và session
  • Connection: là kết nối thực sự từ user process đến instance (thông qua giao thức tcp/ip).
  • Session: là trạng thái hiện tại của user khi kết nối vào server, do server tạo ra (có thể là process hoặc thread), dựa trên connection kết nối tới. 1 session kéo dài từ lúc user đăng nhập đến khi log out khỏi hệ thống hoặc thời gian của session tồn tại đạt đến giá trị expire (hết hạn).
  • 1 user oracle có thể tạo ra nhiều session kết nối đến database từ nhiều máy khác nhau.
II - Memory structure
Mô hình memory structure
Mô hình memory structure
Một instance có 2 thành phần memory cơ bản:
  1. System Global Area (SGA)
  • Chứa dữ liệu (data) và thông tin điều khiển (control information) của 1 instance.
  • 1 SGA + n Processes = 1 Instance. Mỗi instance có phần SGA riêng.
     2.  Program Global Area (PGA):
  • Chứa dữ liệu và thông tin điều khiển cho từng server process hoặc background process - không chia sẻ giữa các server process hay background process với nhau.
  • 1 server process sẽ phục vụ cho những request từ 1 client. Khi start 1 server process sẽ cấp phát vùng nhớ PGA cho riêng server process đó. 
1. SGA: 
Gồm các thành phần chính như shared pool, data buffer cache, redo log buffer, large pool...
1.1. Shared pool
Là một thành phần quan trọng trong SGA, bao gồm những thành phần chính như Library Cache, Dictionary Cache, Result Cache.
Mô hình shared pool
Giá trị lưu trữ trong shared pool sẽ bị mất đi chỉ khi vùng nhớ cấp phát mới không đủ, cách hủy các giá trị cũ sẽ dựa vào thuật toán LRU (least recently used), căn bản của thuật toán này là, thèn nào ít dùng nhất sẽ bị loại bỏ.

1.1.1. Library cache
Bao gồm các thành phần như: private SQL areas, shared SQL areas, PL/SQL procedures và packages...
Thành phần private SQL areas và shared SQL areas:
  • Oracle ghi nhận việc thực hiện 1 câu lệnh SQL ở 2 thành phần: Shared SQL areas và private SQL areas (nằm trong vùng PGA - đến đây có thể đặt ra câu hỏi: shared pool thuộc SGA, library cache thuộc shared pool, trong library cache bao gồm shared và private SQL areas, vậy tại sao private SQL areas lại nằm trong PGA ? Câu trả lời được oracle giải thích tại đây, mình trích dẫn "The location of a private SQL area depends on the type of connection established for a session. If a session is connected through a dedicated server, private SQL areas are located in the server process's PGA. However, if a session is connected through a shared server, part of the private SQL area is kept in the SGA.").
  • Khi 1 user thực hiện 1 câu lệnh Oracle sẽ cấp phát vùng nhớ từ vùng shared pool. Nếu vùng shared pool đầy và không tìm thấy những vùng nhớ còn trống. Thì lúc này, oracle sẽ sử dụng thuộc toán LRU  để loại bỏ những thành phần ít được dùng nhất trong shared pool. Quá trình thực hiện 1 câu lệnh được lưu trữ trong cả private và shared SQL areas. Lưu vào vùng priavate SQL areas là đương nhiên rồi. Còn lưu vào shared SQL areas là để khi 2 users cùng thực hiện 1 câu lệnh, Oracle sẽ không chạy lại quá trình thực hiện câu lệnh đó nữa, mà vào thẳng vùng shared SQL areas để lấy luôn, giúp tiếc kiệm time & resource hệ thống.
  • Đối với PL/SQL procedures hay packages: Quá trình quản lý, cấp phát vùng nhớ cũng tương tự như khi thực hiện 1 câu lệnh statement.
1.1.2. Result cache
Một tính năng mới trong Oracle 11g. Result cache giúp lưu lại kết quả thực hiện của câu lệnh hoặc procedures/packages, nhằm tăng tốc độ cho câu truy vấn.

1.1.3. Data dictionary 
Một trong những thành phần quan trọng nhất trong Oracle database. Được sở hữu bởi user SYS trong hệ thống. Data dictionary bao gồm:
  • Định nghĩa tất cả các đối tượng scheme trong database như: views, tables, indexes, clusters, sequences, procedures, triggers, packages v.v...
  • Thông tin bộ nhớ chiếm dụng, đang sử dụng của các đối tượng shema.
  • Default value trong các cột.
  • Thông tin các ràng buộc (constraints).
  • Tên các users trong database.
  • Phân quyền và vai trò của các users trong database.
  • Thông tin về auditing như ai truy cập hay cập nhật các đối tượng schema.
Thông tin của data dictionary được lưu dưới dạng table và view (read-only), lưu trữ tại SYSTEM tablespace. Cấu trúc của data dictionary gồm 2 phần chính:
  • Basic tables: lưu trữ các thông tin liên quan về database. Những thông tin này được mã hóa và chỉ có Oracle mới được quyền thao tác dữ liệu trên đây.
  • User-Accessible views: những views chưa các thông tin từ basic table, nhưng được giải mã ra và đưa ra những thông tin cần thiết cho người dùng như các thông tin về table hay user trong hệ thống.
Dữ liệu của data dictionary phần lớn được lưu ở SGA, trong phần data dictionary cache. Lý do bởi vì Oracle database thường xuyên truy cập vào đây để lấy các thông tin về chứng thực người dùng, thông tin về tables hay các đối tượng trong schema khi nhận request từ client, cho nên việc lưu cache trong SGA giúp tăng performance hệ thống.
User bình thường, sử dụng các thông tin trong data dictionary thông qua các views. Một số prefix views chính trong data dictionary:
  • USER: chứa các thông tin về user. Ví dụ:
    # SELECT object_name, object_type FROM USER_OBJECTS;
  • ALL: các thông tin khác mà user có thể truy xuất. Ví dụ:
    # SELECT owner, object_name, object_type FROM ALL_OBJECTS; 
  • DBA: view dành cho quản trị database. Đối với prefix là DBA, muốn truy xuất cần chỉ định owners, ở đây chính là SYS. Ví dụ:
    # SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS; 
Tiện thể, ở đây mình giới thiệu 1 tí về dynamic performance tables. Khi gặp câu truy vấn mà nó có dạng "select <1 vài thứ gì đó> from V$_xxx". Thì cái v$ đó gọi là dynamic performance table, đây không phải là table thực sự, mà là table ảo lưu trữ những trạng thái hiện tại của database. Cái này thích thì tìm hiểu thêm, có nhiều cái thú vị để cấu hình cho database thông qua v$ này ^^.

1.2. Data buffer cache 
Cũng là 1 thành phần trong SGA như shared pool. Data buffer cache lưu trữ dữ liệu lấy từ datafile dưới database lên. Những dữ liệu này được lưu theo dạng block. Khái niệm buffer có thể được hiểu là 1 vùng trống trong data buffer cache có thể chứa hoặc không chứa dữ liệu.
Mô hình data buffer cache
Cấu trúc của data buffer cache:
  • Tổ chức thành 2 list: write list và the least recently used (LRU) list.
  • Write list: chứa những dirty buffers, tức là bao gồm những dữ liệu đã bị thay đổi (modified) nhưng chưa được lưu xuống database.
  • LRU list chứa free buffers (những vùng còn trống có thể lưu dữ liệu được), pinned buffers (những dữ liệu đang được truy xuất) và những dirty buffers chưa được đưa xuống write list.
Cơ chế hoạt động trong data buffer cache:
  • Khi có 1 process nào đó truy cập vào 1 buffer, buffer đó sẽ được đưa vào cuối LRU list. Mục đích là khi dọn dẹp data buffer cache theo thuật toán LRU, những buffer nằm ở top trên cùng của LRU list (tức là ít dùng đến nhất) sẽ bị bỏ đi.
  • Khi user process yêu cầu dữ liệu, đầu tiên hệ thống sẽ tìm kiếm trong data buffer cache, nếu tìm thấy (gọi là cache hit) sẽ gửi dữ liệu về cho user, nếu không tìm thấy (cache miss), hệ thống phải xuống dưới database, lấy dữ liệu từ datafile để đổ vào data buffer cache. Và tất nhiên là truy xuất dữ liệu từ cache hit nhanh hơn cache miss nhiều.
  • Trong trường hợp cache miss, trước khi đổ data block vào cache, process cần tìm ra free buffer trong cache. Quá trình tìm kiếm bắt đầu từ phía dưới LRU list tìm lên. Tìm kiếm kết thúc khi tìm thấy free buffer hoặc đạt tới ngưỡng tìm kiếm (không thể tìm thêm được nữa).
  • Nếu process tìm được dirty buffer trong LRU list, dirty buffer này sẽ được chuyển xuống write list, process tiếp tục tìm kiếm. Nếu process tìm được free buffer, thì data block sẽ được đưa vào đây, và buffer này được chuyển xuống cuối của LRU list.
  • Nếu process đạt tới ngưỡng tìm kiếm mà vẫn chưa tìm ra được free buffer. Thì lúc này, process sẽ ra hiệu cho DBW0 background process, là tiến trình giúp đưa những dirty buffer xuống đĩa cứng.
  • Chú ý: Nếu thực hiện full scan bảng, thì dữ liệu đọc từ datafile lên cache sẽ được đổ lên đầu (thay vì cuối) LRU list. Lý do là thèn Oracle nói rằng, full scan bảng là không nên, và nếu có dùng thì cũng chỉ trong 1 khoảng thời gian ngắn thôi. Nên dữ liệu của nó nên để lên đầu LRU list để được dọn dẹp sớm nhất có thể.
1.3. Redo log buffer
- Là một dạng circular buffer (hình dung nó là dạng vòng tròn, lưu trữ xoay vòng), lưu trữ tất cả những thông tin về việc tác động tới database. Những thông tin này lưu trữ trong redo entries.
Mô hình lưu trữ của redo log buffer
- Redo entries lưu thông tin về việc tác động vào database như: INSERT, UPDATE, DELETE, CREATE, ALTER, hay DROP. Mục đích nhằm phục hồi dữ liệu sau này (nếu cần).

1.4. Large pool 
Theo mình tự hiểu thì cái này do dba cấu hình memory cấp phát cho large pool. Mục đích dùng để chia sẽ memory cho phần shared pool khi thực hiện chạy các câu query yêu cầu memory lớn, hay dùng trong backup hệ thống. Tóm lại, như là một dạng memory dự trữ cho các phần khác khi cần.

2. PGA
Là vùng nhớ được cấp phát cho mỗi server process hoặc background process. PGA dùng để thực hiện những câu truy vấn, hoặc lưu trữ session. Tập hợp các PGAs gọi là 1 instance PGA. Kích thước của PGA instance này, thèn DBA có thể cấu hình để dễ quản lý. Cấu trúc PGA gồm 2 phần chính: Stack space và User Global Area (UGA).
Mô hình PGA

  1. Stack space: chứa các thông tin lưu trữ của session.
  2. UGA: với loại dedicated server, mỗi user connect vào database sẽ tạo ra 1 server process. Với loại này, PGA sẽ cấp phát 1 vùng nhớ gọi là UGA. Với loại shared server, nhiều client users chia sẻ chung server process. Trong loại này, UGA sẽ được chuyển vào trong SGA, lúc này vùng PGA chỉ còn stack space.
III - Process architecture
Thành phần thứ 2 cần tìm hiểu sau memory structure là process trong Oracle database.
Cấu trúc process

Process trong oracle chia làm 2 thành phần chính:
  1. User process.
  2. Oracle database process bao gồm server process và background process.
Mối liên hệ giữa user process và server process cũng khác nhau, tùy thuộc vào kiến trúc hệ thống (delicated server hay shared server) (đã giải thích ở những phần đầu blog).
Mô hình instance, trong đó có mối liên hệ user processes và Oracle processes
1. User processes
Khi người dùng sử dụng ứng dụng để kết nối đến Oracle database thì lúc này sẽ tạo ra 1 user process.

2. Server processes
-  Sinh ra là để phục vụ các request từ user process:
  •  Parse và thực hiện các câu truy vấn SQL nhận được từ ứng dụng.
  • Đọc các blocks dữ liệu từ ổ đĩa vào data buffer cache nếu như không tìm thấy dữ liệu cần tìm kiếm trên data buffer cache.
  • Trả kết quả về cho ứng dụng thực hiện truy vấn tương ứng.
-  User process muốn yêu cầu tạo ra server process phải thông qua listener process. Hay nói cách khác, listener là cấu nối để client kết nối được vào instance. Sau khi đã kết nối tạo ra session xong, thì listener không còn tác dụng với client đó nữa, có disable listener đi thì cũng không ảnh hưởng gì đến client đó.

3. Background processes
Thành phần giúp Oracle database quản lý bộ nhớ, đồng bộ dữ liệu xuống ổ cứng v.v..
Mô hình tổng quan hoạt động các process trong Oracle database
Một số background process chính
3.1. Database Writer Process (DBWn)

- Tiến trình thực hiện việc ghi những dirty buffers trong data buffer cache xuống ổ đĩa. Có thể cấu hình số lượng DBWn (DBW0, DBW1, DBW2 ...) để tăng performance hệ thống thông qua tham số DB_WRITER_PROCESSES (tối đa 20 processes).
- Khi 1 buffer trong data buffer cache bị chỉnh sửa (modified), nó được đánh dấu là dirty buffer. Cold buffer là khái niệm chỉ những buffer ít được dùng tới trong LRU list. DBWn sẽ ghi những dirty và cold buffer xuống đĩa cứng, nhờ đó user process có thể tìm thấy những clean và cold buffer để lưu những blocks dữ liệu mới vào trong data buffer cache. Nhờ có DBWn mà user processes luôn tìm được những buffer trống để lưu blocks dữ liệu mới.

3.2. Log Writer Process (LGWR)

- Thực hiện ghi tất cả các redo entries trong redo log buffer xuống redo log file (kể từ lần ghi gần nhất).
- Do redo log buffer là dạng circular buffer, cho nên, những redo entries nào đã được ghi xuống redo log file có thể được ghi đè lên bởi server process. Tốc độ LGWR đủ nhanh để đam bảo server process luôn ghi được vào redo entries.
- LGWR thực hiện việc ghi redo log buffer xuống redo log file trong các trường hợp:
  • Khi 1 user process commit 1 transaction.
  • Khi redo log buffer đầy 1/3.
  • Trước khi 1 DBWn thực hiện ghi buffer xuống ổ đĩa.
  • 3 giây thì ghi 1 lần.
- Khi user thực hiện lệnh commit 1 transaction, transaction này được gán 1 số SCN (system change number). Chỉ số SCN được ghi nhận vào redo log dùng khi thực hiện việc phục hồi trong hệ thống RAC hay distributed database.
- Trong trường hợp hệ thống cao tải, LGWR có thể ghi xuống redo log bằng hình thức group commits. Cụ thể, khi user commit 1 transaction, LGWR phải ghi redo entries của transaction đó xuống redo log file, trong thời gian đó, có thể có 1 user khác thực hiện commit 1 transaction khác. Bình thường, tại 1 thời điểm, LGWR chỉ có thể ghi xuống redo entries của 1 transaction. Muốn ghi redo entries của transaction kế tiếp phải chờ việc ghi redo entries transaction này kết thúc. Tuy nhiên, nếu số lượng commit tăng cao, thì tại 1 thời điểm, LGWR có thể ghi xuống nhiều redo entries của nhiều transactions.

3.3. Check point process (CKPT)
- 1 checkpoint là một cấu trúc dữ liệu dùng để định nghĩa chỉ số SCN dùng trong quá trình recovery của database. Checkpoint được lưu trong control file và header của data file.
- Khi xảy ra 1 check point, CKPT có nhiệm vụ cập nhật tất cả header của các data files.

3.4. Archiver Processes (ARCn)
- Khi 1 log switch xảy ra, ARCn tiến hành sao chép redo log file đến thiết bị lưu trữ (tạm gọi là quá trình archiving).
- ARCn chỉ chạy khi database bật chế độ ARCHIVELOG mode và thiết lập chế độ tự động thực hiện archiving.

IV - Database Storage Architecture

1. Các thành phần trong database storage
  1. Control files: chứa dữ liệu của database. Files này cực kỳ quan trọng đối với database. Không có control file, không thể truy xuất vào dữ liệu trong data files.
  2. Data files: chứa dữ liệu của user và của ứng dụng, cũng như dữ liệu metadata và data dictionary.
  3. Online redo log files: lưu trữ thông tin giúp việc recovery database. Cụ thể, nếu database bị crashes và không mất data files, thì instance có thể được recovery từ những thông tin lưu trữ trong files này.
  4. Parameter file: file cấu hình instance.
  5. Password file: cho phép user sử dụng quyền sysdba, sysoper và sysasm kết nối từ xa (remote) vào instance để thực hiện công việc quản trị hệ thống.
  6. Backup files: dùng cho recovery database.
  7. Archied redo log files: chứa tất cả dữ liệu mang tính lịch sử về những thay đổi đối với database. Từ files này cộng thêm một bản backup của database, chúng ta có thể lấy lại những dữ liệu bị mất của database.
  8. Trace files: Mỗi server và background process đều ghi nhận quá trình hoạt động vào trong trace files tương ứng, để khi lỗi phát sinh, sẽ được lưu trữ vào trace files.
  9. Alert log file: Là một dạng đặc biệt của trace file. Tóm lại là, khi databse bị lỗi, việc đầu tiên là chui vào đây xem có đứa nào (process) méc lại cho mình biết vì sao lỗi hay không.
2. Mối liên hệ giữa lưu trữ logic (logical) và vật lý (physical)
Mối quan hệ giữa Logical và Physical Storage
- Đơn vị lưu trữ nhỏ nhất trong Oracle database là Oracle data block. Mỗi Oracle data block tương ứng với con số cụ thể (ví dụ 2 bytes) của OS block.
- 1 extent gồm nhiều Oracle data block.
- 1 segment gồm nhiều extent.
- 1 tablespace gồm nhiều segment và có thể được lưu trữ trên nhiều data file.

V. Giới thiệu tổng quan về ASM (Automatic Storage Management)
ASM là một tính năng của Oracle, giúp cho việc quản lý, lưu trữ thông tin xuống disks dễ dàng. ASM và file system hoàn toàn có thể chạy song song với nhau. Khi ta tạo một database, có thể chỉ định hoặc trên ASM hoặc trên file system đều được.
1. Các thành phần trong ASM
Các thành phần trong ASM
- Oracle database file có mối quan hệ 1-1 với ASM file hay File system.
- 1 ASM disk group gồm nhiều ASM disk.
- 1 ASM disk gồm nhiều ASM allocation unit (AU), đơn vị nhỏ nhất mà ASM dùng để lưu trữ. Kích thước của AU có thể được cấu hình khi tạo ASM disk group.
- 1 ASM extent gồm nhiều ASM AU.
- 1 ASM file gồm nhiều ASM extent.

2. Tóm tắt lại luồng hoạt động tổng quan Oracle database

  1. Start instance.
  2. Người dùng mở ứng dụng để kết nối đến Oracle database (tạo ra user process).
  3. Listener trên server có nhiệm vụ tạo cầu nối để user process kết nối được với server thông qua server process.
  4. Người dùng thực hiện các câu lệnh SQL, sau đó commit transactions.
  5. Server process tiếp nhận các câu lệnh từ user process, tiếp theo kiểm tra xem trong vùng shared SQL area đã có câu lệnh này chưa, nếu có sẽ kiểm tra quyền truy xuất dữ liệu của user truy xuất và thực hiện truy xuất dữ liệu. Nếu chưa có, cấp phát 1 shared SQL area để câu lệnh có chỗ được parse và thực hiện.
  6. Server process sẽ lấy dữ liệu từ data buffer cache hoặc từ data file nếu không tìm thấy trong data buffer cache.
  7. Khi user commit transaction, tiến trình Log Writer (LGWR) ngay lập tức ghi dòng dữ liệu lưu trữ thông tin transaction đó trong redo entries xuống redo log file. Khi server process thay đổi (modified) dữ liệu trong data buffer cache thì tiến trình Database Writer (DBWn) sẽ ghi dirty buffers xuống data file trong trường hợp cần thiết.
  8. Transaction thực hiện thành công hay không, server process đều sẽ thông báo về ứng dụng truy cập vào database.
  9. Trong suốt luồng thực hiện này, những background process sẽ chạy để tiến hành hỗ trợ quá trình hoạt động của hệ thống.
Nhìn chung, phần này dừng lại ở mức giới thiệu tổng quan các khái niệm trong kiến trúc Oracle database. Những chi tiết khác có thể tìm hiểu sau dựa trên nền tảng này.

Link tham khảo:

Thứ Hai, 23 tháng 6, 2014

[Linux] Share thư mục từ Centos

Requirement:
- Máy server chạy Centos 6 & NGINX dĩ nhiên, cũng được cài trên đây.
- Máy dev dùng windows.
- Nay phát sinh nhu cầu muốn share thư mục /static của NGINX về máy windows để dev cho nó dễ.

Solution:
Bước 1: Cài đặt samba server trên centos 6
Kiểm tra server đã cài đặt samba server chưa:
# rpm -q samba
Nếu chưa thì tiến hành cài đặt:

# yum install samba samba-client samba-common
Cấu hình để samba server khởi động cùng server
# chkconfig smb on 
# chkconfig nmb on

Bước 2: Disable SElinux & Cấu hình iptables
# vi /etc/selinux/config
Đổi SELinux từ enforcing sang disabled
Cấu hình iptables
# iptables -I INPUT 4 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
# iptables -I INPUT 5 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
# iptables -I INPUT 6 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
# service iptables save
Restart server (bước này mình chưa kiểm tra là không biết chỉ cần restart service iptables thì khỏi cần restart server hay không)

Bước 3: Kiểm tra workgroup của windows
Vào cmd windows (Ctrl + R -> cmd) gõ lệnh kiểm tra workgroup
# net config workstation
Tìm dòng: "Workstation domain", đây là workgroup của máy, tí nữa sẽ dùng để cấu hình trong samba config.

Bước 4: Chỉnh sửa file cấu hình samba
Trước tiên cần backup file cấu hình trước, rồi muốn phá gì phá ^^
# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
Chỉnh sửa file cấu hình 
# vi /etc/samba/smb.conf
Tìm từ khóa workgroup trong file cấu hình và gán giá trị bằng giá trị workgroup của máy đã tìm ở Bước 3.
Thêm vào phần cấu hình để trỏ đường dẫn đến thư mục cần share
#===== Cấu hình đến đường dẫn /tmp, user có thể sử dụng là user root ======== 
#===== Lưu ý: user ở đây phải là user của hệ thống
[tmp]
        path = /tmp
        writeable = yes
        browseable = yes
        valid users = demo

Bước 5: Cấu hình user đăng nhập samba
Thêm user vào cấu hình của samba server
# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root. 
(Tham khảo thêm các lệnh quản lý user của samba tại đây)
Sau đó, restart server samba để cấu hình có hiệu lực

Vậy là xong, từ Windows, dùng explorer để truy xuất vào thư mục share này thông qua địa chỉ IP server.

Reference:

Nginx


Link tham khảo:







I -  Giới thiệu tổng quát NGINX
Theo wiki thì NGINX nó đảm nhiệm nhiều chức năng lắm: "Nginx (pronounced "engine-x") is an open source reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP protocols, as well as a load balancer, HTTP cache, and a web server (origin server)"
Tuy nhiên, do mình tìm hiểu NGINX để áp dụng vào dự án mình đang làm, cho nên theo mức độ hiểu biết của mình thì NGINX đóng vai trò như một vị trí "tiền tiêu". Tức là, nó đứng ra nhận các request trước, sau đó xử lý, xử lý ở đây cụ thể là, những request nào yêu cầu nội dung tĩnh (static) thì NGINX sẽ lấy trực tiếp những file cache đã lưu sẵn để trả về cho client, những request nào yêu cầu nội dung động (dynamic) thì sẽ forward request đó đến proxied server, sau đó nhận kết quả trả về từ proxied server rồi trả về cho client.
Kiến trúc NGINX (link tham khảo tại đây)
Đi sơ qua khái niệm NGINX để dễ hình dung. Dưới đây sẽ là phần cấu hình cụ thể NGINX.

II - Web Server
Khái niệm:
Trước tiên, cần tìm hiểu các khái niệm Directive Context. Trong NGINX, directive là khái niệm chỉ những từ khóa xác định các chỉ thị / lệnh cần thực hiện. Một số directives chính được gọi là Context: events, http, server, location. Những directives nào nằm ngoài các contexts trên được gọi là directives nằm trong main context.
Ví dụ về một full configuration trong nginx:
user nobody; # directive thuộc main context
events {
 #config cho events
}
http {
 #config cho http và cho tất cả các virtual servers (xem thêm bên dưới mục virtual server) bên trong nó
 server {
   #config cho virtual server 1
   location /one {
      #config xử lý URIs dạng '/one'
   }
   location /two {
      #config xử lý URIs dạng '/two'
   }
  }
  server {
    #config cho virtual server 2
  }
}
Virtual server:
- Để xử lý http request, cần ít nhất 1 virtual server
- Trong 1 http context có thể có nhiều virtual server.
- Trong 1 virtual server cần 1 directive listen để xác định IP address và Port cần lắng nghe.
- Ví dụ: virtual server sau sẽ lắng nghe địa chỉ 127.0.0.1 tại port 8080
server {
  listen 127.0.0.1:8080;
}
- Nếu thiếu port -> lắng nghe port standard (do mình cấu hình)
- Nếu thiếu address -> lắng nghe tất cả các địa chỉ address.
- Nếu thiếu listen directive:
 + Standard port: 80/tcp.
 + Default port: 8000/tcp.
- Nếu nhiều virtual server sử dụng chung IP và Port thì dựa vào directive server_name để xác định cần vào virtual server nào. (Ở đây mình chỉ đưa ra mức khái niệm, không nói sâu về mức server_name này).

Location: xác định bằng directive location
- Bên trong mỗi virtual server, có thể cấu hình nhiều dạng URIs có thể được điều hướng đến nhiều proxy hoặc lấy file từ file system.
- Tham số của location có thể là prefix string (mình tạm gọi tắt PS) hoặc regular expression (mình tạm gọi tắt RE) (đánh dấu bằng dấu ngã (~)).
- Để xử lý URI sẽ match theo PS hay RE thì luồng xử lý chỗ location này như sau:
  1. Dựa trên URI truyền vào, kiểm tra qua tất cả PS.
  2. Ký tự "=" dùng để mô tả cho PS. Nếu tìm thấy PS nào chính xác với URI và có ký tự "=" đứng trước thì quá trình tìm kiếm sẽ kết thúc.
  3. Ký tự "^~" cũng dùng để mô tả cho PS. Nếu tìm thấy PS nào có độ trùng dài nhất so với URI thì sẽ lấy PS đó và kết thúc tìm kiếm (không kiểm tra qua RE).
  4. Lưu lại PS nào có độ trùng dài nhất.
  5. Kiểm tra qua RE.
  6. Dừng lại ở RE nào đúng nhất được tìm thấy đầu tiên. Kết thúc tìm kiếm.
  7. Nếu không có RE nào thỏa mãn, lấy PS được lưu lại tại bước 4.
Ví dụ: Nếu URI "/" được truy suất nhiều (vào trang chủ), có thể cấu hình như sau để quá trình xử lý location nhanh nhất.
location = / {
 # config
}
Một ví dụ khác về cấu hình nhiều location trong 1 virtual server. Trong ví dụ bên dưới, tất cả URI không bắt đầu bằng /images/ sẽ được chuyển qua 1 proxy server (http://www.example.com.vn) nhớ directive proxy_pass. Những URI nào có dạng như "/images/example.png" sẽ được NGINX trả lại file "/data/images/example.png" nằm trên file system.
server {
 location / {
   proxy_pass http://www.example.com.vn;
 }
 location /images/ {
  root /data;
 }
}

III - Reverse Proxy
Chuyển 1 Request đến 1 Proxied Server
- NGINX chuyển request đến 1 proxied server, nhận lại response và gửi trả về cho client.
- NGINX hỗ trợ HTTP server và non-HTTP server.
- NGINX hỗ trợ các loại protocols sau: FastCGI, uwsgi, SCGI và memcached.
Ví dụ về việc chuyển 1 request đến 1 HTTP proxied server bằng proxy_pass directive:
localtion /some/path/ {
  proxy_pass http://www.example.com/link/;
}
Trong ví dụ trên, địa chỉ proxied server http://www.example.com theo sau bởi URI /link/. Điều này có nghĩa là nếu URI của proxeid server (ở ví dụ này là /link/) sẽ thay thế cho tham số URI của location (ở ví dụ này là /some/path/). Cho nên, nếu 1 request có dạng /some/path/page.html sẽ được chuyển thành http://www.example.com/link/page.html.
- Để chuyển đến 1 non-HTTP proxied server, NGINX sử dụng các directive tương ứng:
  • fastcgi_pass cho FastCGI server.
  • uwsgi_pass cho uwsgi server.
  • scgi_pass cho SCGI server.
  • memcached_pass cho memcached server.
III - NGINX Content Caching
Phần này hướng dẫn cách cấu hình caching (cache lại những responses từ những proxied servers) trong NGINX. Khi bật tính năng caching, NGINX sẽ lưu lại kết quả responses trên disk và sử dụng chúng để respond lại cho clients vào những lần sau mà không cần phải gửi request đến proxied server.
Bật tính năng cache
- Khai báo proxy_cache_path directive ở cấp http context. Sau đó, khai báo proxy_cache directive bên trong context muốn thực hiện cache. Ví dụ:
http {
  ...
  proxy_cache_path /data/nginx/cache keys_zone=one:10m;
  server {
    proxy_cache one;
    location / {
       proxy_pass http://localhost:8000;
    }
  }
}
- proxy_cache_path có 2 tham số bắt buộc:
  1. Đường dẫn file system nơi sẽ lưu responses. Trên ví dụ trên là "/data/nginx/cache".
  2. Tên và kích thước của vùng shared memory zone được xác định bởi từ khóa keys_zone. Trong ví dụ trên, tên vùng shared memory zone là "one", kích thước là 10m (One megabyte zone can store about 8 thousand keys - theo giải thích của NGINX). Tên vùng shared memory zone này cũng phải được chỉ định tại proxy_cache directive
- Kích thước của vùng lưu trữ cache response có thể được giới hạn bởi tham số max_size. Tuy nhiên, thông thường, kích thước của vùng lưu trữ này có thể vượt quá giới hạn tạm thời. Sau đó sẽ có một tiến trình gọi là cache manager process sẽ đi kiểm tra và loại bỏ những vùng cached responses ít dùng đến nhất.

Caching Processes
Có 2 loại NGINX process: cache loader và cache manager.
  1. Cache manager sẽ chạy định kì để xóa bớt những cached responses ít dùng nhất khi dung lượt vùng lưu trữ vượt quá max_size cho phép.
  2.  Cache loader chỉ active 1 lần duy nhất, ngay khi NGINX start. Tiến trình này sẽ load những thông tin metadata từ những lần cache dữ liệu trước đó vào vùng shared memory zone. Đặt điểm của process cache loader:
  • Phải load tất cả metadata 1 lần nên sẽ làm chậm hệ thống.
  • Do vậy, process sẽ chia làm nhiều lần (NGINX gọi là iteration) thực hiện và được cấu hình bởi tham số loader_threshold (đơn vị miliseconds), loader_files và loader_sleeps.
  • Loader_threshold là khoảng thời gian thực hiện tối đa của 1 iteration.
  • Loader_files là số lượng items tối đa (default là 100) cần load trong 1 iteration.
  • Loader_sleeps là thời gian dừng giữa 2 iteration.
Ví dụ về cấu hình proxy_cache_path:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
Specifying Which Requests to Cache: cấu hình những request nào sẽ được cache
- Mặc định, NGINX sẽ cache tất cả các responses có phương thước GET và HEAD trong lần đầu tiên nhận được từ proxied server.
- NGINX phân biệt các request dựa vào các key (có thể cấu hình thông qua proxy_cache_key directive). Khi 2 request có cùng key, NGINX sẽ dùng cùng 1 cached response để gửi lại client.
- Có thể cấu hình số lượng request có key trùng nhau để bắt đầu cache (mặc định là 1), thông qua proxy_cache_min_uses directive.

Limiting or Bypassing Caching: giới hạn hoặc bỏ qua caching
- Mặc định, thời gian lưu trữ response là không giới hạn. Trừ khi tiến trình cache manager chạy và loại bỏ những response ít dùng nhất trong trường hợp vượt ngưỡng lưu trữ (cấu hình tham số max_size đã đề cập ở trên)
- Tuy nhiên, có thể cấu hình thời gian (tính bằng phút) lưu trữ response bằng proxy_cache_valid directive.
- Ngoài ra còn có cơ chế proxy_cache_bypassproxy_no_cache (có thể tự tìm hiểu thêm).

Restricting Access
Nginx cung cấp quản lý truy cập bằng 2 cách:
  • IP address
  • HTTP authentication
IP address
Sử dụng directive allow hoặc deny. Ví dụ:
location / {
  allow 192.168.1.1/24;
  deny all;
}

Authentication
Sử dụng directive auth_basic auth_basic_user_file. Ví dụ:
location / {
  auth_basic "closed website";
  auth_basic_user_file /etc/nginx/authfile;
}
Trong đó /etc/nginx/authfile là file chứa username/password chứng thực. Tạo authfile thông qua lệnh htpasswd.
cd /etc/nginx
htpasswd -c -m authfile <username>
Chú ý, nhớ set lại quyền cho file authfile để thực hiện được.

Sau khi cài đặt xong, muốn truy xuất file của nginx, cần phải nhập username / password.
Ví dụ, mình có file test.txt nằm trong thư mục nginx (địa chỉ 192.168.1.69). Username/password = usertest/123456, dùng để chứng thực khi truy xuất file. Có  3 cách truy xuất:
1. Trên trình duyệt, nhập địa chỉ: http://192.168.1.69/test.txt
Lúc này browser sẽ hiện ra khung nhập username/password.
2. Truyền tham số trực tiếp trên trình duyệt như sau: http://usertest:123456@192.168.1.69/test.txt
3. Sử dụng code java (ưu điểm là encode được username/password khi truyền).
public static void main(String[] args) throws ClientProtocolException,
            IOException {
        String USER_AGENT = "Mozilla/5.0";
        String url = "http://10.30.174.211:9069/sabeco/donatest/donatestnginx.txt";

        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet(url);

        // add request header
        String encoding = new String(
                org.apache.commons.codec.binary.Base64
                        .encodeBase64(org.apache.commons.codec.binary.StringUtils
                                .getBytesUtf8("nginxtestuser:123456")));
        request.addHeader("Authorization", "Basic " + encoding);
        HttpResponse response = client.execute(request);

        System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        System.out.println(result.toString());
    }

Chủ Nhật, 22 tháng 6, 2014

[Oracle] Cài đặt ASM và Oracle Database

Nội dung tóm tắt: Gồm 2 phần
  • Phần I - Cài đặt Oracle ASM
  • Phần II - Cài đặt Oracle Database
Môi trường:
  • Máy host Windows 7 64bits
  • Máy ảo Oracle Enterprise Linux 5
  • VMware 10.0.0 build-1295980
  • Database: Oracle Database 11G R2
Chú ý: Trong quá trình cài đặt, tất cả các password mình đều set là "123456" cho dễ. Tới bước nào đòi hỏi password, cứ nhập số trên vào là ok, khỏi cần nhớ nhiều.
Phần I - Cài đặt Oracle ASM
1. Chuẩn bị môi trường cài đặt
Login vào máy Linux bằng quyền Root

a. Tạo user & group
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
useradd -g oinstall -G dba,oper,asmadmin oracle
Đặt password cho user oracle vừa tạo
passwd oracle
Nhập pass
123456
 Nhập pass confirm
123456
b. Tạo cây thư mục cài đặt
Tạo thư mục chứa các gói cài đặt
mkdir -p /u01/soft
Tạo thư mục cài đặt grid
mkdir -p /u01/app/oracle/product/11.2.0/grid
Tạo thư mục cài đặt oracle database software
mkdir -p /u01/app/oracle/product/11.2.0/db_1
Chuyển quyền sở hữu thư mục /u01
chown -R oracle:oinstall /u01
chmod -R 775 /u01
c. Điều chỉnh hostname cho server
Điều chỉnh hostname cho server giúp cho việc cấu hình biến môi trường cài đặt Oracle sau này.
Ở đây, mình lấy ví dụ đặt tên hostname là oca11g, địa chỉ local là 192.168.3.131
vi /etc/hosts
Thêm vào dòng sau và lưu lại file hosts
192.168.3.131 oca11g
Reboot lại server để việc thay đổi hostname có hiệu lực

d. Tạo các đĩa ASM (ASM disks)
Đầu tiên, cần add thêm đĩa ảo vào cho server. Ở đây, mình sẽ add thêm 3 ổ đĩa ảo. Cách thêm 1 ổ đĩa ảo như sau:
- Shutdown linux. Đang sử dụng quyền root, ta sử dụng lệnh sau:
shutdown -h now
- Vào "Edit virtual machine settings". Trong tab "Hardware" chọn "Hard disk (SCSI)", chọn nút "Add ..."
- Next cho đến khi hoàn thành.
Làm tương tự cho 2 ổ đĩa còn lại. Mở lại server để kiểm tra 3 ổ đĩa mới thêm vào đã được nhận hay chưa bằng lệnh:
ls /dev | grep sd
(Giả sử tìm thấy 3 ổ đĩa mới thêm vào: sdb, sdc, sdd)

Sau đó, tiến hành tạo partition và format cho 3 đĩa mới thêm vào.
Để tạo partition cho ổ đĩa sdb, thực hiện các lệnh sau bằng quyền root: 
su -
fdisk /dev/sdb
m
n
p
1
(Enter để giá trị mặc định)
w
Để format cho ổ đĩa sdb:
mkfs.ext3 /dev/sdb1
Như vậy là xong cho sdb, làm tương tự cho sdc, sdd.

Nếu như thêm partition và format đúng cho 3 đĩa, thì khi chạy lại lệnh
ls /dev | grep sd 
sẽ thấy kết quả xuất hiện sdb1, sdc1, sdd1.

Tiếp theo, cài đặt thư viện ASM như sau:
Kiểm tra lại version của kernal để download package phù hợp bằng lệnh sau:
 uname -a
Kết quả: 2.6.18-371.4.1.el5.x86_64
Vào link sau: http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html kiếm thử có gói nào giống mã máy mình hay không. Ở đây, mình download 3 gói sau đây, bỏ vào thư mục /u01/soft:
(Đối với server khác Oracle Linux, ví dụ như Centos 6.5, thì tham khảo cách cài đặt ASM lib tại link này - cái này mình chưa thử, mới search thử thôi).

Dùng lệnh rpm để cài đặt 3 gói download ở trên.
rpm -ivh oracleasm-support-2.1.8-1.el5.i386.rpm 
rpm -ivh oracleasm-2.6.18-371.4.1.el5-2.0.5-1.el5.i686.rpm 
rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm
Sau khi cài xong, kiểm tra lại xem đã cài đủ chưa
rpm -qa | grep oracleasm
Nếu hiện ra tên 3 gói cài đặt như ở trên là OK

Tiếp theo, khởi tạo ASM lib
/etc/init.d/oracleasm configure
Nhập user sở hữu là oracle, nhóm sở hữu là dba
oracle
dba
y
y
Tạo các đĩa cho Oracle ASM
/etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdb1
Sau khi tạo xong các đĩa ASM, dùng câu lệnh sau để kiểm tra lại
/etc/init.d/oracleasm querydisk ASMDISK1
Nếu hiện ra thông báo "Disk "ASMDISK1" is a valid ASM disk" là thành công, tương tự cho 2 ổ đĩa ASM còn lại.
Để liệt kê danh sách các ổ đĩa ASM, dùng lệnh:
ls -l /dev/oracleasm/disks/
e. Cài đặt các thư viện cần thiết khác
Cài đặt tự động thông qua lệnh yum. (Nếu dùng lệnh yum không được thì thử cài manual như cách này). Tham khảo thêm hướng dẫn ở đây để thực hiện lệnh yum cho đúng với phiên bản OS của mình.
cd /etc/yum.repos.d
wget http://public-yum.oracle.com/public-yum-el5.repo
yum install oracle-validated
Lệnh "yum install oracle-validated" sẽ giúp quá trình cấu hình cài đặt Oracle thực hiện 1 cách tự động. Nếu ở bước này, bị báo lỗi "oracle-validated not found" thì sửa bằng cách như sau
vi public-yum-el5.repo
Trong 2 thẻ [el5_u5_base] [ol5_u5_base], chỉnh giá trị enabled=0 thành enabled=1. Sau đó, lưu lại file và thực hiện lại lệnh "yum install oracle-validated". Đến đây, thì đi pha ly cafe sữa nhâm nhi chờ nó download trên mạng về rồi cấu hình cho mình.

f. Cấu hình file .bash_profile
Thực hiện cấu hình .bash_profile của user oracle như sau
su - oracle
ls -a
vi .bash_profile
Vào trang này, chép phần cấu hình sau vào .bash_profile

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=oca11g; export ORACLE_HOSTNAME
ORACLE_UNQNAME=+ASM; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/grid; export ORACLE_HOME
ORACLE_SID=+ASM; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
ORACLE_HOSTNAME: điền vào hostname của server (dùng lệnh # hostname để kiểm tra).

g. Cấu hình kernel
Thay đổi cấu hình kernel trong file '/etc/sysctl.conf' (sử dụng quyền root)
su -
vi /etc/sysctl.conf
Chép cấu hình này vào
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586

Lưu thay đổi cấu hình bằng lệnh:
/sbin/sysctl -p
h. Thiết lập resource limit cho user oracle
Trước tiên, mở file limits.conf
vi /etc/security/limits.conf
Kiểm tra xem đã có cấu hình limit cho user oracle chưa, ở đây, do bước trên mình đã thiết lập cấu hình tự động bằng lệnh "yum install oracle-validated" (bước e.) nên đã có cấu hình limit cho user oracle luôn rồi. Nếu chưa có, thì thêm đoạn cấu hình này vào và lưu lại
oracle             soft      nproc   2047
oracle             hard    nproc   16384
oracle             soft     nofile    1024
oracle             hard   nofile    65536
Mở file login
vi /etc/pam.d/login
Thêm vào dòng sau và lưu lại
session    required     pam_limits.so
2. Cài đặt ASM
a. Download gói cài đặt grid
Vào đây để download gói cài đặt grid.
Sau khi download xong, giải nén file cài đặt vào thư mục cài đặt
cd /u01/soft
unzip linux_11gR2_grid.zip
Giải nén xong, được thư mục /grid

b. Cấu hình vncserver
Phần này đòi hỏi phải có giao diện, giả sử chúng ta không thực hiện trên server ảo thông qua vmware nằm trên máy local của chúng ta, mà chúng ta đang cài đặt cho 1 server ở đâu đó chẳng hạn. Cho nên để sử dụng giao diện, cần start vncserver trên server lên, đặt password (ở ví dụ này password là 123456) để có thể kết nối từ máy local của mình vào server.
vncserver
123456
123456
Xong, tại windows, chạy RealVNC để kết nối đến server. Nhập địa chỉ ip server kèm theo port (ví dụ của mình là 192.168.1.104:1) và password để kết nối.
Lưu ý: Nếu bước này, gặp lỗi không thể kết nối đến server thì có thể do Firewall của server đã chặn kết nối đến port 5901 (port mặc định của VNCserver). Có 2 cách giải quyết: 1 là tắt firewall đi (cách này hơi chuối), 2 là cấu hình lại iptables.
vi /etc/sysconfig/iptables
Thêm vào dòng sau "-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5901:5903,6001:6003 -j ACCEPT".
Restart lại iptables để thay đổi có hiệu lực.
service iptables restart

c. Cài đặt
Kết nối vào Oracle thông qua RealVNC, chạy lệnh sau để tiến hành cài đặt
su - oracle
cd /u01/soft/grid
./runInstaller
Ở đây nếu gặp lỗi gì có liên quan đến lỗi như sau:
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed <<<<

Thì dùng lệnh sau (dưới quyền oracle), rồi chạy lại lệnh ./runInstaller là được
DISPLAY=192.168.1.103:0.0; export DISPLAY
Tới bước này là đã qua phần giao diện rồi, nhẹ nhõm được 1 chút ^^
Bước 1: Lựa chọn option install


Bước 2: Lựa chọn ngôn ngữ, dĩ nhiên là English rồi, khỏi minh họa bằng hình.

Bước 3: Tạo ASM Disk Group. (Tham khảo thêm link này về các lựa chọn Extented, High, Normal Redundancy)
Ở ví dụ này, mình tạo Disk Group tên là DATA bao gồm 2 disk ASM là ASMDISK1, ASMDISK2.
Bước 4: Thiết lập mật khẩu chung cho user SYS và user ASMNMP
Bước 5: Chọn các group tương ứng với ASM
Bước 6: Chọn vị trí cài đặt
- Oracle base: /u01/app/oracle
- Software location: /u01/app/oracle/product/11.2.0/grid

Bước 7: Nếu lần đầu tiên cài đặt Oracle nó sẽ hỏi địa chỉ lưu thư mục oraInventory, vào trong /u01/app tạo ra thư mục đó. Rồi Next.

Bước 8: Sẽ phân tích lại xem có cấu hình thiếu xót gì không. Nếu ổn thì sẽ hiện ra bảng tóm tắt các cấu hình như sau

Rồi, đi pha ly cafe ngồi chờ nó cài :). Trong thời gian này hi vọng nó đừng văng lỗi.


Lúc cài xong, nó hiện lên yêu cầu mình chạy 2 dòng lệnh bằng quyền root.

Chạy xong mấy scripts đó thì bấm OK. Tiếp theo nó sẽ kiểm tra Network gì đó, nếu gặp lỗi ở phần Network Assist thì thử bấm nút Retry sẽ thành công

Sau khi cài đặt xong, login vào ASM instance bằng user oracle
su - oracle
. oraenv
+ASM
sqlplus / as sysasm
select name, state from v$asm_diskgroup;
Lúc này sẽ hiện ra tên và trạng thái của các disk group.
column path format a40
set linesize 100
select name, path from v$asm_disk;
Lúc này sẽ hiện ra tên và đường dẫn của các ASM disk.
Hiện tại, ta mới chỉ có 1 disk group là DATA, giờ sẽ tạo thêm 1 disk group nữa tên là FRA (tại sao lại đặt tên là FRA - xem Phần II - Cài đặt Oracle Datase sẽ rõ) bằng tool ASM Configuration Assistant (ASMCA)
exit
su - oracle
cd /u01/soft/grid
asmca
Lúc này sẽ hiển thị giao diện ASM Configuration Assistant.

Bấm nút Create để tiến hành tạo thêm Diskgroup.

Điền tên diskgroup: FRA, loại Redundancy là Extented, do chúng ta chỉ còn có 1 ASM disk (Normal cần tối thiểu 2 ASM disk, High cần tối thiểu 3 ASM disk). Chọn ASM disk, ở đây là ORCL:ASMDISK3. Sau đó OK.

Khi đã tạo thành công, lúc này sẽ có 2 diskgroup là DATA và FRA.
Như vậy là xong phần cài đặt ASM, phần tiếp theo sẽ là cài đặt Oracle Database.

Phần II - Cài đặt Oracle Database
1. Cấu hình biến môi trường
Sử dụng user oracle
su - oracle
cd /home/oracle
vi .bash_profile
Nếu đã tồn tài phần cấu hình "Oracle Settings" trước đó thì sửa thành như sau, hoặc nếu chưa có thì thêm mới vào file cấu hình
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=oca11g; export ORACLE_HOSTNAME
ORACLE_UNQNAME=orcl; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ASM_HOME=$ORACLE_BASE/product/11.2.0/grid; export ASM_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$ASM_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
2. Cài đặt
a. Download các gói cài đặt cần thiết
Tải gói cài đạt Oracle Database tại trang chủ Oracle.
Sau khi tải xong, mount hoặc bỏ vào server cài đặt thông qua WinSCP. Ví dụ ở đây mình bỏ vào đường dẫn /u01/soft/ bằng WinSCP
Dùng lệnh unzip để xả nén 2 file
cd /u01/soft/
unzip linux_x32_11gR2_database_1of2.zip
unzip linux_x32_11gR2_database_2of2.zip
Giải nén xong được thư mục /database

b. Cài đặt Oracle Databse Software
Khởi động vncserver và kết nối vào server để cài đặt tương tự như hướng dẫn ở Phần I.
Chạy lệnh sau để tiến hành cài đặt bằng giao diện bằng user oracle
cd /u01/soft/database
./runInstaller
Giao diện cài đặt hiện ra, thực hiện theo từng bước sau

Bước 1: Bỏ tick phần "I wish to receive security updates via My Oracle Support", khỏi cần điền email luôn. Next.
Bước 1
Bước 2 chọn Install database software only
Bước 2
Bước 3 chọn Single instance database installation
Bước 3
Bước 4 là chọn ngôn ngữ, cái này khỏi cần hình minh họa
Bước 5 chọn bản Enterprise Edition
Bước 5
Bước 6 lựa chọn vị trí cài đặt, nhũng đường dẫn này cần phải giống như lúc cấu hình file .bash_profile ở bước trước khi cài đặt database ở trên.

Bước 6
 Bước 7 lựa chọn group như hình sau
Bước 7
Tiếp theo sẽ kiểm tra Prerequisite Checks, nếu báo lỗi gì thì cứ Ignore hết, ở đây mình không báo lỗi nên nó qua thẳng bước Summary như sau

Rồi, bấm Finish và đi pha ly cafe nữa chờ nó cài xong thì chạy script bằng lệnh Root, giống như lúc cài xong ASM ở phần I.
Sau khi chạy script xong, quay lại bấm OK để complete cài đặt Oracle Database Software

c. Tạo database sử dụng tool DBCA
Khởi động tool DBCA
su - oracle
source /home/oracle/.bash_profile
dbca
Đây là giao diện của DBCA.

Bước 1 chọn Create a Database
Bước 1
Bước 2 chọn General Purpose or Transaction Processing
Bước 2
Bước 3 chọn domain và SID cho database
Bước 3
Bước 4 cho mình lựa chọn Quản lý database thông qua Enterprise Manager - quản lý qua Web.
Bước 4
Bước 5 database này sẽ có 4 user mặc định, bước này thiết lập password chung cho 4 user.
Bước 5
Bước 6 xác định vị trí lưu database, có thể lưu trên File system hoặc trên ASM, nếu chọn trên ASM phải chọn thêm Disk group, ở đây mình chọn ASM, disk group là +DATA (được cài đặt ở phần I)
Bước 6
Bước 7 chỉ định disk group dùng cho Flash Recovery Area, một thành phần rất quan trọng của database. Ở đây mình dùng disk group +FRA đã tạo ở phần I.
Bước 7
Bước 8
Bước 9 bước này chỉ cần cấu hình chỗ Character để hỗ trợ tốt cho tiếng Việt là được.
Bước 9
Bước 10 Thông tin database storage
Bước 11 Finish để tạo database
Quá trình tạo database
Sau khi cài đặt thành công, ta có được thông tin sau của database vừa tạo

Xong rồi, bây giờ connect vào database để test thử thế nào
su - oracle
. oraenv
orcl
sqlplus / as sysdba
select username from dba_users;
Như vậy, đã cài xong ASM và Oracle database rồi, giờ tha hồ vọc.

Link tham khảo: