ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Oracle安装包全流程指南:从解压到RAC搭建与高频SQL操作

Oracle安装包全流程指南:从解压到RAC搭建与高频SQL操作 简介数据库环境搭建是企业应用开发和运维的基础环节而许多开发者的起点往往是一个从网盘或论坛流传出来的“Oracle安装包.zip”。这类压缩包并非官方标准介质解压后常因服务端、客户端与JDK概念混淆而陷入困境。理解Oracle软件组成、校验安装包完整性如SHA256并理清系统JDK与数据库自带运行时的区别是避免后续连环报错的前提。在Windows或Linux上准备环境时内核参数、依赖库和字符集选择都会影响最终可用性。新装环境常见的ORA-28547连接失败、12c删除不干净导致重装失败等问题都有成熟的排查链路。安装成功后dual、rowid、分页、trunc等高频SQL操作以及exp/imp与expdp/impdp的迁移选型是生产环境中使用Oracle的核心技能。更进一步若尝试在VMware ESXi6虚拟机中搭建Oracle RAC还需理解共享存储、ASM和集群资源管理。从解压一个安装包到跑起一套可用的数据库系统这条路上的每一个细节都值得认真对待。 相信很多人的网盘或者微信“文件传输助手”里都躺着过至少一个叫“Oracle安装包.zip”的文件。可能是同事甩过来的也可能是自己从某个技术论坛存下来就再没打开过。等你真有一天解压开它面对一堆database、client、jdk目录时反而不知道该点哪个。这个场景我见过太多次了尤其是刚转岗接触数据库的同学。这篇文章我就围绕“Oracle安装包.zip”这个再普通不过的东西把从解压到真正用上Oracle的完整链路捋一遍。包括下载渠道怎么选、环境怎么准备、图形安装和建库的过程、新环境最容易撞上的几个报错怎么排查以及装完之后大家高频搜索的dual、rowid、分页、trunc这类SQL操作最后顺手聊聊exp/imp和RAC这类进阶内容。适合第一次装Oracle的新手也适合装过几次但老在报错上卡壳的人。1. 从网盘里那个 Oracle安装包.zip 说起1.1 一个zip压缩包不等于一个能用的数据库先说个容易混淆的事你从网盘下载下来的“Oracle安装包.zip”很多时候根本不是Oracle官方发布的原始介质。以Linux x64为例Oracle 11gR2官方发布的是两个zip包linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip两个包必须都下载解压后会合并成一个完整的database目录。如果只解压了其中一个运行runInstaller时必然报文件缺失。Windows版本稍微好点官方给的是一个较大的exe或zip但很多第三方站点会把它重新打包成所谓的“精简版”“绿色版”。这种包我不是说绝对不能用只是你在后续建库、跑OEM或者做RAC的时候缺失组件导致的报错会让人怀疑人生。另外还要区分清楚Oracle数据库服务端、Oracle客户端、Oracle JDK是三个不同的东西。热词里“oracle官网jdk下载”和“Oracle安装包”被放在一起说明很多人确实把它们搞混了。数据库安装介质里会自带一个特定版本的JDK/JRE这是给OUIOracle Universal Installer和Enterprise Manager用的而你应用系统里要连数据库用的是Oracle官方发布的Java SE也就是java.sun.com那个渠道的JDK。两者版本没有必然关系。很多新手在Windows上装完数据库打开某个图形工具时提示“未安装Oracle Java SE Runtime Environment版本7更新51(64位)或更高”就以为要重装数据库其实只是系统缺对应的JDK或者JAVA_HOME指向错了。1.2 下载渠道与版本指纹校验安装包从哪来直接决定了后面你会不会走进坑里。我个人的建议优先级是这样的Oracle官方渠道OTNOracle Technology Network和Oracle Software Delivery Cloud。前者适合下载最新的数据库版本和JDK后者适合下载历史版本和补丁。企业内部软件仓库或同事内部共享的安装包这种通常经过验证风险可控。第三方网盘、论坛资源能不用尽量不用。如果实在要用解压后一定要做版本核对和完整性校验。版本核对怎么做解压后先看readme或者database/response目录下的.rsp响应文件里面会写明版本号如11.2.0.1.0、19.3.0.0.0。也可以用ls看目录结构如果能看到runInstaller和install目录基本是完整服务端介质如果只有sqlplus.exe之类的小文件那多半是客户端精简包。完整性校验的建议是使用SHA256。Oracle官方下载页一般会给出每个文件的校验值你拿到zip后先计算再比对。Linux用sha256sumWindows用certutil -hashfile。这一步最容易被省略但恰恰是排查很多玄学报错的关键——尤其当你解压到一半报CRC错误的时候别怀疑直接重新下载百分之百是文件损坏。2. 装之前把环境打点好JDK版本、系统依赖与内核参数2.1 先回答那个“此计算机上未安装oracle java se runtime environment版本7更新51”的报错这个报错在Windows上非常常见尤其是Win7/Win10系统上装Oracle 11g或者12c时。报错信息全文类似“此计算机上未安装Oracle Java SE Runtime Environment版本7更新51(64位)或更高。有关详细信息请访问java.com。”字面意思是安装程序需要Java 7 Update 5164位以上的运行环境。第一次遇到这个报错我以为是数据库介质里没带JDK去官网下载了JDK 7u51装上结果照样报错。后来才搞清楚问题出在PATH环境变量上。Oracle的OUI启动时会查找PATH里的java.exe如果你的系统里装过一个32位的JDK或者PATH里指向的是一个不存在的Java目录OUI就会认为“系统里没有可用的JDK”。正确做法是先安装一个64位JDK7u51以上或者装Oracle 11g/12c对应的JDK版本然后打开命令行执行java -version确认输出是64位版本再把%JAVA_HOME%\bin放到PATH的最前面。如果命令行里java -version正常但OUI还是报错就检查一下系统环境变量里有没有残留的JAVA_HOME指向旧版本把它改掉再重试。顺带说一句热词里“jdk17安装包下载”在2024、2025年确实火。JDK 17是长期支持版本你要是为了开发Java应用装JDK17完全没问题。但数据库本身不依赖你系统里的JDK17别把“应用要用的JDK”和“数据库自带的JDK”混为一谈。Oracle 19c数据库可以用系统里已有的JDK跑OUI但数据库实例运行不依赖它。2.2 Linux环境用户、组、依赖包和内核参数如果你在Linux上装Oracle环境准备比Windows更严格但也更可控。我以CentOS/RHEL 7 Oracle 11gR2为例这是最常见的学习组合。第一步创建用户和组groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle官方文档要求oinstall和dba分开实际生产环境还可能有oper组、backupdba组等。学习环境里至少要有这两个。第二步安装依赖包。用一条命令装齐避免一个一个找yum -y install binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc-devel libX11 libXau libXi libXtst make sysstat unixODBC unixODBC-devel这里面compat-libstdc-33在很多精简系统里可能没有从安装光盘的packages目录找到rpm手动装也可以。之前有次我在一个最小化安装的CentOS上装11g所有步骤都正常结果链接阶段报错libstdc.so.5: cannot open shared object file就是少了这个兼容库。第三步改内核参数编辑/etc/sysctl.conf至少包含以下几项fs.file-max 6815744 kernel.sem 250 32000 100 128 kernel.shmall 1073741824 kernel.shmmax 4398046511104 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改完执行sysctl -p生效。注意kernel.shmmax建议设成物理内存的一半左右单位是字节。别照抄网上的配置不假思索很多机器上因为shmmax设置太小导致SGA分配不出来。第四步修改/etc/security/limits.conf加上oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768第五步关闭SELinux和防火墙。生产环境你可以更精细地配置防火墙规则但学习环境的通则是先关掉集中精力解决数据库本身的问题不要一开始就同时排查两个层面。2.3 安装前检查清单把这些整理成一个清单每次装之前过一遍比出问题了再回头排查靠谱得多主机名和/etc/hosts是否正常hostname能正确解析不能有回环之外的异常映射磁盘空间是否充足Oracle软件目录和数据文件目录最好分开swap空间建议至少2GB内存小于1GB装11g都费劲时间同步是否正常尤其是后面打算搭RAC的话chronyd或ntpd必须配好3. 解压后跑起来图形安装、监听注册与dbca建库全程3.1 runInstaller 图形安装的关键节点一切就绪后用oracle用户登录进入解压后的database目录执行./runInstaller图形界面出来后有几个地方值得特别留意第一个是“Configure Security Updates”把“I wish to receive security updates”勾掉免得联网检查浪费时间。第二个是“Installation Option”选“Install database software only”还是“Create and configure a database”取决于你的使用场景。如果你是第一次装建议选“Install database software only”软件装完后再用DBCA建库每步都能明确知道在干什么如果选“Create and configure a database”OUI会调用DBCA中途出错定位范围会变大。第三个是字符集。这一步特别重要。国内很多老系统用的是ZHS16GBK它属于中文字符集每个汉字占2字节而AL32UTF8是Oracle推荐的Unicode字符集一个汉字可能占3字节。如果你以后要接Java应用强烈建议一开始就选AL32UTF8。选错字符集的代价是数据导入后中文乱码或者查询性能异常改起来非常痛苦。我个人遇到过不止一次从ZHS16GBK往AL32UTF8迁移的案例所有SQL都要重新走一遍字符转换几乎等于重做一次数据迁移。第四个是超级管理员口令。这个口令对应的账号是SYS属于数据库的管理员账号。别随手设一个太简单的后面各种巡检、调优、备份都要用它建议记到密码本里。图形安装进行到最后一步时OUI会提示以root身份执行两个脚本/u01/app/oraInventory/orainstRoot.sh和/u01/app/oracle/product/11.2.0/dbhome_1/root.sh。这一步很多人忽略或者延迟执行会导致监听起不来、sqlplus无法以/ as sysdba登录。我的习惯是开一个新终端直接执行不要拖到安装界面关闭之后。“这个root.sh什么时候跑”这个问题的答案永远只有一个在安装程序提示你的时候。3.2 netca 配置监听dbca 建库软件装完后先配监听再建库。监听器是客户端连接数据库的大门用netca命令启动图形配置工具。默认端口是1521服务名默认是全局数据库名例如orcl.example.com。配置结束后可以用lsnrctl status查看监听状态正常情况下会输出Listening Endpoints Summary。然后运行dbca。DBCA的向导里有几个点我提醒一下数据库模板选“General Purpose or Transaction Processing”即可不要选“Data Warehouse”除非你知道自己在干什么。数据库名和SID数据库名通常和服务名一致SID是实例名。RAC环境下有多个实例SID会带上编号单机就无所谓。内存大小如果物理内存只有4GBSGA建议给1.5GB到2GB别贪多否则建库时就有进程起不来。闪回区和归档学习环境可以不启用闪回但生产环境强烈建议开归档模式。这个后面做备份恢复时能救命。建库成功后DBCA会给你一个摘要界面包含数据库名、SID、端口等信息截图保存下来。然后验证sqlplus / as sysdba SQL select status from v$instance;如果输出OPEN恭喜你数据库已经能用了。3.3 静默安装批量部署时的一招鲜如果你手里没有图形界面或者要批量装几十台机器可以改走静默安装。原理就是用响应文件回答OUI的所有问题./runInstaller -silent -responseFile /path/to/install.rsp响应文件模板在database/response目录下分别是db_install.rsp、dbca.rsp和netca.rsp。用文本编辑器打开把需要填的项一一填好重点是oracle.install.optionINSTALL_DB_SWONLY、ORACLE_HOME、ORACLE_BASE、UNIX_GROUP_NAME这些。静默安装出问题时日志在/tmp/oraInstall*.log和$ORACLE_HOME/cfgtoollogs下先看日志别一头扎进去瞎改配置。4. 新装环境最容易撞上的三个报错与排查链路4.1 ORA-28547连接服务器失败的Net层迷局下面这个报错在热词里出现了它本身出现的频率确实高ORA-28547: connection to server failed, probable Oracle Net admin error这个报错的特点是数据库服务器端一切正常lsnrctl status显示监听是UP的服务也在但客户端就是连不上。绝大多数情况发生在Windows客户端的sqlplus或PL/SQL Developer上。我的排查习惯是三步走第一步先用telnet 服务器IP 1521确认端口通不通。端口不通去看防火墙和安全组规则后面都别看了。第二步在客户端执行tnsping 服务名确认Oracle Net能解析到目标服务。如果tnsping通但sqlplus连不上问题多半在sqlnet.ora。第三步打开客户端的sqlnet.ora重点看这一段SQLNET.AUTHENTICATION_SERVICES (NONE)如果值是(NTS)在有些环境里会导致连接认证方式不对改成(NONE)再试。如果改完还是不行再去看数据库服务器端listener.ora里的PROGRAM参数。Oracle 11g以后的listener.ora里会有一行PROGRAM extproc这个条目本身是给外部过程调用用的但它有时会干扰正常连接删掉或者注释掉再重启监听。还有一个案例我记得很清楚客户端装的是32位Oracle 11g客户端服务器是64位Oracle 19c中间Net版本差异导致ORA-28547。换用64位客户端后问题解决。版本匹配这件事在Oracle生态里永远值得第一个怀疑。4.2 Druid连接池SQL注入校验误伤这个报错和“Oracle安装包”本身没关系但它频繁出现在Oracle相关的搜索里我也讲一下。应用侧报错常常是这样java.sql.SQLException: sql injection violation, dbtype oracle, druid-这是阿里Druid连接池的WallFilter在拦截SQL。它内置了一套SQL注入检测规则一旦SQL写得太“动态”比如前面拼接了变量、注释或者ORDER BY后面跟了变量它就直接拒绝执行。定位方法看应用日志里被拦下的完整SQL对比Druid的wall过滤配置。临时验证可以改配置把wall过滤器关掉或者设置wall.commentAllowtrue。但生产环境我建议不要关而是改写SQL把动态排序字段用白名单映射把动态表名用参数化SQL处理。Druid这种安全性检查虽然偶尔误伤但设计初衷是对的应用层就应该做参数化查询。4.3 “12c删除不干净”与重装失败热词里的“12c删除不干净oracle”我太有共鸣了。Windows上装Oracle 12c因为某些原因要卸载重装结果卸载完再装OUI直接提示“指定的Oracle主目录已存在”或者“无法创建目录”这就是典型的卸载不干净。Windows上彻底卸载的路径大致是这样从OUI正常卸载数据库软件运行deinstall或者“开始”菜单里的卸载程序。删除Windows服务。以管理员身份运行sc delete OracleServiceXXXX一个个清理。删除注册表项。重点是HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEregedit里手动删干净。删除目录残留C:\Oracle、C:\Program Files\Oracle、C:\app、安装时指定的ORACLE_BASE目录。清理环境变量ORACLE_HOME、ORACLE_BASE、TNS_ADMIN。Linux上相对简单运行$ORACLE_HOME/deinstall后手动清理/etc/oratab、/etc/oraInst.loc、/opt/ORCLfmap下的文件。我的真实建议是如果在虚拟机上练习装之前先拍个快照卸载失败回滚快照比手动清理快得多也干净得多。5. 安装只是开始dual、rowid、分页、trunc这些高频SQL别搞混5.1 dual 不是用来存数据的总有同学问“oracle中dual最多存多大”。dual是Oracle里一个特殊的虚拟表它只有一列、一行专门用来执行SELECT SYSDATE FROM DUAL这种不涉及真实表的查询。它不是让你往里存数据的。你往dual里插入一条记录系统并不会报错但会造成很诡异的行为比如某些SELECT返回多行或者函数计算结果异常。记住一句话dual是临时计算用的不是业务表永远不要动它。实际工作中写Oracle脚本时以下写法是常客SELECT SYSDATE, USER, TO_CHAR(SYSDATE, YYYY-MM-DD HH24:MI:SS) FROM DUAL;5.2 rowid行的物理地址rowid是Oracle中每一行数据在物理存储上的地址标识是一串形如AAAR3sAAEAAAACXAAA的字符。它直接指向数据行所在的数据文件、数据块和块内的行槽。所以用rowid定位行的速度是最快的任何索引查找最终也都要转换成rowid去访问数据。一个很实用的场景是删除重复数据。比如表里有重复记录只保留其中一条DELETE FROM emp WHERE rowid NOT IN ( SELECT MIN(rowid) FROM emp GROUP BY empno );这里MIN(rowid)保留的是每组重复数据中最早插入的那一行。还有一次我在一张几亿行的表上做批量更新全表扫描怎么跑都慢后来改成先查出目标行的rowid再按rowid分批更新速度提升非常明显。原因就是省去了回表查找的过程。5.3 分页的三种写法Oracle分页是个老生常谈的问题但很多人写来写去还是那一种而且不注意排序稳定性。我把三种主流写法都列出来。第一种ROWNUM伪列。这是最基础的写法适合11g及以下版本SELECT * FROM ( SELECT t.*, ROWNUM rn FROM (SELECT * FROM employees ORDER BY employee_id) t WHERE ROWNUM 30 ) WHERE rn 20;注意内外两层都有ROWNUM的限制条件少了内层ROWNUM 30结果会不对。第二种ROW_NUMBER()分析函数写法更优雅也不容易出错SELECT * FROM ( SELECT e.*, ROW_NUMBER() OVER (ORDER BY employee_id) rn FROM employees e ) WHERE rn BETWEEN 21 AND 30;第三种12c及以上版本支持的FETCH FIRST语法SELECT * FROM employees ORDER BY employee_id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;这个写法最简洁但11g用不了。还有一个坑分页的ORDER BY必须指定唯一性字段。如果只按salary排序而salary有大量重复分页翻页时会出现数据跳变或重复。我的习惯是排序字段后面永远加一个主键列比如ORDER BY salary DESC, employee_id。5.4 trunc(sysdate) 与日期处理TRUNC(SYSDATE)的作用是把日期的时分秒截断为00:00:00这在按天统计时非常实用。举几个常用格式-- 当天零点 SELECT TRUNC(SYSDATE) FROM DUAL; -- 当月第一天 SELECT TRUNC(SYSDATE, MM) FROM DUAL; -- 当周周一 SELECT TRUNC(SYSDATE, IW) FROM DUAL; -- 季度第一天 SELECT TRUNC(SYSDATE, Q) FROM DUAL; -- 当年第一天 SELECT TRUNC(SYSDATE, YYYY) FROM DUAL;最常见的错误是查询日期字段时没有处理时间部分。比如订单表里create_time是DATE类型想查今天的订单写成WHERE create_time SYSDATE是查不到数据的因为SYSDATE带时分秒而create_time大概率不是正好在那一刻创建的。正确写法是WHERE create_time TRUNC(SYSDATE) AND create_time TRUNC(SYSDATE 1)这个写法既给了当天零点到次日零点之间所有数据又能利用索引比在create_time上套TRUNC函数更高效。5.5 查询总金额与存储过程最小模板“oracle查询总金额”也是一个典型需求。最简单的是SELECT COALESCE(SUM(order_amount), 0) AS total_amount FROM orders WHERE order_status PAID;COALESCE处理的是表中没有符合条件的记录时SUM会返回NULL业务上往往需要返回0。存储过程的话很多初学者一上来就背语法背完就忘。我建议记住这个最小模板就够用CREATE OR REPLACE PROCEDURE proc_get_emp_sal ( p_empno IN employees.employee_id%TYPE, p_sal OUT employees.salary%TYPE ) IS BEGIN SELECT salary INTO p_sal FROM employees WHERE employee_id p_empno; EXCEPTION WHEN NO_DATA_FOUND THEN p_sal : -1; END proc_get_emp_sal; /存储过程调试时记得先执行SET SERVEROUTPUT ON然后在过程体里用DBMS_OUTPUT.PUT_LINE打印中间变量。不要指望一次写对调试是过程开发的常态。6. 搬家是门手艺exp/imp 与 expdp/impdp 的选型思考6.1 两代工具的本质差异Oracle数据迁移最常用的工具是传统exp/imp和后来的数据泵expdp/impdp。两者名字像原理完全不同。exp/imp是客户端工具可以用Oracle客户端连接远程数据库执行导出生成的文件是二进制dmp。它的优势是跨版本兼容性好从老版本的11g往新版本19c导数据或者反过来往低版本导它通常都能处理。expdp/impdp是服务端工具必须在数据库服务器本地执行导出文件也生成在服务器磁盘上。它的最大优势是速度快支持PARALLEL并行还支持NETWORK_LINK网络模式不用落盘直接跨库导。但它是高版本兼容低版本跨版本往老库导时要指定VERSION参数。选型我的个人经验数据量小于10GB又涉及跨大版本迁移优先用exp/imp操作简单、坑少。同版本或者升级迁移、数据量在几十GB以上优先用expdp/impdp。生产环境大数据量迁移别直接用命令硬导优先考虑用数据泵的NETWORK_LINK加上分批导出或者干脆用OGG这类实时同步工具。6.2 数据泵常用参数与常见坑数据泵的基本用法先建立一个目录对象因为expdp只能导出到Oracle能访问的目录对象里CREATE DIRECTORY dump_dir AS /u01/backup; GRANT READ, WRITE ON DIRECTORY dump_dir TO scott;然后执行导出expdp scott/tiger DIRECTORYdump_dir DUMPFILEscott_%U.dmp SCHEMASscott PARALLEL4 LOGFILEexport_scott.log%U表示分卷文件配合PARALLEL会生成多个dump文件。导入impdp scott/tiger DIRECTORYdump_dir DUMPFILEscott_%U.dmp REMAP_SCHEMAscott:new_scott TRANSFORMsegment_attributes:N LOGFILEimport_scott.log这里REMAP_SCHEMA是经常用到的把原schema导入到目标schema。常见报错有几个。ORA-39002: invalid operation和ORA-39006: internal error多半是因为执行导入的用户不是目标库里的管理员或者目录对象没建好。先查dba_datapump_jobs视图再查日志文件基本能定位到权限还是空间问题。还有一个比较坑的是导入时外键和触发器顺序问题经常报主键冲突。我的习惯是导入前先禁用所有外键约束和触发器导完再启用能省掉一半的耐心和时间。7. 从单机到RACVMware ESXi 6 里搭集群的重点7.1 为什么RAC这么难装Oracle RACReal Application Clusters允许多个数据库实例同时访问同一份数据文件应用连到任何一个实例都能工作。它的架构是多台服务器每台跑一个实例实例之间通过私有网络通信交换Cache Fusion数据所有实例共享一套数据文件数据文件通常存放在ASMAutomatic Storage Management磁盘组里集群管理软件GIGrid Infrastructure负责监控节点、管理资源生活化类比RAC就像一家公司开了多个窗口每个窗口都能办理所有业务但它们共用一个库房。难就难在“共用库房”这件事上——存储、网络、集群软件任何一个环节出错整个集群都起不来。热词里有一条“记录一次在vmware esxi6虚拟机环境下a搭建oracle的rac的过程”这正好戳中了新手做RAC实验的典型场景。在VMware虚拟机里搭RAC最大的障碍不是Oracle本身而是共享存储配置。物理机上有光纤存储或iSCSI虚拟机里得手动创建共享SCSI控制器。7.2 ESXi 6虚拟机搭建RAC的关键步骤骨架第一步准备两台虚拟机每台至少两块网卡一块用于公网通信一块用于私有心跳网络。两块网卡要配置不同的网段比如公网是192.168.10.0/24私有网是10.10.10.0/24。在/etc/hosts里把两台机器的主机名、公网IP、私有IP、VIP都写全。第二步配置共享存储。编辑两台虚拟机的VMX配置或通过vSphere客户端给每台虚拟机添加同款的SCSI磁盘控制器类型必须设成“VMware Paravirtual”或“LSI Logic SAS”而且要置于共享SCSI总线上。在vSphere中就是给两台VM分别添加同一个虚拟磁盘但挂在共享SCSI控制器上。这一步如果控制器类型不对启动时根本识别不到共享盘。第三步安装GRID。先给每台虚拟机安装Oracle Linux然后安装GI。GI安装完成后用crsctl status resource -t检查集群资源状态。第四步装数据库软件建磁盘组。用asmca图形工具创建磁盘组把之前共享的磁盘加进去。然后dbca建库选择“Oracle Real Application Clusters database”类型实例会同时在两台机器上创建。如果你没有图形界面可以用命令行进入ASM环境su - grid asmcmd ls DATA或者sqlplus / as sysasm SQL select name, state from v$asm_diskgroup;ASM管理这一块新手最容易懵的就是分不清/ as sysdba和/ as sysasm。简单说管理数据库实例用sysdba管理ASM磁盘组用sysasm两个是不同权限角色。7.3 等保测评中Oracle常见加固命令不少同行搜索“oracle等保命令”说明大家都在做等保合规的工作。等保测评针对Oracle数据库核心是身份鉴别、访问控制、安全审计这几块。我列几个最基础也最常被要求的巡检项。查看审计是否开启SHOW PARAMETER audit_trail;audit_trail的值至少应该是DB或OS。如果输出是NONE说明审计没开需要改ALTER SYSTEM SET audit_trailDB SCOPESPFILE; -- 然后重启数据库查看密码策略SELECT profile, resource_name, limit FROM dba_profiles WHERE resource_name IN (FAILED_LOGIN_ATTEMPTS,PASSWORD_LIFE_TIME,PASSWORD_VERIFY_FUNCTION);等保测评里经常要求设置登录失败锁定阈值和密码有效期比如ALTER PROFILE default LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LIFE_TIME 90;查看补丁情况用系统命令不是SQL$ORACLE_HOME/OPatch/opatch lsinventory这个命令能看到当前安装的补丁列表等保测评会要求提供数据库最新补丁信息。再就是最小权限检查。比如查一下PUBLIC角色被授予了多少不寻常的权限SELECT privilege FROM dba_sys_privs WHERE granteePUBLIC ORDER BY 1;正常来说PUBLIC不应该有一堆系统权限。如果看到CREATE ANY TABLE、DROP ANY TABLE这种高危权限就需要回收。关于等保我的建议是它不只是一个测评时点的快照而应该做成一套日常巡检脚本定期跑。把上面这些SQL攒起来每个月初跑一遍把输出存档测评时直接拿出来就是证据。你平时运维的规范性本质上比测评前突击更重要。说到最后分享一个我自己的习惯每次拿到一个新的Oracle安装包不管多信任来源我都会先做两件事第一件是校验哈希值第二件是在虚拟机里装完一遍之后立刻拍快照然后做一次冷备把数据文件、控制文件、参数文件全部复制出来。这个“安装基线”留着后面不管做任何实验把数据库折腾坏了都能在十分钟内恢复到一个干净状态。装数据库这件事谨慎一点永远不吃亏。本文还有配套的精品资源点击获取
返回列表