首页 > 数据库 > Oracle > 入门-oracle19c静默安装
装数据库环境属于基本功了,我也梳理下oracle数据库的安装,加深理解。
centos7
oracle安装包:LINUX.X64_193000_db_home.zip
┌─────────────────────────────────────────────────────────────┐ │ 阶段一:系统准备(root用户执行) │ ├─────────────────────────────────────────────────────────────┤ │ 1. 安装依赖包(rpm.sh) │ │ 2. 设置主机名(host.sh) │ │ 3. 创建用户和组(user.sh) │ │ 4. 配置内核参数(ctrl.sh) │ │ 5. 配置资源限制(limit.sh) │ │ 6. 创建目录结构(dir.sh) │ │ 7. 配置环境变量(env.sh) │ └─────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ 阶段二:软件安装(oracle用户执行) │ ├─────────────────────────────────────────────────────────────┤ │ 1. 安装数据库软件(db_install.sh) │ │ 2. 配置网络监听(netca.sh) │ │ 3. 创建数据库实例(dbca.sh) │ └─────────────────────────────────────────────────────────────┘
rpm.sh
yum install -y readline readline-devel zlib zlib-devel vim tree net-tools unzip rlwrap yum -y install compat-libcap1 libstdc++-devel gcc-c++ glibc-devel-2.17 libaio-devel compat-libstdc++-33-3.2.3 compat-libstdc++
host.sh
hostnamectl set-hostname prod-oracle-111
user.sh
# 1. 先创建所有必要的组 (必须先于用户创建) /usr/sbin/groupadd -g 54321 oinstall /usr/sbin/groupadd -g 5001 dba /usr/sbin/groupadd -g 5002 asmdba /usr/sbin/groupadd -g 5003 backupdba /usr/sbin/groupadd -g 5004 dgdba /usr/sbin/groupadd -g 5005 kmdba /usr/sbin/groupadd -g 5006 racdba /usr/sbin/groupadd -g 5007 oper # 2. 再创建用户 /usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle
ctrl.sh
cat >> /etc/sysctl.conf << EOF ## add for oracle 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 net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 EOF
limit.sh
cat >> /etc/security/limits.d/20-nproc.conf <<EOF * soft nproc 4096 root soft nproc unlimited 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 /sbin/sysctl -p
dir.sh
mkdir -p /u01/app mkdir -p /u01/app/oracle/oradata mkdir -p /u01/app/oracle/archive mkdir -p /u01/app/oracle/oraInventory mkdir -p /u01/app/oracle/product/19.3.0/db_1 chown -R oracle:oinstall /u01/app/ chmod -R 775 /u01/app/ mkdir -p /setup chown -R oracle:oinstall /setup/
env.sh
#!/bin/bash echo "=== 配置Oracle用户环境变量 ===" # 备份原bash_profile if [ -f /home/oracle/.bash_profile ]; then cp /home/oracle/.bash_profile /home/oracle/.bash_profile.bak.$(date +%Y%m%d_%H%M%S) echo "✓ 已备份原.bash_profile文件" fi # 配置环境变量 cat >> /home/oracle/.bash_profile <<'EOF' ######################################### # Oracle 19c Environment Configuration ######################################### # === 基础环境变量 === # 主机名(根据实际情况修改) export ORACLE_HOSTNAME=prod-oracle-111 # 数据库唯一名称(根据实际情况修改) export ORACLE_UNQNAME=yjttest # Oracle基础目录 export ORACLE_BASE=/u01/app/oracle # Oracle软件安装目录 export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1 # 数据库实例名(通常与UNQNAME相同) export ORACLE_SID=yjttest # === 路径配置 === export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib # === 字符集配置 === export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS" # === 历史记录配置 === export HISTSIZE=1000 export HISTFILESIZE=2000 export HISTTIMEFORMAT="%F %T " export HISTCONTROL=ignoreboth # === 命令别名 === alias sqlplus='rlwrap sqlplus' alias rman='rlwrap rman' alias lsnrctl='rlwrap lsnrctl' alias asmcmd='rlwrap asmcmd' # 目录快速跳转 alias oh='cd $ORACLE_HOME' alias ob='cd $ORACLE_BASE' alias od='cd $ORACLE_BASE/oradata' alias bdump='cd $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/trace' # 查看告警日志 alias alert='tail -200f $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/trace/alert_$ORACLE_SID.log' # 快速登录数据库 alias s='sqlplus / as sysdba' # === 提示符配置 === export PS1='[\u@\h \W($ORACLE_SID)]\$ ' EOF # 设置文件权限 chown oracle:oinstall /home/oracle/.bash_profile chmod 644 /home/oracle/.bash_profile echo "✓ 环境变量配置完成" echo "" echo "⚠️ 注意:" echo " 1. 请根据实际情况修改以下变量:" echo " - ORACLE_HOSTNAME=$ORACLE_HOSTNAME" echo " - ORACLE_UNQNAME=$ORACLE_UNQNAME" echo " - ORACLE_SID=$ORACLE_SID" echo "" echo " 2. 配置需要重新登录oracle用户后生效" echo " su - oracle" echo " echo \$ORACLE_HOME" echo "" echo " 3. 安装包解压请单独执行(不要在此脚本中):" echo " su - oracle" echo " cd /setup" 你实际的压缩包位置 echo " unzip -q LINUX.X64_193000_db_home.zip -d \$ORACLE_HOME/"
db_install.sh
cat >> $ORACLE_HOME/install/response/db_install.rsp<<EOF oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oracle/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=dba oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba oracle.install.db.config.starterdb.type=GENERAL_PURPOSE EOF $ORACLE_HOME/runInstaller -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp -ignorePrereq
netca.sh
cat >>/u01/app/oracle/product/19.3.0/db_1/assistants/netca/netca.rsp <<EOF [GENERAL] RESPONSEFILE_VERSION="19.0" CREATE_TYPE="CUSTOM" [oracle.net.ca] INSTALLED_COMPONENTS={"server","net8","javavm"} INSTALL_TYPE=""typical"" LISTENER_NUMBER=1 LISTENER_NAMES={"LISTENER"} LISTENER_PROTOCOLS={"TCP;1521"} LISTENER_START=""LISTENER"" NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"} NSN_NUMBER=1 NSN_NAMES={"EXTPROC_CONNECTION_DATA"} NSN_SERVICE={"PLSExtProc"} NSN_PROTOCOLS={"TCP;HOSTNAME;1521"} EOF $ORACLE_HOME/bin/netca -silent -responseFile /u01/app/oracle/product/19.3.0/db_1/assistants/netca/netca.rsp
dbca.sh
#!/bin/bash $ORACLE_HOME/bin/dbca -silent -createDatabase \ -gdbName yjttest \ -sid yjttest \ -sysPassword oracle \ -systemPassword oracle \ -dbsnmpPassword oracle \ -templateName General_Purpose.dbc \ -databaseType OLTP \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/flash_recovery_area \ -characterSet ZHS16GBK \ -nationalCharacterSet AL16UTF16 \ -totalMemory 7168 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName p1 \ -pdbAdminPassword oracle \ -emConfiguration DBEXPRESS \ -emExpressPort 5500
必须修改:
hostnamectl set-hostname prod-oracle-111 # ^^^^^^^^^^^^^^^^^^^^ # 修改为你的实际主机名
🔴 必须修改的3个关键变量:
export ORACLE_HOSTNAME=prod-oracle-111 # ^^^^^^^^^^^^^^^^^^^^ # 与host.sh中设置的主机名保持一致 export ORACLE_UNQNAME=yjttest # ^^^^ # 数据库唯一名称(建议与环境相关) # 例如:testdb、proddb、hr_system export ORACLE_SID=yjttest # ^^^^ # 数据库实例名(通常与UNQNAME相同)
可选修改(监听端口):
LISTENER_PROTOCOLS={"TCP;1521"} # ^^^^ # 默认端口1521(生产环境建议修改为非标准端口)
🔴 必须修改:
gdbName=sjzl # ^^^^ # 全局数据库名(与ORACLE_UNQNAME保持一致) sid=sjzl # ^^^^ # 实例名(与ORACLE_SID保持一致) sysPassword=oracle # ^^^^^^ # ⚠️ 生产环境必须改为强密码! oracleHomeUserPassword=oracle # ^^^^^^ # Oracle用户密码(需修改) totalMemory=7168 # ^^^^^ # 分配给Oracle的内存(MB) # 示例:16GB服务器 → 12288(保留4GB给系统) # 公式:物理内存(GB) × 1024 × 0.75 pdbAdminPassword=oracle # ^^^^^^ # PDB管理员密码(需修改) systemPassword=oracle # ^^^^^^ # SYSTEM用户密码(需修改) dbsnmpPassword=oracle # ^^^^^^ # 监控用户密码(需修改)
路径相关(需与dir.sh一致):
datafileDestination=/u01/app/oracle/oradata recoveryAreaDestination=/u01/app/oracle/flash_recovery_area # ^^^^^^^^^^^^^^^^^^^^^^^ # 脚本中未创建此目录!需手动添加
-- 连接数据库 sqlplus / as sysdba -- 查看数据库名和状态 SELECT name, open_mode FROM v$database; 预期输出: NAME OPEN_MODE --------- -------------------- YJTTEST READ WRITE -- 查看数据库唯一名称 SELECT db_unique_name FROM v$database; -- 查看数据库ID和创建时间 SELECT dbid, created, name FROM v$database; -- 查看实例信息 SELECT instance_name, status, database_status, version, startup_time FROM v$instance; 预期输出: INSTANCE_NAME STATUS DATABASE_STATUS VERSION STARTUP_TIME -------------- --------- ---------------- ----------------- ------------------- yjttest OPEN ACTIVE 19.0.0.0.0 19-MAR-26 -- 查看主机名 SELECT host_name FROM v$instance;
-- 测试中文字符存储 CREATE TABLE test_charset (id NUMBER, chinese_text VARCHAR2(100)); INSERT INTO test_charset VALUES (1, '测试中文字符:数据库安装成功!'); INSERT INTO test_charset VALUES (2, '特殊字符:①②③④⑤'); INSERT INTO test_charset VALUES (3, '符号测试:¥%……&*()'); SELECT * FROM test_charset; 预期输出: ID CHINESE_TEXT ---- ---------------------------------------- 1 测试中文字符:数据库安装成功! 2 特殊字符:①②③④⑤ 3 符号测试:¥%……&*() 如果显示乱码,说明字符集配置有问题
-- 查看所有PDB(需要以sysdba连接CDB) SHOW PDBS; 预期输出: CON_ID CON_NAME OPEN MODE RESTRICTED ------ ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 P1 READ WRITE NO 说明: - PDB$SEED:种子PDB,用于创建新PDB的模板 - P1:你创建的PDB,状态为READ WRITE表示正常
-- 切换到PDB ALTER SESSION SET CONTAINER = p1; -- 查看当前容器 SHOW CON_NAME; 预期输出: CON_NAME ------------------------------ P1 -- 查看PDB信息 SELECT pdb_id, pdb_name, status, logging FROM dba_pdbs; 预期输出: PDB_ID PDB_NAME STATUS LOGGING ---------- ------------ ---------- ------- 3 P1 NORMAL LOGGING
$ORACLE_HOME/bin/dbca -silent -deleteDatabase -sourceDB yjttest -sysDBAUserName sys -sysDBAPassword oracle
抹掉系统登记信息
# 备份并删除包含 yjttest 的行 sudo sed -i '/yjttest/d' /etc/oratab
清理参数文件和密码文件
rm -f $ORACLE_HOME/dbs/pfileyjttest.ora rm -f $ORACLE_HOME/dbs/spfileyjttest.ora rm -f $ORACLE_HOME/dbs/orapwyjttest
清理数据文件
rm -rf /u01/app/oracle/oradata/yjttest rm -rf /u01/app/oracle/flash_recovery_area/yjttest
服务器内存调整时,需要调整sga和pga。
-- 连接数据库 sqlplus / as sysdba -- 查看当前配置 SELECT name, display_value FROM v$parameter WHERE name IN ('sga_target', 'pga_aggregate_target', 'sga_max_size'); -- 调整SGA(从5.7GB增加到9.6GB) ALTER SYSTEM SET sga_max_size=9830M SCOPE=SPFILE; ALTER SYSTEM SET sga_target=9830M SCOPE=SPFILE; -- 调整PGA(从1.4GB增加到2.4GB) ALTER SYSTEM SET pga_aggregate_target=2458M SCOPE=SPFILE; -- 验证配置 SELECT name, display_value FROM v$parameter WHERE name IN ('sga_target', 'pga_aggregate_target', 'sga_max_size'); -- 预期输出: -- sga_max_size 9830M -- sga_target 9830M -- pga_aggregate_target 2458M
重启数据库生效
-- 正常关闭 SHUTDOWN IMMEDIATE; -- 启动(新内存配置生效) STARTUP; -- 验证 SELECT name, display_value FROM v$parameter WHERE name IN ('sga_target', 'pga_aggregate_target', 'sga_max_size'); -- 查看SGA实际分配 SELECT component, ROUND(current_size/1024/1024, 2) AS "Size(MB)" FROM v$sga_dynamic_components WHERE current_size > 0 ORDER BY current_size DESC;
如果要增加的sga_target小于sga_max_size,也可以不重启。直接执行
ALTER SYSTEM SET sga_target=5744M SCOPE=BOTH;
cd $ORACLE_HOME/network/admin
vi tnsnames.ora
P1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = p1) ) )
注意:
HOST = localhost 如果是本地连接HOST = 192.168.1.100SERVICE_NAME = p1 是你在dbca.sh中创建的PDB名称这样可以下面登录:
sqlplus system/oracle@P1
否则要
sqlplus system/oracle@localhost:1521/p1
SQL> SHOW PARAMETER db_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_files integer 200
修改
ALTER SYSTEM SET db_files = 2000 SCOPE = SPFILE;
SHUTDOWN IMMEDIATE; STARTUP;
注意:
DB_FILES 是一个
静态参数(除非你使用的是 Oracle RAC 或某些特定版本),修改后需要
重启数据库实例 才能生效。
默认配置:
-- 查看默认profile SELECT profile, resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD'; -- 输出: -- PASSWORD_LIFE_TIME = 180 (天) -- 180天后密码过期,应用无法连接!
风险:
-- 2. 修改DEFAULT profile为永不过期 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED -- 密码永不过期 PASSWORD_GRACE_TIME UNLIMITED -- 宽限期无限 PASSWORD_REUSE_TIME UNLIMITED -- 密码重用时间 PASSWORD_REUSE_MAX UNLIMITED -- 密码重用次数 FAILED_LOGIN_ATTEMPTS UNLIMITED -- 登录失败次数(可选,不推荐) PASSWORD_LOCK_TIME UNLIMITED; -- 锁定时间 -- 3. 验证修改 SELECT profile, resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049647/viewspace-3114027/ ,如需转载,请注明出处,否则将追究法律责任。