Oracle DB 21c Installation trên Oracle Linux

Oracle 21c là phiên bản hỗ trợ kiến trúc đa tenant (CDB/PDB), xử lý dữ liệu lớn, AI/ML tích hợp, JSON native, blockchain tables và nhiều tính năng tối ưu cho môi trường cloud cũng như on-premise.
Oracle Database 21c là phiên bản đầu tiên định hướng chỉ hỗ trợ Multi-tenant (CDB/PDB) (20c không phát hành chính thức rộng rãi). Trong phát triển phần mềm, một sản phẩm thường đi qua các giai đoạn Alpha → Beta → Release trước khi sử dụng chính thức. Với Oracle Database, ngoài chu kỳ phát hành này, Oracle còn phân nhóm release theo 2 khái niệm:
+ Long Term Release (LTR): Phiên bản ổn định cao, phù hợp triển khai dài hạn. Ví dụ: 11.2, 12.1, 19c.
+ Innovation Release: Phiên bản tập trung nhiều tính năng mới, mức độ ổn định và vòng đời hỗ trợ thường ngắn hơn LTR. Ví dụ: 11.1, 18c, 21c.
Từ các phân tích trên, quan điểm cá nhân: Oracle 21c phù hợp cho DEV/POC/lab, nghiên cứu và học tập hơn là môi trường production. Oracle 19c vẫn là lựa chọn tối ưu cho production ở thời điểm hiện tại.
Mục tiêu của tài liệu này là hướng dẫn triển khai Oracle Database 21c trên Oracle Linux theo quy trình chuẩn, nhằm phục vụ nhu cầu DEV/POC/Lab (nghiên cứu, học tập, thử nghiệm tính năng mới). Việc cài đặt đảm bảo hệ thống hoạt động ổn định, kết nối được từ xa, quản trị thuận tiện và tuân thủ các yêu cầu cấu hình cơ bản của Oracle.
1. Chuẩn bị hệ điều hành
1.1. Set hostname + /etc/hosts
    hostnamectl set-hostname ol21c
    cat <<EOF | sudo tee -a /etc/hosts
    127.0.0.1   ol21c localhost
    EOF
1.2. Tắt/giảm can thiệp security để dễ cài đặt
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
1.3. Cài gói prerequisites
Oracle Linux có gói dựng sẵn cho Oracle DB: sudo dnf -y install oracle-database-preinstall-21c
Gói này tự tạo user/group (oracle/oinstall/dba…), set sysctl, limits,… Nếu bạn dùng OL7 thì thay dnf bằng yum.
1.4. Tạo thư mục Oracle + phân quyền
    sudo mkdir -p /u01/app/oracle/product/21c/dbhome_1
    sudo mkdir -p /u01/app/oraInventory
    sudo mkdir -p /u01/oradata
    sudo chown -R oracle:oinstall /u01
    sudo chmod -R 775 /u01
2. Cấu hình môi trường cho user oracle
Đăng nhập oracle rồi tạo file profile:
    sudo su - oracle
    cat <<'EOF' >> ~/.bash_profile
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=/u01/app/oracle/product/21c/dbhome_1
    export ORACLE_SID=ORCL
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    umask 022
    EOF

    source ~/.bash_profile
3. Upload bộ cài & cài Oracle Software (runInstaller)
3.1. Giải nén bộ cài vào ORACLE_HOME
Giả sử bạn có file zip Oracle 21c Linux x86-64 (đã tải sẵn):
    cd $ORACLE_HOME
    unzip /path/to/LINUX.X64_213000_db_home.zip
3.2. Cài silent (khuyến nghị cho server)
Tạo response file nhanh:
    cat > /tmp/db21c.rsp <<EOF
    oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v21.0.0
    oracle.install.option=INSTALL_DB_SWONLY
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/u01/app/oraInventory
    ORACLE_HOME=$ORACLE_HOME
    ORACLE_BASE=$ORACLE_BASE
    oracle.install.db.InstallEdition=EE
    oracle.install.db.OSDBA_GROUP=dba
    oracle.install.db.OSOPER_GROUP=oper
    oracle.install.db.OSBACKUPDBA_GROUP=backupdba
    oracle.install.db.OSDGDBA_GROUP=dgdba
    oracle.install.db.OSKMDBA_GROUP=kmdba
    oracle.install.db.OSRACDBA_GROUP=racdba
    oracle.install.db.rootconfig.executeRootScript=false
    EOF
Chạy cài:
    cd $ORACLE_HOME
    ./runInstaller -silent -responseFile /tmp/db21c.rsp -ignorePrereq -waitforcompletion
Sau khi xong, chạy 2 script bằng quyền root (nó sẽ báo đường dẫn chính xác):
    exit
    sudo /u01/app/oraInventory/orainstRoot.sh
    sudo /u01/app/oracle/product/21c/dbhome_1/root.sh
    sudo su - oracle
4. Tạo Database bằng DBCA (silent)
Tạo DB dạng CDB + PDB (chuẩn 21c):

    dbca -silent -createDatabase \
      -templateName General_Purpose.dbc \
      -gdbname ORCL -sid ORCL \
      -createAsContainerDatabase true \
      -numberOfPDBs 1 -pdbName PDB1 \
      -characterSet AL32UTF8 \
      -sysPassword 'Sys#123456' \
      -systemPassword 'Sys#123456' \
      -pdbAdminPassword 'Pdb#123456' \
      -datafileDestination /u01/oradata \
      -storageType FS \
      -memoryMgmtType auto_sga \
      -totalMemory 2048 \
      -emConfiguration NONE \
      -redoLogFileSize 200
5. Listener + tnsnames + bật autostart
5.1. Listener (thường DBCA tạo luôn). Kiểm tra: lsnrctl status
Nếu cần tạo listener nhanh: netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
5.2. Bật khởi động DB khi boot
Sửa /etc/oratab (root hoặc sudo):
    vi /etc/oratab
    orcl:/u01/app/oracle/product/21c/dbhome_1:Y

    sudo sed -i 's/^\(ORCL:.*\):N$/\1:Y/' /etc/oratab
Bật service oracle-database (trên OL thường có sẵn script dbstart/dbshut):
    sudo tee /etc/systemd/system/oracle-db.service >/dev/null <<'EOF'
    [Unit]
    Description=Oracle Database 21c
    After=network.target

    [Service]
    Type=forking
    User=oracle
    Group=oinstall
    ExecStart=/u01/app/oracle/product/21c/dbhome_1/bin/dbstart /u01/app/oracle/product/21c/dbhome_1
    ExecStop=/u01/app/oracle/product/21c/dbhome_1/bin/dbshut /u01/app/oracle/product/21c/dbhome_1
    Restart=no
    RemainAfterExit=yes

    [Install]
    WantedBy=multi-user.target
    EOF

    sudo systemctl daemon-reload
    sudo systemctl enable --now oracle-db.service
    sudo systemctl status oracle-db.service

dbstart/dbshut dựa vào /etc/oratab, nên nhớ set :Y.
6. Mở port tường lửa (1521) + kiểm tra kết nối
    sudo firewall-cmd --permanent --add-port=1521/tcp
    sudo firewall-cmd --reload
Test local:
    sqlplus / as sysdba
    select name, open_mode from v$database;
    show pdbs;
Test remote: Trên client dùng tnsnames.ora hoặc EZCONNECT:
    sqlplus system@//<IP-SERVER>:1521/ORCL
    sqlplus pdbadmin@//<IP-SERVER>:1521/PDB1