【Oracle】安裝單實例

在這里插入圖片描述

個人主頁: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的基本要求:

項目最低要求推薦配置
內存2GB8GB+
磁盤空間15GB50GB+
CPU1核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 "日常維護腳本配置完成"

結語
感謝您的閱讀!期待您的一鍵三連!歡迎指正!

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/82359.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82359.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82359.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

6年“豹變”,vivo S30系列引領手機進入場景“體驗定義”時代

出品 | 何璽 排版 | 葉媛 5月29日晚&#xff0c;備受用戶期待的vivo S30系列如約而至。 相比前幾代S系列產品&#xff0c;S30系列變化顯著&#xff0c;堪稱“豹變”。首先&#xff0c;其產品打造思路發生了質變&#xff0c;產品體驗更好&#xff0c;綜合競爭力更為強。其次&a…

線性動態規劃

具有「線性」階段劃分的動態規劃方法統稱為線性動態規劃&#xff08;簡稱為「線性 DP」&#xff09;&#xff0c;如下圖所示。 一、概念 如果狀態包含多個維度&#xff0c;但是每個維度上都是線性劃分的階段&#xff0c;也屬于線性 DP。比如背包問題、區間 DP、數位 DP 等都屬…

Rust 學習筆記:使用自定義命令擴展 Cargo

Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Rust 學習筆記&#xff1a;使用自定義命令擴展 Cargo Cargo 支持通過 $PATH 中的 cargo-something 形式的二進制文件拓展子命令&#xff0c;而無需修改 Cargo 本身。 …

NodeMediaEdge任務管理

NodeMediaEdge任務管理 簡介 NodeMediaEdge是一款部署在監控攝像機網絡前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http視頻流并使用rtmp/kmp推送到公網流媒體服務器的工具。 在未使用NodeMediaServer的情況下&#xff0c;或是對部分視頻流需要單獨推送的需求&#xff0c;也可…

蒲公英盒子連接問題debug

1、 現象描述 2、問題解決 上圖為整體架構圖&#xff0c;其中左邊一套硬件設備是放在機房&#xff0c;右邊是放在辦公室。左邊的局域網連接了可以訪問外網的路由器&#xff0c;利用蒲公英作為旁路路由將局域網暴露在外網環境下。 我需要通過蒲公英作為旁路路由來進行遠程訪問&…

Golang 依賴注入:構建松耦合架構的關鍵技術

依賴注入&#xff08;Dependency Injection, DI&#xff09; 是一種設計模式&#xff0c;用于實現控制反轉&#xff08;Inversion of Control, IoC&#xff09;&#xff0c;通過將依賴項的創建和管理交給外部組件&#xff0c;而不是在類或函數內部直接創建依賴項&#xff0c;從…

Transformer核心原理

簡介 在人工智能技術飛速發展的今天&#xff0c;Transformer模型憑借其強大的序列處理能力和自注意力機制&#xff0c;成為自然語言處理、計算機視覺、語音識別等領域的核心技術。本文將從基礎理論出發&#xff0c;結合企業級開發實踐&#xff0c;深入解析Transformer模型的原…

虛擬線程與消息隊列:Spring Boot 3.5 中異步架構的演進與選擇

企業級開發領域正在經歷一場翻天覆地的巨變&#xff0c;然而大多數開發者卻對此渾然不覺&#xff0c;完全沒有意識到。Spring Boot 3.5 帶來的革命性的虛擬線程 (Virtual Threads) 和增強的響應式能力&#xff0c;絕不僅僅是小打小鬧的增量改進——它們正在從根本上改變我們對異…

網絡編程(計算機網絡基礎)

認識網絡 1.網絡發展史 ARPnetA(阿帕網)->internet(因特網)->移動互聯網->物聯網 2.局域網與廣域網 局域網 概念&#xff1a;的縮寫是LAN&#xff08;local area network&#xff09;&#xff0c;顧名思義&#xff0c;是個本地的網絡&#xff0c;只能實現小范圍短距…

Windows Server部署Vue3+Spring Boot項目

在Windows Server 上部署Vue3 Spring Boot前后端分離項目的詳細步驟如下&#xff1a; 一、環境準備 安裝JDK 17 下載JDK MSI安裝包&#xff08;如Oracle JDK 或 OpenJDK&#xff09; 雙擊安裝&#xff0c;配置環境變量&#xff1a; JAVA_HOME&#xff1a;JDK安裝路徑&#xf…

CCF CSP 第37次(2025.03)(3_模板展開_C++)(哈希表+stringstream)

CCF CSP 第37次&#xff08;2025.03&#xff09;&#xff08;3_模板展開_C&#xff09; 解題思路&#xff1a;思路一&#xff08;哈希表stringstream&#xff09;&#xff1a; 代碼實現代碼實現&#xff08;思路一&#xff08;哈希表stringstream&#xff09;&#xff09;&…

數據安全管理進階:81頁 2024數據安全典型場景案例集【附全文閱讀】

《2024 數據安全典型場景案例集》聚焦政務數據安全&#xff0c;覆蓋數據細粒度治理、授權運營、接口安全、系統接入、批量數據共享、使用側監管、風險監測、賬號管控、第三方人員管理、密碼應用等十大典型場景&#xff0c;剖析各場景風險并提供技術方案&#xff0c;如基于 AI 的…

Leetcode 261. 以圖判樹

1.題目基本信息 1.1.題目描述 給定編號從 0 到 n - 1 的 n 個結點。給定一個整數 n 和一個 edges 列表&#xff0c;其中 edges[i] [ai, bi] 表示圖中節點 ai 和 bi 之間存在一條無向邊。 如果這些邊能夠形成一個合法有效的樹結構&#xff0c;則返回 true &#xff0c;否則返…

【ISAQB大綱解讀】LG 1-8:區分顯性陳述和隱性假設(R1)

軟件架構師&#xff1a; 應明確提出假設或先決條件&#xff0c;從而防止隱性假設 知道隱性假設可能會導致利益相關方之間的潛在誤解 1. 應明確提出假設或先決條件&#xff0c;防止隱性假設 為什么重要&#xff1f; 隱性假設是架構風險的溫床 例如&#xff1a;假設“所有服務都…

IT運維工具的選擇標準有哪些?

選擇IT運維工具時&#xff0c;可參考以下標準&#xff0c;確保工具適配業務需求且高效易用&#xff1a; 1. 明確業務需求與場景 ? 核心目標&#xff1a;根據運維場景&#xff08;如監控、自動化、安全等&#xff09;匹配工具功能。例如&#xff0c;監控大規模集群選Promethe…

MySQL 核心知識整理【一】

一、MySQL存儲引擎對比&#xff1a;InnoDB vs MyISAM 在使用MySQL時&#xff0c;選擇合適的存儲引擎對性能影響很大。最常見的兩個引擎是 InnoDB 和 MyISAM&#xff0c;它們各自的設計目標不同&#xff0c;適用場景也不一樣。 事務與數據安全性方面&#xff0c;InnoDB 支持事…

人工智能在智能制造業中的創新應用與未來趨勢

隨著工業4.0和智能制造的快速發展&#xff0c;人工智能&#xff08;AI&#xff09;技術正在深刻改變制造業的各個環節。從生產自動化到質量檢測&#xff0c;從供應鏈優化到設備維護&#xff0c;AI的應用不僅提高了生產效率&#xff0c;還提升了產品質量和企業競爭力。本文將探討…

arc3.2語言sort的時候報錯:(sort < `(2 9 3 7 5 1)) 需要寫成這種:(sort > (pair (list 3 2)))

arc語言sort的時候報錯&#xff1a;(sort < (2 9 3 7 5 1)) arc> (sort < (2 9 3 7 5 1)) Error: "set-car!: expected argument of type <pair>; given: 9609216" arc> (sort < (2 9 3 )) Error: "Function call on inappropriate object…

Ubuntu 24.04 LTS Chrome 中文輸入法(搜狗等)失效?一行命令解決

Ubuntu 24.04 LTS Chrome 中文輸入法&#xff08;搜狗等&#xff09;失效&#xff1f;一行命令解決 在 Ubuntu 24.04 LTS 中&#xff0c;如果你發現 Chrome 瀏覽器用不了搜狗輸入法或其他 Fcitx5 中文輸入法&#xff0c;可以試試下面的方法。 直接上解決方案&#xff1a; 打…

大模型前處理-CPU

前處理包含哪些流程 分詞 tokenizationembedding CPU可以做哪些優化 分詞 分詞在做什么&#xff1f; 什么是詞元化&#xff1f; 詞元化&#xff08;Tokenization&#xff09;是把一段自然語言文本拆分成更小的單元&#xff08;稱為“詞元”&#xff0c;即 Token&#xff0…