個人主頁:Guiat
歸屬專欄:Oracle
文章目錄
- 1. 安裝前的準備工作
- 1.1 硬件和系統要求
- 1.2 檢查系統環境
- 1.3 下載Oracle軟件
- 2. 系統配置
- 2.1 創建Oracle用戶和組
- 2.2 配置內核參數
- 2.3 配置用戶資源限制
- 2.4 安裝必要的軟件包
- 3. 目錄結構和環境變量
- 3.1 創建Oracle目錄結構
- 3.2 配置Oracle環境變量
- 4. Oracle軟件安裝
- 4.1 解壓Oracle安裝包
- 4.2 創建靜默安裝響應文件
- 4.3 執行靜默安裝
- 4.4 驗證軟件安裝
- 5. 創建數據庫
- 5.1 使用DBCA創建數據庫
- 圖形界面方式
- 靜默方式創建
- 5.2 手工創建數據庫(高級)
- 6. 網絡配置
- 6.1 配置監聽器
- 6.2 啟動監聽器
- 7. 數據庫配置和優化
- 7.1 基礎配置
- 7.2 創建應用用戶
- 8. 自動啟動配置
- 8.1 創建啟停腳本
- 8.2 配置系統服務
- 9. 安裝驗證
- 9.1 完整驗證腳本
- 9.2 性能測試
- 10. 常見問題解決
- 10.1 權限問題
- 10.2 內存優化
- 11. 日常維護
- 11.1 日常維護腳本
正文
說實話,Oracle數據庫的安裝看起來復雜,但只要按步驟來,其實沒那么難。這篇指南會帶你從零開始,完整地安裝一個Oracle 19c單實例數據庫。
1. 安裝前的準備工作
1.1 硬件和系統要求
在開始之前,咱們先確認一下服務器是否滿足Oracle的基本要求:
項目 | 最低要求 | 推薦配置 |
---|---|---|
內存 | 2GB | 8GB+ |
磁盤空間 | 15GB | 50GB+ |
CPU | 1核 | 4核+ |
操作系統 | RHEL/CentOS 7.6+ | RHEL/CentOS 8.x |
1.2 檢查系統環境
#!/bin/bash
# 系統環境檢查腳本echo "=== Oracle安裝前環境檢查 ==="# 檢查操作系統
echo "操作系統信息:"
cat /etc/redhat-release
uname -a# 檢查內存
echo -e "\n內存信息:"
free -h
total_mem=$(free | grep '^Mem:' | awk '{print $2}')
if [ $total_mem -gt 2097152 ]; thenecho "? 內存滿足要求"
elseecho "? 內存不足,需要至少2GB"
fi# 檢查磁盤空間
echo -e "\n磁盤空間:"
df -h
root_space=$(df / | tail -1 | awk '{print $4}' | sed 's/G//')
if [ ${root_space%.*} -gt 15 ]; thenecho "? 磁盤空間滿足要求"
elseecho "? 磁盤空間不足,需要至少15GB"
fi# 檢查hostname
echo -e "\n主機名配置:"
hostname
echo "請確保主機名已正確配置在/etc/hosts中"
1.3 下載Oracle軟件
從Oracle官網下載Oracle Database 19c:
- 文件名:
LINUX.X64_193000_db_home.zip
- 大小:約2.8GB
- 下載地址:https://www.oracle.com/database/technologies/oracle19c-linux-downloads.html
2. 系統配置
2.1 創建Oracle用戶和組
#!/bin/bash
# 創建Oracle安裝所需的用戶和組echo "創建Oracle用戶和組..."# 創建系統組
groupadd -g 54321 oinstall # Oracle庫存組
groupadd -g 54322 dba # DBA組
groupadd -g 54323 oper # 操作員組
groupadd -g 54324 backupdba # 備份DBA組
groupadd -g 54325 dgdba # Data Guard DBA組
groupadd -g 54326 kmdba # 密鑰管理DBA組
groupadd -g 54327 racdba # RAC DBA組# 創建oracle用戶
useradd -u 54321 -g oinstall \-G dba,oper,backupdba,dgdba,kmdba,racdba \-m -d /home/oracle \-s /bin/bash \oracle# 設置oracle用戶密碼
echo "請為oracle用戶設置密碼:"
passwd oracleecho "用戶和組創建完成!"
id oracle
2.2 配置內核參數
#!/bin/bash
# 配置Oracle所需的內核參數echo "配置內核參數..."# 備份原始配置
cp /etc/sysctl.conf /etc/sysctl.conf.backup# 添加Oracle推薦的內核參數
cat >> /etc/sysctl.conf << 'EOF'# Oracle 19c kernel parameters
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
EOF# 使參數生效
sysctl -pecho "內核參數配置完成!"
2.3 配置用戶資源限制
#!/bin/bash
# 配置oracle用戶的資源限制echo "配置用戶資源限制..."# 備份配置文件
cp /etc/security/limits.conf /etc/security/limits.conf.backup# 添加oracle用戶限制
cat >> /etc/security/limits.conf << 'EOF'# Oracle user limits
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
EOF# 配置PAM
if ! grep -q "pam_limits.so" /etc/pam.d/login; thenecho "session required pam_limits.so" >> /etc/pam.d/login
fiecho "用戶資源限制配置完成!"
2.4 安裝必要的軟件包
#!/bin/bash
# 安裝Oracle依賴的軟件包echo "安裝Oracle依賴包..."# RHEL/CentOS 7
if grep -q "release 7" /etc/redhat-release; thenyum install -y \binutils \compat-libcap1 \compat-libstdc++-33 \glibc \glibc-devel \ksh \libaio \libaio-devel \libX11 \libXau \libXi \libXtst \libgcc \libstdc++ \libstdc++-devel \libxcb \make \smartmontools \sysstat \unzip# RHEL/CentOS 8
elif grep -q "release 8" /etc/redhat-release; thendnf install -y \bc \binutils \glibc \glibc-devel \ksh \libaio \libaio-devel \libX11 \libXau \libXi \libXtst \libgcc \libstdc++ \libstdc++-devel \libxcb \make \smartmontools \sysstat \unzip
fiecho "依賴包安裝完成!"
3. 目錄結構和環境變量
3.1 創建Oracle目錄結構
#!/bin/bash
# 創建Oracle安裝目錄結構echo "創建Oracle目錄結構..."# 創建基礎目錄
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1 # Oracle軟件目錄
mkdir -p /u01/app/oraInventory # Oracle庫存目錄
mkdir -p /u01/oradata # 數據文件目錄
mkdir -p /u01/fast_recovery_area # 快速恢復區
mkdir -p /u01/scripts # 腳本目錄# 設置目錄權限
chown -R oracle:oinstall /u01
chmod -R 755 /u01echo "目錄結構創建完成!"
tree /u01 -L 3
3.2 配置Oracle環境變量
#!/bin/bash
# 配置oracle用戶環境變量echo "配置Oracle環境變量..."# 創建oracle用戶的環境配置文件
cat > /home/oracle/.bash_profile << 'EOF'
# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# Oracle Environment Variables
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib# Oracle客戶端設置
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'# 設置別名
alias ll='ls -la'
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'# 設置umask
umask 022# 自定義提示符
export PS1='[\u@\h \W]$ 'echo "Oracle環境已加載 - SID: $ORACLE_SID"
EOF# 設置文件權限
chown oracle:oinstall /home/oracle/.bash_profile
chmod 644 /home/oracle/.bash_profileecho "環境變量配置完成!"
echo "請使用 'su - oracle' 切換到oracle用戶測試環境"
4. Oracle軟件安裝
4.1 解壓Oracle安裝包
#!/bin/bash
# 解壓Oracle安裝包echo "解壓Oracle安裝包..."# 切換到oracle用戶執行
su - oracle << 'EOF'# 檢查安裝包
if [ ! -f "/tmp/LINUX.X64_193000_db_home.zip" ]; thenecho "? 找不到安裝包,請將文件放在/tmp目錄下"exit 1
fi# 進入Oracle Home目錄
cd $ORACLE_HOME# 解壓安裝包(這可能需要幾分鐘)
echo "正在解壓,請稍候..."
unzip -q /tmp/LINUX.X64_193000_db_home.zip# 檢查解壓結果
if [ -f "$ORACLE_HOME/runInstaller" ]; thenecho "? 解壓成功!"ls -la $ORACLE_HOME | head -10
elseecho "? 解壓失敗"exit 1
fiEOFecho "Oracle軟件包解壓完成!"
4.2 創建靜默安裝響應文件
#!/bin/bash
# 創建Oracle靜默安裝響應文件echo "創建靜默安裝響應文件..."cat > /tmp/db_install.rsp << 'EOF'
####################################################################
## Oracle Database 19c Silent Installation Response File
##################################################################### 安裝選項 - 僅安裝軟件
oracle.install.option=INSTALL_DB_SWONLY# 主機名
ORACLE_HOSTNAME=localhost.localdomain# Oracle Inventory組
UNIX_GROUP_NAME=oinstall# Oracle Inventory目錄
INVENTORY_LOCATION=/u01/app/oraInventory# Oracle Home目錄
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1# Oracle Base目錄
ORACLE_BASE=/u01/app/oracle# 安裝版本 - 企業版
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# 關閉安全更新
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
EOF# 設置文件權限
chown oracle:oinstall /tmp/db_install.rsp
chmod 600 /tmp/db_install.rspecho "響應文件創建完成:/tmp/db_install.rsp"
4.3 執行靜默安裝
#!/bin/bash
# 執行Oracle軟件靜默安裝echo "開始Oracle軟件安裝..."# 切換到oracle用戶執行安裝
su - oracle << 'EOF'echo "執行靜默安裝,這將需要10-20分鐘..."# 進入Oracle Home目錄
cd $ORACLE_HOME# 執行安裝程序
./runInstaller -silent \-responseFile /tmp/db_install.rsp \-waitforcompletion \-ignorePrereq# 檢查安裝結果
if [ $? -eq 0 ]; thenecho "? Oracle軟件安裝完成"
elseecho "? 安裝可能有問題,請檢查日志"find /u01/app/oraInventory/logs -name "*.log" -type f
fiEOFecho ""
echo "?? 現在需要以root用戶執行以下腳本:"
echo "1. /u01/app/oraInventory/orainstRoot.sh"
echo "2. /u01/app/oracle/product/19.0.0/dbhome_1/root.sh"read -p "是否現在執行?(y/n): " execute_root
if [ "$execute_root" = "y" ]; thenecho "執行root腳本..."/u01/app/oraInventory/orainstRoot.sh/u01/app/oracle/product/19.0.0/dbhome_1/root.shecho "? root腳本執行完成"
fi
4.4 驗證軟件安裝
#!/bin/bash
# 驗證Oracle軟件安裝echo "驗證Oracle軟件安裝..."su - oracle << 'EOF'echo "1. 檢查Oracle版本:"
$ORACLE_HOME/bin/sqlplus -vecho -e "\n2. 檢查OPatch版本:"
$ORACLE_HOME/OPatch/opatch versionecho -e "\n3. 列出已安裝組件:"
$ORACLE_HOME/OPatch/opatch lsinventory -summaryecho -e "\n4. 檢查監聽器:"
$ORACLE_HOME/bin/lsnrctl versionEOFecho "Oracle軟件安裝驗證完成!"
5. 創建數據庫
5.1 使用DBCA創建數據庫
圖形界面方式
#!/bin/bash
# 啟動DBCA圖形界面echo "啟動DBCA創建數據庫..."su - oracle << 'EOF'# 檢查是否支持圖形界面
if [ -z "$DISPLAY" ]; thenecho "警告:未設置DISPLAY變量"echo "如果是遠程連接,請使用: ssh -X oracle@hostname"
fi# 啟動DBCA
echo "啟動DBCA..."
$ORACLE_HOME/bin/dbcaEOF
靜默方式創建
#!/bin/bash
# 創建DBCA靜默響應文件cat > /tmp/dbca_create.rsp << 'EOF'
####################################################################
## DBCA Silent Database Creation Response File
##################################################################### 全局數據庫名稱
gdbName=orcl.localdomain# SID名稱
sid=orcl# 數據庫配置類型
databaseConfigType=SI# 創建為容器數據庫
createAsContainerDatabase=false# 存儲類型
storageType=FS# 數據文件位置
datafileDestination=/u01/oradata# 快速恢復區
recoveryAreaDestination=/u01/fast_recovery_area
recoveryAreaSize=4096# 內存設置(單位:MB)
totalMemory=2048
automaticMemoryManagement=true# 字符集
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16# 數據庫密碼(生產環境請使用復雜密碼)
sysPassword=Oracle123
systemPassword=Oracle123# 不安裝示例Schema
sampleSchema=false# 不配置自動備份
automaticBackup=false# 數據庫選項
dbOptions=JSERVER:true,ORACLE_TEXT:true,IMEDIA:false,CWMLITE:true,SPATIAL:true,OMS:false,APEX:false,DV:false# 監聽器
listeners=LISTENER
EOF# 設置權限
chown oracle:oinstall /tmp/dbca_create.rsp
chmod 600 /tmp/dbca_create.rspecho "DBCA響應文件創建完成"
執行數據庫創建:
#!/bin/bash
# 執行靜默數據庫創建echo "開始創建Oracle數據庫,這可能需要30-60分鐘..."su - oracle << 'EOF'# 執行DBCA靜默創建
$ORACLE_HOME/bin/dbca -silent \-createDatabase \-responseFile /tmp/dbca_create.rspif [ $? -eq 0 ]; thenecho "? 數據庫創建成功!"# 驗證數據庫sqlplus -s / as sysdba << SQLSELECT name, open_mode FROM v\$database;SELECT instance_name, status FROM v\$instance;SQLelseecho "? 數據庫創建失敗"echo "檢查日志:"find $ORACLE_BASE/cfgtoollogs/dbca -name "*.log" -type f
fiEOF
5.2 手工創建數據庫(高級)
如果需要完全自定義,可以手工創建:
-- 手工創建數據庫腳本
-- create_db_manual.sql-- 1. 創建參數文件
CREATE SPFILE FROM PFILE='/tmp/initorcl.ora';-- 2. 啟動到NOMOUNT狀態
STARTUP NOMOUNT;-- 3. 創建數據庫
CREATE DATABASE orclUSER SYS IDENTIFIED BY Oracle123USER SYSTEM IDENTIFIED BY Oracle123LOGFILE GROUP 1 ('/u01/oradata/orcl/redo01.log') SIZE 100M,GROUP 2 ('/u01/oradata/orcl/redo02.log') SIZE 100M,GROUP 3 ('/u01/oradata/orcl/redo03.log') SIZE 100MMAXLOGFILES 16MAXLOGMEMBERS 3DATAFILE '/u01/oradata/orcl/system01.dbf' SIZE 700M AUTOEXTEND ONSYSAUX DATAFILE '/u01/oradata/orcl/sysaux01.dbf' SIZE 550M AUTOEXTEND ONDEFAULT TABLESPACE usersDATAFILE '/u01/oradata/orcl/users01.dbf' SIZE 500M AUTOEXTEND ONDEFAULT TEMPORARY TABLESPACE tempTEMPFILE '/u01/oradata/orcl/temp01.dbf' SIZE 100M AUTOEXTEND ONUNDO TABLESPACE undotbs1DATAFILE '/u01/oradata/orcl/undotbs01.dbf' SIZE 200M AUTOEXTEND ONCHARACTER SET AL32UTF8NATIONAL CHARACTER SET AL16UTF16;-- 4. 運行數據字典腳本
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
6. 網絡配置
6.1 配置監聽器
#!/bin/bash
# 配置Oracle監聽器echo "配置Oracle監聽器..."su - oracle << 'EOF'# 創建網絡配置目錄
mkdir -p $ORACLE_HOME/network/admin# 創建listener.ora
cat > $ORACLE_HOME/network/admin/listener.ora << 'LISTENER_EOF'
# Oracle Net Listener ConfigurationLISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)))ADR_BASE_LISTENER = /u01/app/oracle
LISTENER_EOF# 創建tnsnames.ora
cat > $ORACLE_HOME/network/admin/tnsnames.ora << 'TNS_EOF'
# Oracle Net Service NamesORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))
TNS_EOFecho "網絡配置文件創建完成"EOF
6.2 啟動監聽器
#!/bin/bash
# 啟動并測試監聽器echo "啟動Oracle監聽器..."su - oracle << 'EOF'# 啟動監聽器
lsnrctl start# 檢查監聽器狀態
echo -e "\n監聽器狀態:"
lsnrctl status# 測試連接
echo -e "\n測試連接:"
tnsping orclEOF
7. 數據庫配置和優化
7.1 基礎配置
-- 數據庫基礎配置腳本
-- basic_config.sql-- 連接數據庫
CONNECT / AS SYSDBA-- 設置歸檔模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;-- 創建用戶表空間
CREATE TABLESPACE app_data
DATAFILE '/u01/oradata/orcl/app_data01.dbf'
SIZE 1G AUTOEXTEND ON;-- 配置自動統計信息收集
BEGINDBMS_SCHEDULER.ENABLE('SYS.GATHER_STATS_JOB');
END;
/-- 設置密碼策略
ALTER PROFILE DEFAULT LIMITPASSWORD_LIFE_TIME 90PASSWORD_GRACE_TIME 7FAILED_LOGIN_ATTEMPTS 5PASSWORD_LOCK_TIME 1/24;-- 啟用審計
ALTER SYSTEM SET AUDIT_TRAIL=DB SCOPE=SPFILE;-- 查看配置
SELECT name, value FROM v$parameter
WHERE name IN ('db_name', 'log_mode', 'memory_target');EXIT;
7.2 創建應用用戶
-- 創建應用用戶腳本
-- create_app_user.sqlCONNECT / AS SYSDBA-- 創建應用用戶
CREATE USER appuser IDENTIFIED BY App123
DEFAULT TABLESPACE app_data
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON app_data;-- 授權
GRANT CONNECT, RESOURCE TO appuser;
GRANT CREATE VIEW, CREATE SYNONYM TO appuser;-- 驗證用戶
SELECT username, default_tablespace, account_status
FROM dba_users
WHERE username = 'APPUSER';EXIT;
8. 自動啟動配置
8.1 創建啟停腳本
#!/bin/bash
# Oracle數據庫啟停腳本cat > /u01/scripts/oracle_service.sh << 'EOF'
#!/bin/bash
# Oracle數據庫服務管理腳本# 設置環境變量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH# 啟動數據庫
start_oracle() {echo "啟動Oracle監聽器..."lsnrctl startecho "啟動Oracle數據庫..."sqlplus -s / as sysdba << SQLSTARTUP;EXIT;
SQLecho "Oracle數據庫啟動完成"
}# 停止數據庫
stop_oracle() {echo "停止Oracle數據庫..."sqlplus -s / as sysdba << SQLSHUTDOWN IMMEDIATE;EXIT;
SQLecho "停止Oracle監聽器..."lsnrctl stopecho "Oracle數據庫停止完成"
}# 檢查狀態
status_oracle() {echo "=== Oracle狀態檢查 ==="echo "監聽器狀態:"lsnrctl statusecho -e "\n數據庫狀態:"sqlplus -s / as sysdba << SQLSELECT instance_name, status FROM v\$instance;SELECT name, open_mode FROM v\$database;EXIT;
SQL
}# 主程序
case "$1" instart)start_oracle;;stop)stop_oracle;;restart)stop_oraclesleep 5start_oracle;;status)status_oracle;;*)echo "用法: $0 {start|stop|restart|status}"exit 1;;
esac
EOF# 設置權限
chown oracle:oinstall /u01/scripts/oracle_service.sh
chmod 755 /u01/scripts/oracle_service.shecho "Oracle服務腳本創建完成"
8.2 配置系統服務
#!/bin/bash
# 創建Oracle系統服務cat > /etc/systemd/system/oracle.service << 'EOF'
[Unit]
Description=Oracle Database
After=network.target[Service]
Type=oneshot
User=oracle
Group=oinstall
ExecStart=/u01/scripts/oracle_service.sh start
ExecStop=/u01/scripts/oracle_service.sh stop
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
EOF# 重新載入systemd
systemctl daemon-reload# 啟用服務
systemctl enable oracle.serviceecho "Oracle系統服務配置完成"
echo "使用命令:"
echo " systemctl start oracle # 啟動"
echo " systemctl stop oracle # 停止"
echo " systemctl status oracle # 狀態"
9. 安裝驗證
9.1 完整驗證腳本
#!/bin/bash
# Oracle安裝完整驗證echo "=== Oracle 19c 安裝驗證 ==="su - oracle << 'EOF'echo "1. 環境變量檢查:"
echo " ORACLE_BASE: $ORACLE_BASE"
echo " ORACLE_HOME: $ORACLE_HOME"
echo " ORACLE_SID: $ORACLE_SID"echo -e "\n2. Oracle軟件版本:"
$ORACLE_HOME/bin/sqlplus -vecho -e "\n3. 數據庫連接測試:"
sqlplus -s / as sysdba << SQL
SELECT 'Database: ' || name || ' Status: ' || open_mode FROM v\$database;
SELECT 'Instance: ' || instance_name || ' Status: ' || status FROM v\$instance;
SELECT 'Started: ' || TO_CHAR(startup_time, 'YYYY-MM-DD HH24:MI:SS') FROM v\$instance;
EXIT;
SQLecho -e "\n4. 監聽器狀態:"
lsnrctl status | grep -E "(Listening|Service)"echo -e "\n5. 表空間檢查:"
sqlplus -s / as sysdba << SQL
COL TABLESPACE_NAME FORMAT A15
COL SIZE_MB FORMAT 999,999
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS size_mb
FROM dba_data_files
GROUP BY tablespace_name;
EXIT;
SQLEOFecho -e "\n6. 系統進程:"
ps -ef | grep -E "(ora_|tnslsnr)" | grep -v grep | wc -l | \awk '{print " Oracle進程數: " $1}'echo -e "\n7. 端口監聽:"
netstat -tuln | grep :1521 > /dev/null && \echo " ? 1521端口監聽正常" || \echo " ? 1521端口未監聽"echo -e "\n=== 驗證完成 ==="
9.2 性能測試
#!/bin/bash
# 簡單性能測試echo "執行Oracle性能測試..."su - oracle << 'EOF'sqlplus / as sysdba << SQL-- 創建測試表
CREATE TABLE test_performance (id NUMBER PRIMARY KEY,name VARCHAR2(100),created_date DATE DEFAULT SYSDATE
);-- 插入測試數據
BEGINFOR i IN 1..1000 LOOPINSERT INTO test_performance (id, name) VALUES (i, 'Test Record ' || i);END LOOP;COMMIT;
END;
/-- 查詢測試
SET TIMING ON
SELECT COUNT(*) FROM test_performance;
SELECT * FROM test_performance WHERE id BETWEEN 100 AND 200;
SET TIMING OFF-- 清理測試數據
DROP TABLE test_performance;EXIT;
SQLEOFecho "性能測試完成"
10. 常見問題解決
10.1 權限問題
#!/bin/bash
# 修復常見權限問題echo "修復Oracle權限問題..."# 修復目錄權限
chown -R oracle:oinstall /u01
find /u01/app/oracle -type d -exec chmod 755 {} \;
find /u01/app/oracle -type f -exec chmod 644 {} \;# 修復可執行文件權限
chmod 755 /u01/app/oracle/product/19.0.0/dbhome_1/bin/*
chmod 6751 /u01/app/oracle/product/19.0.0/dbhome_1/bin/oracleecho "權限修復完成"
10.2 內存優化
#!/bin/bash
# Oracle內存優化配置su - oracle << 'EOF'sqlplus / as sysdba << SQL-- 檢查當前內存設置
SELECT name, value FROM v$parameter
WHERE name LIKE '%memory%' OR name LIKE '%sga%' OR name LIKE '%pga%';-- 優化內存設置(根據服務器內存調整)
-- 假設服務器有8GB內存
ALTER SYSTEM SET MEMORY_TARGET=4G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=6G SCOPE=SPFILE;-- 重啟數據庫使參數生效
SHUTDOWN IMMEDIATE;
STARTUP;-- 驗證設置
SHOW PARAMETER MEMORY;EXIT;
SQLEOF
11. 日常維護
11.1 日常維護腳本
#!/bin/bash
# Oracle日常維護腳本cat > /u01/scripts/daily_maintenance.sh << 'EOF'
#!/bin/bash
# Oracle數據庫日常維護export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATHMAINT_LOG="/u01/scripts/maintenance_$(date +%Y%m%d).log"echo "=== Oracle日常維護 $(date) ===" >> $MAINT_LOG# 檢查數據庫狀態
echo "1. 數據庫狀態檢查:" >> $MAINT_LOG
sqlplus -s / as sysdba << SQL >> $MAINT_LOG
SELECT 'Database: ' || name || ' Mode: ' || open_mode FROM v\$database;
SELECT 'Instance: ' || instance_name || ' Status: ' || status FROM v\$instance;
EXIT;
SQL# 檢查表空間使用率
echo "2. 表空間使用率:" >> $MAINT_LOG
sqlplus -s / as sysdba << SQL >> $MAINT_LOG
SELECT tablespace_name,ROUND(used_percent, 1) AS used_pct
FROM dba_tablespace_usage_metrics
WHERE used_percent > 80;
EXIT;
SQL# 收集統計信息
echo "3. 收集統計信息:" >> $MAINT_LOG
sqlplus -s / as sysdba << SQL >> $MAINT_LOG
EXEC DBMS_STATS.GATHER_DATABASE_STATS(estimate_percent=>10, cascade=>TRUE);
EXIT;
SQLecho "維護完成" >> $MAINT_LOG
EOFchmod 755 /u01/scripts/daily_maintenance.sh
chown oracle:oinstall /u01/scripts/daily_maintenance.sh# 添加到crontab(每天凌晨2點執行)
(crontab -u oracle -l 2>/dev/null; echo "0 2 * * * /u01/scripts/daily_maintenance.sh") | crontab -u oracle -echo "日常維護腳本配置完成"
結語
感謝您的閱讀!期待您的一鍵三連!歡迎指正!