一、Oracle搭建
1.修改主机名,安装插件
plain
hostnamectl set-hostname jm04
echo "192.168.1.2$tmp jm04" >> /etc/hosts
#关闭防火墙
systemctl stop firewalld.service
systemctl status firewalld.service
systemctl disable firewalld.service
sed -i "s|SELINUX=enforcing|SELINUX=disabled|" /etc/selinux/config
#安装插件
yum -y install binutils* compat-libcap1* compat-libstdc++* gcc* gcc-c++* glibc* glibc-devel* ksh* libaio* libaio-devel* libgcc* libstdc++* libstdc++-devel* libXi* libXtst* make* sysstat* elfutils* unixODBC* xhost unzip xdpyinfo
2.创建用户和用户组
plain
groupadd oinstall
groupadd dba
useradd -g oinstall -g dba -m oracle
echo Sim111le4U | passwd --stdin oracle
# 1. 检查当前oracle用户信息
id oracle
# 输出示例:uid=1000(oracle) gid=1000(oracle) groups=1000(oracle),1001(oinstall),1002(dba)
# 注意:如果gid不是oinstall,需要修改主组
# 2. 修改oracle用户的主组为oinstall
usermod -g oinstall oracle
# 3. 确保oracle也在dba组中(作为附加组)
usermod -a -G dba oracle
3.创建数据库安装目录
plain
mkdir -p /u01/app/oracle
mkdir -p /u01/stage/11gR2/
chown -R oracle:oinstall /u01/
cd /u01/stage/11gR2/
4.系统相关参数配置
--配置oracle软件环境参数
root@yyrz app\]# **vim /home/oracle/.bash_profile #添加下面内容** ```plain cat >> /home/oracle/.bash_profile <<-'EOF' # Oracle Settings TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1.0/db_1; export ORACLE_HOME ORACLE_SID=daxia; export ORACLE_SID #ORACLE_SID根据实际情况填写 ORACLE_TERM=xterm; export ORACLE_TERM PATH=/usr/sbin:$PATH; export PATH PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK EOF cat /home/oracle/.bash_profile #使.bash_profile环境变量生效 source /home/oracle/.bash_profile ``` ### 5.配置oracle用户的系统限制参数 ```plain cat >> /etc/security/limits.conf <<-'EOF' oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 EOF cat >> /etc/pam.d/login <<-'EOF' session required pam_limits.so EOF cat /etc/security/limits.conf # 使参数生效 sysctl -p ``` **vim /etc/sysctl.conf** ```plain cat >> /etc/sysctl.conf <<-'EOF' # ============================================================================ # Oracle Database 内核参数优化配置 # ============================================================================ # ---------------------------------------------------------------------------- # 文件系统与异步 I/O # ---------------------------------------------------------------------------- # fs.file-max: 系统全局允许打开的最大文件句柄数 # Oracle 作用: Oracle 进程需要打开大量文件(数据文件、日志文件、归档日志等) # 计算公式: 65536 + (并发进程数 * 每进程打开文件数) # 推荐值: 6815744 (约650万) 或更大 fs.file-max = 6815744 # fs.aio-max-nr: 系统允许的并发异步 I/O 请求最大数量 # Oracle 作用: Oracle 使用异步 I/O 提高数据文件读写性能 # 注意: 此值过小会导致 "aio-max-nr 不足" 的数据库告警 # 推荐值: 1048576 (100万+) fs.aio-max-nr = 1048576 # ---------------------------------------------------------------------------- # 共享内存 (System V Shared Memory) - 用于 Oracle SGA # ---------------------------------------------------------------------------- # kernel.shmall: 系统一次可使用的共享内存页总数 # 单位: 内存页 (通常每页 4096 字节 = 4KB) # 计算公式: kernel.shmall = kernel.shmmax / 4096 # 当前值: 2097152 页 × 4096 字节 = 8 GB # Oracle 作用: 限制 SGA 可占用的最大共享内存总量 # 建议: 应至少等于 kernel.shmmax/页大小,并略大于 SGA 目标值 kernel.shmall = 2097152 # kernel.shmmax: 单个共享内存段允许的最大值 # 单位: 字节 (bytes) # Oracle 作用: 决定整个 SGA 能否作为一个共享内存段分配 # # 【配置说明】 # 2147483648 = 2 GB (2×1024³) # 4294967295 = 4 GB (4×1024³ - 1) # 536870912 = 512 MB (Oracle 安装最小要求) # # 【参考值】按实际内存的 1/2 到 2/3 设置: # - 2GB 内存: 1073741824 (1GB) # - 4GB 内存: 2147483648 (2GB) ← 注释中的参考值 # - 8GB 内存: 4294967296 (4GB) # - 16GB 内存: 8589934592 (8GB) # - 32GB 内存: 17179869184 (16GB) # - 64GB 内存: 34359738368 (32GB) # # 当前值: 4294967295 = 4GB - 1 字节 (适合 8GB 内存环境) # 注意: 如小于 536870912 (512MB) 则 Oracle 无法安装 kernel.shmmax = 4294967295 # kernel.shmmni: 系统允许的最大共享内存段数量 # Oracle 作用: 每个 Oracle 实例通常使用几个共享内存段 # 推荐值: 4096 (默认值足够,无需修改) kernel.shmmni = 4096 # ---------------------------------------------------------------------------- # 信号量 (Semaphores) - 用于进程间同步 # ---------------------------------------------------------------------------- # kernel.sem: 信号量参数 (4个值,空格分隔) # 格式: SEMMSL SEMMNS SEMOPM SEMMNI # # SEMMSL = 250 : 每个信号量集中最大信号量数 # SEMMNS = 32000 : 系统最大信号量总数 (通常 = SEMMSL × SEMMNI) # SEMOPM = 100 : 单次 semop 系统调用最大操作数 # SEMMNI = 128 : 系统最大信号量集数量 # # Oracle 作用: 用于 Oracle 后台进程间协调与同步 # Oracle 官方推荐最小值: 250 32000 100 128 kernel.sem = 250 32000 100 128 # ---------------------------------------------------------------------------- # 网络优化参数 - 影响 SQL*Net、Data Guard、RAC 通信 # ---------------------------------------------------------------------------- # net.ipv4.ip_local_port_range: TCP/UDP 本地端口自动分配范围 # 格式: 起始端口 结束端口 # Oracle 作用: 影响数据库连接、监听器、RAC 等使用临时端口的范围 # 当前值: 9000~65500 (可用端口: 56501 个) # 注意: 避免端口范围过小(如默认 32768-60999)导致端口耗尽 net.ipv4.ip_local_port_range = 9000 65500 # net.core.rmem_default: Socket 接收缓冲区的默认大小 # 单位: 字节 (bytes) # 当前值: 4194304 = 4 MB # Oracle 作用: 影响 SQL*Net、Data Guard 接收数据的网络性能 # 建议: 较大值提升大吞吐量传输性能,可调大至 16MB net.core.rmem_default = 4194304 # net.core.rmem_max: Socket 接收缓冲区的最大允许值 # 单位: 字节 (bytes) # 当前值: 4194304 = 4 MB # Oracle 作用: 限制接收缓冲区上限 # 建议: 若网络流量大(如 Data Guard 日志同步),可调大至 16-32MB net.core.rmem_max = 4194304 # net.core.wmem_default: Socket 发送缓冲区的默认大小 # 单位: 字节 (bytes) # 当前值: 262144 = 256 KB # Oracle 作用: 影响发送 SQL 结果集、日志传输的网络性能 # 建议: 可适当调大至 1-4MB net.core.wmem_default = 262144 # net.core.wmem_max: Socket 发送缓冲区的最大允许值 # 单位: 字节 (bytes) # 当前值: 1048576 = 1 MB # Oracle 作用: 限制发送缓冲区上限 # 建议: 大流量环境可调大至 4-8MB net.core.wmem_max = 1048576 # ---------------------------------------------------------------------------- # 内核错误处理 - 保障数据一致性 # ---------------------------------------------------------------------------- # kernel.panic_on_oops: 内核发生 oops 时的行为 # # 值定义: # 0 = 仅记录错误日志,系统继续运行(尽力恢复) # 1 = 立即触发内核 panic,系统根据 kernel.panic 决定是否重启 # # Oracle 作用: # - oops 发生后内核状态可能不一致,继续运行可能导致内存损坏、 # 文件系统元数据损坏或 Oracle 数据块损坏 # - 采用"快速失败"(Fail-Fast)策略,宁可系统崩溃重启, # 也不允许在不稳定状态下处理关键事务数据 # # 生产环境建议: 1 # 配合参数: kernel.panic = 5 (panic 后5秒自动重启) # # 注意: 开发/测试环境可设为 0,便于调试定位问题 kernel.panic_on_oops = 1 # ============================================================================ # 附: 应用配置命令 # ============================================================================ # 1. 编辑文件: vi /etc/sysctl.conf # 2. 粘贴以上内容 # 3. 使配置生效: sysctl -p # 4. 验证配置: sysctl -a | grep -E "fs.file-max|kernel.shmmax|kernel.sem" # ============================================================================ EOF ``` ### 6.引导文件db_install_full.rsp ```plain cat > /home/oracle/db_install_full.rsp <<-'EOF' # 响应文件格式版本(固定值,指定该文件遵循的版本) oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0 # 安装类型:仅安装数据库软件(不创建数据库) oracle.install.option=INSTALL_DB_SWONLY # 主机名(需与 /etc/hosts 或 DNS 解析一致) ORACLE_HOSTNAME=jm04 # Oracle 软件所属的用户组(通常为 oinstall) UNIX_GROUP_NAME=oinstall # 产品清单目录(记录已安装的 Oracle 产品) INVENTORY_LOCATION=/u01/app/oraInventory # 数据库实例使用的语言(en 为英语) SELECTED_LANGUAGES=en # Oracle 家目录(软件安装路径) ORACLE_HOME=/u01/app/oracle/product/11.2.0.1.0/db_1 # Oracle 基目录(配置文件、日志等基础路径) ORACLE_BASE=/u01/app/oracle # 安装版本:企业版(EE = Enterprise Edition) oracle.install.db.InstallEdition=EE # 是否选择企业版扩展组件(false 表示不额外选择) oracle.install.db.EEOptionsSelection=false # 可选组件列表(这里仅开启分区功能) oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.1.0 # DBA 用户组(拥有数据库管理权限) oracle.install.db.DBA_GROUP=dba # 操作员用户组(拥有启动/关闭等操作权限) oracle.install.db.OPER_GROUP=oinstall # 集群节点列表(单实例为空) oracle.install.db.CLUSTER_NODES= # 是否为 RAC One Node 安装(否) oracle.install.db.isRACOneInstall=false # RAC One Node 服务名(单实例为空) oracle.install.db.racOneServiceName= # ---------- 以下为创建数据库的相关参数(因为安装类型仅为软件,所以留空或无效)---------- oracle.install.db.config.starterdb.type=GENERAL_PURPOSE oracle.install.db.config.starterdb.globalDBName= oracle.install.db.config.starterdb.SID= oracle.install.db.config.starterdb.characterSet=ZHS16GBK oracle.install.db.config.starterdb.memoryOption=true oracle.install.db.config.starterdb.memoryLimit=800 oracle.install.db.config.starterdb.installExampleSchemas=false oracle.install.db.config.starterdb.enableSecuritySettings=true oracle.install.db.config.starterdb.password.ALL=oracle123 oracle.install.db.config.starterdb.password.SYS=oracle123 oracle.install.db.config.starterdb.password.SYSTEM=oracle123 oracle.install.db.config.starterdb.password.SYSMAN=oracle123 oracle.install.db.config.starterdb.password.DBSNMP=oracle123 oracle.install.db.config.starterdb.control=DB_CONTROL oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL= oracle.install.db.config.starterdb.automatedBackup.enable=false oracle.install.db.config.starterdb.automatedBackup.osuid= oracle.install.db.config.starterdb.automatedBackup.ospwd= oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oracle/flash_recovery_area # ---------- 以上为创建数据库相关参数 ---------- # ASM 磁盘组(未使用) oracle.install.db.config.asm.diskGroup= oracle.install.db.config.asm.ASMSNMPPassword= # My Oracle Support 账号(未配置) MYORACLESUPPORT_USERNAME= MYORACLESUPPORT_PASSWORD= # 安全更新配置(不使用 My Oracle Support) SECURITY_UPDATES_VIA_MYORACLESUPPORT=false # 必须设置为 true,否则静默安装会因未接受安全更新而失败 DECLINE_SECURITY_UPDATES=true # 代理服务器配置(未使用) PROXY_HOST= PROXY_PORT= PROXY_USER= PROXY_PWD= PROXY_REALM= # 收集器支持中心 URL(未使用) COLLECTOR_SUPPORTHUB_URL= # 自动更新选项(跳过更新) oracle.installer.autoupdates.option=SKIP_UPDATES oracle.installer.autoupdates.downloadUpdatesLoc= AUTOUPDATES_MYORACLESUPPORT_USERNAME= AUTOUPDATES_MYORACLESUPPORT_PASSWORD= EOF chown -R oracle:oinstall /home/oracle/db_install_full.rsp ``` ### 7.解压安装包 ```plain su - oracle # 验证(应该看到gid是oinstall) id oracle # 开始安装 cd /u01/stage/11gR2/ unzip p13390677_112040_Linux-x86-64_1of7.zip unzip p13390677_112040_Linux-x86-64_2of7.zip unzip p13390677_112040_Linux-x86-64_3of7.zip cd /u01/stage/11gR2/database ./runInstaller -silent -responseFile /home/oracle/db_install_full.rsp -ignorePrereq # 安装完成后,按提示以 root 执行脚本 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0.1.0/db_1/root.sh ``` ### 8.配置监听器 #### 步骤1:静默配置监听器 ```plain # 切换到oracle用户 su - oracle # 以oracle用户执行 cd /u01/stage/11gR2/database # 配置监听器(静默模式) $ORACLE_HOME/bin/netca /silent /responseFile /u01/stage/11gR2/database/response/netca.rsp # 检查Oracle版本 $ORACLE_HOME/OPatch/opatch version # 检查sqlplus $ORACLE_HOME/bin/sqlplus -version # 检查监听器 $ORACLE_HOME/bin/lsnrctl status # 启动监听器 # $ORACLE_HOME/bin/lsnrctl start ``` #### 步骤2:创建数据库 ```plain # 创建数据库(静默模式) $ORACLE_HOME/bin/dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname daxia \ -sid daxia \ -sysPassword oracle123 \ -systemPassword oracle123 \ -characterSet ZHS16GBK \ -memoryPercentage 40 \ -emConfiguration NONE \ -storageType FS \ -datafileDestination /u01/app/oracle/oradata ``` #### 步骤3:验证数据库 ```plain ls $ORACLE_HOME/dbs/init.ora echo $ORACLE_SID export ORACLE_SID=daxia # 连接数据库 sqlplus / as sysdba # 在SQL*Plus中执行: SQL> select instance_name, status from v$instance; SQL> select name, open_mode from v$database; SQL> exit ``` ### 9.创建用户和表空间 ```plain -- 1. 创建业务数据表空间 CREATE TABLESPACE TS_TTMS_DATA LOGGING DATAFILE '/u01/app/oracle/oradata/daxia/ttms_data_01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; -- 2. 创建临时表空间 (用于排序等操作) CREATE TEMPORARY TABLESPACE TS_TTMS_TEMP TEMPFILE '/u01/app/oracle/oradata/daxia/ttms_temp_01.dbf' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL; -- 2. 创建用户并指定表空间 -- 这里使用你提供的用户名 TTMS 和密码 oracle123。 -- 3. 创建用户 CREATE USER TTMS IDENTIFIED BY "oracle123" DEFAULT TABLESPACE TS_TTMS_DATA TEMPORARY TABLESPACE TS_TTMS_TEMP ACCOUNT UNLOCK; -- 3. 授权 -- 赋予用户连接数据库和创建表、视图等对象的权限。 GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, UNLIMITED TABLESPACE TO TTMS; GRANT RESOURCE, CONNECT TO TTMS; -- 4. 授予基本权限 GRANT CONNECT, RESOURCE TO TTMS; -- 5. (可选) 如果该用户需要查看系统视图或进行高级管理,可以赋予以下权限 GRANT SELECT ANY DICTIONARY TO TTMS; GRANT UNLIMITED TABLESPACE TO TTMS; COMMIT; exit; -- 4. 验证 -- 执行完上述步骤后,你可以退出 sysdba,尝试用新用户登录测试: -- -- bash -- 编辑 sqlplus TTMS/oracle123@daxia exit; ``` ## 二、数据导入 ### 1.创建dump文件所在位置/u01/data_pump_dir 将备份的文件上传到 /u01/data_pump_dir ```plain # 以sysdba登录 sqlplus / as sysdba -- 创建目录对象指向dump文件所在位置 CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/u01/data_pump_dir'; -- 授权给TTMS用户 GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TTMS; -- 验证目录是否创建成功 SELECT DIRECTORY_NAME, DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR'; EXIT; ``` ### 2.快速绕过方案(强制使用默认表空间): ```plain impdp TTMS/oracle123 \ DIRECTORY=DATA_PUMP_DIR \ DUMPFILE=expdp_daxia_20260408_01.dmp \ REMAP_SCHEMA=daxia:TTMS \ TABLE_EXISTS_ACTION=REPLACE \ TRANSFORM=SEGMENT_ATTRIBUTES:N \ TRANSFORM=STORAGE:N \ EXCLUDE=CONSTRAINT \ LOGFILE=imp_force_create.log \ PARALLEL=4 ```