一、前言
ORACLE作为世界上最牛逼的关系型数据库,也是我从事数据库行业入门学习的数据库,记得当时学习ORACLE数据库时就深感其复杂性,对很多概念一知半解、似懂非懂,当ORACLE管理员期间也遇到过不少问题,不过好在有ORACLE原厂工程师驻场,基本上问题都能解决。后来因为领导的安排和工作的变动,我开始搞MySQL和一些信创数据库,对于MySQL数据库,从存储引擎到主从复制,我也通读了业界有名的几本书,常年混迹于MySQL的论坛,给官方提过bug,研究过源码,发过文章,也在工作中解决了不少问题,可以说对于MySQL自认为比较擅长和拿手。但是目前国内的各大行业,尤其是金融行业的核心系统,几乎还是运行在ORACLE数据库上,掌握ORACLE数据库对以后的信创改造工作是十分重要的。因此,我重新拿起了ORACLE数据库的书籍,当年学习ORACLE的笔记,对ORACLE进行复习与实操,一是为了让以后的信创改造工作更顺利,二是对比MySQL,感悟ORACLE的不同与牛逼之处。
二、ORACE的安装
ORACLE数据库的安装肯定比MySQL数据库复杂得多,MySQL数据库的安装在官方文档上可以简化到只用几行命令就可以完成。在ORACLE官网上可以对ORACLE各个版本的数据库进行下载与学习使用,网址是:https://edelivery.oracle.com/ 。这也体现了ORACLE的开放,据说国内很多公司其实都是在使用盗版的ORACLE。
我下载的是11G版本,参考了墨天轮上面一个oracle 11g的数据库安装步骤,比较顺利地完成了ORACLE的安装。
--确保服务器可以yum安装包 yum -y install unzip --关闭防火墙 systemctl stop firewalld systemctl disable firewalld --关闭selinux vi /etc/selinux/config disable setenforce 0 --查看swap是否存在(需要有swap) free -m --在/etc/hosts中添加主机名如下,前面为ip,后面为主机名称。 10.4.7.100 oracle --安装依赖包 yum install -y gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-develnumactl-devel sysstat unixODBC unixODBC-devel pcre-devel --确认安装无误 rpm -qa gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-develnumactl-devel sysstat unixODBC unixODBC-devel pcre-devel --确认安装完包之后 groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle AxTemp##2022 --修改内核参数 vi /etc/sysctl.conf 增加以下内容其中kernel.shmmax = 1073741824为本机物理内存(2G)的一半,单位为byte fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 1073741824 4294967296 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 --修改完之后立即执行修改: sysctl -p --修改用户的限制文件/etc/security/limits.conf添加如下内容 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 --修改/etc/pam.d/login文件:添加如下内容 session required /lib64/security/pam_limits.so session required pam_limits.so --修改/etc/profile文件 添加以下内容: if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi ---执行生效 source /etc/profile --创建目录 mkdir -p /u01/oracle/product/11.2.0 mkdir /u01/oracle/oradata mkdir /u01/inventory mkdir /u01/oracle/fast_recovery_area chown -R oracle:oinstall /u01/oracle chmod -R 775 /u01/oracle chown -R oracle:oinstall /u01/inventory chmod -R 775 /u01/inventory --上传1of7 2of7的linux oracle安装包到/opt/oracle下 chown -R oracle:oinstall /opt/oracle chmod 755 -R /opt/oracle su - oracle cd /opt/oracle unzip p13390677_112040_Linux-x86-64_1of7.zip && unzip p13390677_112040_Linux-x86-64_2of7.zip --编辑oracle环境变量 vi ~/.bash_profile ORACLE_BASE=/u01/oracle ORACLE_HOME=$ORACLE_BASE/product/11.2.0 ORACLE_SID=orcl PATH=$PATH:$ORACLE_HOME/bin export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH --修改静默文件 vi /opt/oracle/database/response/db_install.rsp 需要设置的选项如下: oracle.install.option=INSTALL_DB_SWONLY ORACLE_HOSTNAME=oracle UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/inventory SELECTED_LANGUAGES=en,zh_CN ORACLE_HOME=/u01/oracle/product/11.2.0 ORACLE_BASE=/u01/oracle oracle.install.db.InstallEdition=EE oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=dba DECLINE_SECURITY_UPDATES=true ---安装数据库软件 cd /opt/oracle/database ./runInstaller -silent -responseFile /opt/oracle/database/response/db_install.rsp -ignorePrereq --重要:用root执行下面两个脚本 As a root user, execute the following script(s): 1. /u01/inventory/orainstRoot.sh 2. /u01/oracle/product/11.2.0/root.sh Successfully Setup Software. --静默方式安装监听 netca /silent /responseFile /opt/oracle/database/response/netca.rsp --创建数据库 vi /opt/oracle/database/response/dbca.rsp 修改如下内容 GDBNAME= "orcl" SID ="orcl" SYSPASSWORD= "Oracle_123" SYSTEMPASSWORD= "Oracle_123" SYSMANPASSWORD= "Oracle_123" DBSNMPPASSWORD= "Oracle_123" DATAFILEDESTINATION=/u01/oracle/oradata RECOVERYAREADESTINATION=/u01/oracle/fast_recovery_area CHARACTERSET= "ZHS16GBK" TOTALMEMORY= "6550" ----TOTALMEMORY ="1638" 为1638MB,物理内存2G*80%。 dbca -silent -responseFile /opt/oracle/database/response/dbca.rsp
从以上安装步骤可以看出,主要步骤有:操作系统配置初始化、目录创建、环境变量配置、安装数据库软件、安装监听、创建数据库。首先需要按照oracle官方的建议值配置OS内核参数和用户资源限制参数,此外,和MySQL安装最大的区别在于多了安装数据库软件和安装监听这两个动作,MySQL官方提供了二进制包解压即安装,而ORACLE则需要调用静默安装脚本安装。ORACLE在创建数据库这一步等同于MySQL的初始化数据库,通过dbca完成这一步,也就生成了对应的数据文件和日志文件。而通过编辑dbca.rsp文件,可以定义数据文件目录、字符集、实例名、sys密码等数据库配置,在mysql中这些主要是通过my.cnf文件实现的。
三、ORACLE的启动
完成ORACLE的安装后,就可以通过sqlplus连接数据库,可以看到连接的是一个idle instance,意思就是闲置未启动的实例。这时候就需要通过startup命令来启动实例。
虽然启动数据库的命令非常简单,但是启动的三步骤却是需要理解的,这也是我当年学习oracle初期印象最深的地方。在启动的第一步骤,Oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置(如内存分配等设置),创建实例(INSTANCE),分配内存,启动后台进程。这时候数据库就到了nomount的状态,这也是启动实例的过程。观察ORACLE的告警日志,可以非常清晰的看到这一过程。从日志中可以看出,ORACLE读取的参数文件是spfile<ORACLE_SID>.ora,这也是ORACLE默认首选的参数文件。这里有一点要说一下,ORACLE_SID就是Oracle System Identifier的缩写,ORACLE_SID以环境变量的形式出现,当Oracle实例启动时,在操作系统上fork的进程就依据ORACLE_SID这个环境变量来创建,这就是SID的作用。而ORACLE实例后台进程的名称就是通过ORACLE_SID确定的。此外,在Oracle内部有个instance_name,用于标识数据库实例的名称,这个名称就是默认就是ORACLE_SID。除了instance_name,对于Oracle数据库更为重要的一个参数是DB_NAME,DB_NAME代表了实例即将挂接的数据库名称,关系到具体的物理文件。一个实例可以mount并打开任何数据库,但是同一时间一个实例只能打开一个数据库。一个数据库可以被一个或多个实例所mount并打开,比如在RAC环境下。
ORACLE启动的第二步,就是从nomount状态启动到mount状态,在这一步中ORACLE从参数文件中获得控制文件的位置信息,然后找到控制文件,并且根据控制文件中记录的数据文件位置进行数据文件的存在性判断。从参数文件中可以看出,控制文件一个放在数据区,一个放在闪回区,这两个控制文件的内容是完全一样的,这就是Oracle对控制文件的镜像安全保护。
在alert日志中,可以看到通过命令alter database mount对数据库完成了mount操作。
ORACLE启动的第三步,就是从mount状态到open状态,控制文件中记录了数据库中数据文件、日志文件的位置信息,检查点信息等重要信息,在数据库的Open阶段,Oracle根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查,如果不存在问题就可以正常打开数据库。在alert日志中,可以看到,通过alter database open命令进行数据库打开的操作,首先是读取redo log进行崩溃恢复操作,在日志中可以看到所前滚到的scn号。然后smon进程将undo表空间在线,并进行事务的回滚。在启动日志中记录了数据库的字符集:Database Characterset is ZHS16GBK,在每次数据库的启动过程中,Oracle都需要判断控制文件中记录的字符集和数据库中的字符集是否相符,如果相符,则记录如上一行日志;如果不相符合,则以数据库中的字符集为准更新控制文件中的字符集记录。
标签:文件,DBA,数据库,oracle,MySQL,ORACLE,--,u01 From: https://www.cnblogs.com/coygfly/p/18212719