当前位置: 首页 > article >正文

【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 "日常维护脚本配置完成"

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

相关文章:

【Oracle】安装单实例

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 安装前的准备工作1.1 硬件和系统要求1.2 检查系统环境1.3 下载Oracle软件 2. 系统配置2.1 创建Oracle用户和组2.2 配置内核参数2.3 配置用户资源限制2.4 安装必要的软件包 3. 目录结构和环境变量3.1 创建Ora…...

C++测开,自动化测试,业务(第一段实习)

目录 &#x1f33c;前言 一&#xff0c;实习经历怎么写简历 &#x1f339;业务理解 &#x1f382;结构化表达 二&#xff0c;实习 &#x1f982;技术和流程卡点 &#x1f511;实习收获 / 代码风格 三&#xff0c;测试理论&#xff0c;用例设计&#xff0c;工具链 &…...

QT中更新或添加组件时出现“”qt操作至少需要一个处于启用状态的有效资料档案库“解决方法”

在MaintenanceTool.exe中点击下一步 第一个&#xff1a; 第二个&#xff1a; 第三个&#xff1a; 以上任意一个放入资料库中...

论文速读《UAV-Flow Colosseo: 自然语言控制无人机系统》

论文链接&#xff1a;https://arxiv.org/abs/2505.15725项目主页&#xff1a;https://prince687028.github.io/UAV-Flow/ 0. 简介 近年来&#xff0c;无人机技术蓬勃发展&#xff0c;但如何让无人机像智能助手一样理解并执行人类语言指令&#xff0c;仍是一个前沿挑战。现有研…...

ES6+中Promise 中错误捕捉详解——链式调用catch()或者async/await+try/catch

通过 unhandledrejection 捕捉未处理的 Promise 异常&#xff0c;手动将其抛出&#xff0c;最终让 window.onerror 捕捉&#xff0c;从而统一所有异常的处理逻辑 规范代码&#xff1a;catch&#xff08;onRejected&#xff09;、async...awaittry...catch 在 JavaScript 的 Pro…...

CDN安全加速:HTTPS加密最佳配置方案

CDN安全加速的HTTPS加密最佳配置方案需从证书管理、协议优化、安全策略到性能调优进行全链路设计&#xff0c;以下是核心实施步骤与注意事项&#xff1a; ​​一、证书配置与管理​​ ​​证书选择与格式​​ ​​证书类型​​&#xff1a;优先使用受信任CA机构颁发的DV/OV/EV证…...

解常微分方程组

Euler法 function euler_method % 参数设置 v_missile 450; % 导弹速度 km/h v_enemy 90; % 敌艇速度 km/h % 初始条件 x0 0; % 导弹初始位置 x y0 0; % 导弹初始位置 y xe0 120; % 敌艇初始位置 y t0 0; % 初始时间 % 时间步长和总时间 dt 0.01; % 时间步长 t_final …...

C++实现汉诺塔游戏自动完成

目录 一、汉诺塔的规则二、数学递归推导式三、步骤实现(一)汉诺塔模型(二)递归实现(三)显示1.命令行显示2.SDL图形显示 四、处理用户输入及SDL环境配置五、总结六、源码下载 一、汉诺塔的规则 游戏由3根柱子和若干大小不一的圆盘组成&#xff0c;初始状态下&#xff0c;所有的…...

在 ABP VNext 中集成 Serilog:打造可观测、结构化日志系统

&#x1f680; 在 ABP VNext 中集成 Serilog&#xff1a;打造可观测、结构化日志系统 &#x1f4da; 目录 &#x1f680; 在 ABP VNext 中集成 Serilog&#xff1a;打造可观测、结构化日志系统1. 为什么要使用结构化日志&#xff1f; &#x1f914;2. 核心集成步骤 &#x1f6e…...

pikachu靶场通关笔记07 XSS关卡03-存储型XSS

目录 一、XSS 二、存储型XSS 三、源码分析 四、渗透实战 1、输入mooyuan试一试 2、注入Payload 3、查看数据库 4、再次进入留言板页面 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关&#xff09;渗透集合&#xff0c;通过对XSS关卡源码的代码审计找到XSS风险的…...

GitLab CI、GitHub Actions和Jenkins进行比较

特性/工具JenkinsGitLab CIGitHub Actions架构设计哲学Master/Agent分布式架构&#xff0c;通过插件扩展功能代码与CI/CD强耦合&#xff0c;内置Git仓库&#xff0c;基于Runner注册机制事件驱动&#xff0c;与GitHub深度集成&#xff0c;基于虚拟机的Job执行单元核心运行机制支…...

strcat及其模拟实现

#define _CRT_SECURE_NO_WARNINGS strcat 追加字符串 str "string"&#xff08;字符串&#xff09; cat "concatenate"&#xff08;连接 / 追加&#xff09; char* strcat(char* destination, const char* source); strcat的应用 方法一&#xff…...

OpenCV CUDA模块直方图计算------用于在 GPU 上执行对比度受限的自适应直方图均衡类cv::cuda::CLAHE

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::CLAHE 是 OpenCV 的 CUDA 模块中提供的一个类&#xff0c;用于在 GPU 上执行对比度受限的自适应直方图均衡&#xff08;Contrast Limi…...

华为OD机试真题——矩形绘制(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代

通义实验室的自然语言智能团队&#xff0c;凭借深厚的技术积累与创新精神&#xff0c;成功研发并开源了视觉感知多模态 RAG 推理框架 VRAG-RL&#xff0c;为 AI 在复杂视觉信息处理领域带来了重大突破。 传统 RAG 方法的局限 传统的检索增强型生成&#xff08;RAG&#xff0…...

爬虫入门:从基础到实战全攻略

&#x1f9e0; 一、爬虫基础概念 1.1 爬虫定义 爬虫&#xff08;Web Crawler&#xff09;是模拟浏览器行为&#xff0c;自动向服务器发送请求并获取响应数据的一种程序。主要用于从网页中提取结构化数据&#xff0c;供后续分析、展示或存储使用。 1.2 爬虫特点 数据碎片化&…...

qemu安装risc-V 64

参考这篇文章https://developer.aliyun.com/article/1323996&#xff0c;其中在wsl下面安装可能会报错环境变量中有空格。 # clean_path.sh#!/bin/bash# 备份旧 PATH OLD_PATH"$PATH"# 过滤掉包含空格、制表符、换行的路径 CLEAN_PATH"" IFS: read -ra PA…...

JDBC连不上mysql:Unable to load authentication plugin ‘caching_sha2_password‘.

最近为一个spring-boot项目下了mysql-9.3.0&#xff0c;结果因为mysql版本太新一直报错连不上。 错误如下&#xff1a; 2025-06-01 16:19:43.516 ERROR 22088 --- [http-nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispat…...

AsyncIOScheduler与BackgroundScheduler的线程模型对比

1. BackgroundScheduler的线程机制‌ ‌多线程模型‌&#xff1a;BackgroundScheduler基于线程池执行任务&#xff0c;默认通过ThreadPoolExecutor创建独立线程处理任务&#xff0c;每个任务运行在单独的线程中&#xff0c;主线程不会被阻塞。‌适用场景‌&#xff1a;适合同步…...

Python+MongoDb使用手册(精简)

这里是学了下面链接的内容&#xff0c;加上一些自己学习的内容综合的&#xff0c;大家也可以去看看这篇文章&#xff0c;写的特别好 【python】在Python中操作MongoDB的详细用法教程与实战案例分享_python轻松入门&#xff0c;基础语法到高阶实战教学-CSDN专栏 1 库&#xff1…...

前端面经 协商缓存和强缓存

HHTTPTTP缓存 协商缓存和强缓存 核心区别是否向服务器发起请求验证资源过期 强缓存 浏览器直接读取本地缓存,不发请求 HTTP响应头 Cache-Control:max-age3600资源有效期 Expires优先级低 如果有效浏览器返回200(浏览器换伪造的200) 应用静态资源 协商缓存 OK如果 1强缓…...

MacOS安装Docker Desktop并汉化

1. 安装Docker Desktop 到Docker Desktop For Mac下载对应系统的Docker Desktop 安装包&#xff0c;下载后安装&#xff0c;没有账号需要注册&#xff0c;然后登陆即可。 2. 汉化 前往汉化包下载链接下载对应系统的.asar文件 然后将安装好的文件覆盖原先的文件app.asar文件…...

Centos系统搭建主备DNS服务

目录 一、主DNS服务器配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建正向区域文件 4.创建区域数据文件 5.检查配置语法并重启服务 二、从DNS服务配置 1.安装 BIND 软件包 2.配置主配置文件 3.创建缓存目录 4.启动并设置开机自启 一、主DNS服务器配置 1.安装 BIN…...

VUE项目部署IIS服务器手册

IIS部署Vue项目完整手册 &#x1f4cb; 目录 基础概念准备工作Vue项目构建web.config详解IIS部署步骤不同场景配置常见问题实用配置模板 基础概念 Vue单页应用&#xff08;SPA&#xff09;工作原理 重要理解&#xff1a;Vue项目是单页应用&#xff0c;这意味着&#xff1a;…...

使用 HTML + JavaScript 实现在线考试系统

在现代的在线教育平台中&#xff0c;在线考试系统是不可或缺的一部分。本文将通过一个完整的示例&#xff0c;演示如何使用 HTML、CSS 和 JavaScript 构建一个支持多种题型的在线考试系统。 效果演示 项目概述 本项目主要包含以下核心功能&#xff1a; 支持4种常见题型&…...

谷歌工作自动化——仙盟大衍灵机——仙盟创梦IDE

下载地址 https://chromewebstore.google.com/detail/selenium-ide/mooikfkahbdckldjjndioackbalphokd https://chrome.zzzmh.cn/info/mooikfkahbdckldjjndioackbalphokd...

嵌入式(C语言篇)Day13

嵌入式Day13 一段话总结 文档主要介绍带有头指针和尾指针的单链表的实现及操作&#xff0c;涵盖创建、销毁、头插、尾插、按索引/数据增删查、遍历等核心操作&#xff0c;强调头插/尾插时间复杂度为O(1)&#xff0c;按索引/数据操作需遍历链表、时间复杂度为O(n)&#xff0c;并…...

Oracle 的V$LOCK 视图详解

Oracle 的V$LOCK 视图详解 V$LOCK 是 Oracle 数据库中最重要的动态性能视图之一&#xff0c;用于显示当前数据库中锁的持有和等待情况。 一、V$LOCK 视图结构 列名数据类型描述SIDNUMBER持有或等待锁的会话标识符TYPEVARCHAR2(2)锁类型标识符ID1NUMBER锁标识符1&#xff08;…...

秒杀系统—1.架构设计和方案简介

大纲 1.秒杀系统的方案设计要点 2.秒杀系统的数据 页面 接口的处理方案 3.秒杀系统的负载均衡方案底层相关 4.秒杀系统的限流机制和超卖问题处理 5.秒杀系统的异步下单和高可用方案 1.秒杀系统的方案设计要点 (1)秒杀促销活动的数据处理 (2)秒杀促销活动的页面处理 (…...

基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)

目录 一&#xff0c;生成式自监督学习 1.1 简介 1.2 核心思想 1.3 常见算法 1.3.1 自动编码器&#xff08;Autoencoder&#xff09; 1.3.2 生成对抗网络&#xff08;GANs&#xff09; 1.3.3 变分自编码器&#xff08;VAE&#xff09; 1.3.4 Transformer-based 模型&…...