首页
首页
文章目录
  1. 简介
  2. 服务器准备
  3. 规划
  4. 服务器安装
    1. 安装oracle linux 操作系统
    2. 系统分区
    3. 系统安装选择安装包
    4. oracle安装前的准备工作
    5. 集群的 Oracle Grid Infrastructure 的安装前任务
    6. oracle 安装
    7. 创建DATA和FRA磁盘组
    8. 安装oracle数据库
    9. 创建数据库
    10. 安装完后参数修改
    11. 查看rac数据库的dbid
    12. 创建数据库、表空间、临时表空间、rman
    13. 创建账户、删除、更新 、赋权
    14. 数据库的各种连接方式
    15. 数据库备份、还原的各种方式
      1. RMAN 备份
        1. 检查是否开启归档
        2. 开启归档方法
        3. 导出备份
        4. rman恢复
      2. exp/imp的基本用法
    16. 查询会话与结束会话
    17. 系统表空间视图作用
  5. 说明
  6. oracle性能分析与故障处理方法

oracle RAC 部署记录文档

简介

公司的DBA要离职了,领导要我来接手DBA的工作,由于项目上使用的是oracle,并且部署了RAC。公司安排我来到北京分公司来跟着DBA学习一段时间。

服务器准备

序号 本机IP 系统版本 配置需求 镜像 主机名
1 192.168.182.131/192.168.1.34 centos 6.5 根据实际需求来 OL6.5 x86_64 Dis.iso node1
2 192.168.182.132/192.168.1.35 centos 6.5 根据实际希求来 OL6.5 x86_64 Dis.iso node2

其中 192.168.182.0是直连线路,用作心跳线

规划

序号 节点 VIP Scan-ip
1 node1 192.168.1.36 192.168.1.38
2 node2 192.168.1.37 192.168.1.38

服务器安装

安装oracle linux 操作系统

系统分区

1
2
3
4
/boot  500M  
/home 100g
/ 1000g
swap 64g

系统安装选择安装包

  • (1)基本系统Basic System

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    需安装7个套件:

    基本Base, 默认已勾选

    兼容程序库Compatibility libraries, 需手动勾选

    硬件监控工具Hardware monitoring utilities, 默认已勾选

    大系统性能Large Systems Performance, 默认已勾选

    网络文件系统客户端Network file system client, 默认已勾选

    性能工具Performance Tools, 默认已勾选

    Perl支持Perl Support,默认已勾选
  • (2)服务器Servers

    1
    2
    3
    4
    5
    6
    7
    需安装三个套件:

    FTP服务器,用来传输文件,需手动勾选

    服务器平台Server Platform,默认已勾选

    系统管理工具System administration tool,需手动勾选
  • (3)桌面Desktops

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    需安装7个套件

    桌面Desktop,需手动勾选

    桌面平台Desktop Platform,需手动勾选

    字体Fonts,需手动勾选

    通用桌面General Purpose Desktop,需手动勾选

    图形管理工具Graphical Administration Tools,需手动勾选

    输入法Input Methods,需手动勾选

    X窗口系统X Window System,需手动勾选
  • (4)应用程序Applications

    1
    2
    3
    需安装1个套件:

    互联网浏览器Internet Browser,用于浏览网页,需手动勾选
  • (5)开发Development

    1
    2
    3
    4
    5
    需安装2个套件

    开发工具Development tools,需手动勾选

    附加开发Additional Development,需手动勾选

oracle安装前的准备工作

  • hosts文件配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    # out
    192.168.1.35 node2
    192.168.1.34 node1

    # priv
    192.168.182.132 node2-priv
    192.168.182.131 node1-priv

    # vip
    192.168.1.36 node1-vip
    192.168.1.37 node2-vip

    # scanip
    192.168.1.38 rac-scan
  • 关闭ipstables

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #检查防火墙状态
    service iptables status

    #可用下面的两条命令来关闭防火墙
    service iptables stop
    chkconfig iptables off

    #改完后确认
    service iptables status
  • 关闭selinux

查看selinux状态

1
getenforce

临时关闭与永久关闭

1
2
3
4
5
# 临时关闭
setenforce 0
# 永久关闭
vim /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled,保存后退出
  • 确保 RAC 节点名没有出现在环回地址中
    确保 /etc/hosts 文件的环回地址中不包含节点名(node1 或 node2)。如果计算机名出现在环回地址条目中,如下所示:
    1
    127.0.0.1  node1 localhost.localdomain localhost

需要将其删除,如下所示:

1
127.0.0.1 localhost.localdomain localhost
  • 配置集群时间同步服务 — (CTSS)
    oracle 11g rac 安装的过程中如果检测到没有ntp服务器,oracle会自动安装ctss同步服务

首先停止并删除ntp服务

1
2
3
4
5
/sbin/service ntpd stop
chkconfig ntpd off
mv /etc/ntp.conf /etc/ntp.conf.original
# 还要删除以下文件:
rm /var/run/ntpd.pid

在oracle安装完以后,要确认 ctssd 处于活动状态,请作为网格安装所有者 (grid) 输入以下命令:

1
2
3
4
[grid@node1 ~]$ crsctl check ctss
CRS-4701: The Cluster Time Synchronization Service is in Active mode.
CRS-4702: Offset (in msec): 0
`

在节点2执行相应操作

重启服务器,让配置生效

  • 创建任务角色划分操作系统权限组、用户和目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
groupadd -g 200 oinstall 
groupadd -g 201 dba
groupadd -g 202 oper
groupadd -g 203 asmadmin
groupadd -g 204 asmoper
groupadd -g 205 asmdba
useradd -u 200 -g oinstall -G dba,asmdba,oper oracle
useradd -u 201 -g oinstall -G asmadmin,asmdba,asmoper,dba,oper grid
passwd oracle
passwd grid

# 别忘记给各个账户设置密码这边设置的全是123456

mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory/
chmod -R 775 /u01/app/oraInventory/
mkdir -p /u01/grid/11.2.0
chown -R grid:oinstall /u01/grid/11.2.0
chmod -R 775 /u01/grid/11.2.0
mkdir -p /u01/app/oraInventory/
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/cfgtoollogs
mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
  • 加环境变量给双机ORACLE用户

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # su - oracle
    # vi .bash_profile
    export EDITOR=vi
    export ORACLE_SID=rac1
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
    umask 022

    # source .bash_profile
  • 加环境变量给双机GRID用户

1
2
3
4
5
6
7
8
9
10
# su - grid
# vi .bash_profile
export EDITOR=vi
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/grid/11.2.0
export GRID_HOME=/u01/grid/11.2.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
umask 022

注意 node2 环境变量中修改实例名

  • 验证用户 nobody 存在

安装软件之前,执行以下过程,以验证在两个 Oracle RAC 节点上存在用户 nobody:

要确定该用户是否存在,输入以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 # id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
```
如果该命令显示了 nobody 用户的信息,则无需创建该用户。
如果用户 nobody 不存在,则输入以下命令进行创建:
```sh
# /usr/sbin/useradd nobody
```
在集群中的所有其他 Oracle RAC 节点上重复此过程。

- 修改内核参数
```sh
# vi /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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 = 1048586

# sysctl -p
# 使生效内核参数
  • 修改用户访问权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # vi /etc/security/limits.conf

    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240
    grid soft nproc 2047
    grid hard nproc 16384
    grid soft nofile 1024
    grid hard nofile 65536
    grid soft stack 10240
  • vi /etc/pam.d/login 修改登录回话

    1
    session required /lib/security/pam_limits.so
1
2
3
4
5
6
7
8
9
10
# vi /etc/profile  
if [ /$USER = "oracle" ] || [ /$USER = "grid" ]; then
if [ /$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
  • 配置 RAC 节点给双机ORACLE,GRID建立信任关系
    oracle 用户的信任关系建立 操作需要在每个节点执行
    1
    2
    [oracle@rac1 ~]$su - oracle
    [oracle@rac1 ~]$ mkdir .ssh

建立秘钥

1
2
3
4
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa
[oracle@rac1 ~]$ ls .ssh
id_dsa id_dsa.pub id_rsa id_rsa.pub

node1执行

1
2
3
4
5
# 建立认证文件
cat .ssh/id_rsa.pub >>.ssh/authorized_keys
cat .ssh/id_dsa.pub >>.ssh/authorized_keys
ssh node2 cat .ssh/id_rsa.pub >>.ssh/authorized_keys
ssh node2 cat .ssh/id_dsa.pub >>.ssh/authorized_keys

将包含所有公共密钥的 authorized_keys 文件复制到集群中的每个节点

1
scp .ssh/authorized_keys node2:~/.ssh/

验证

1
2
3
4
5
#      私钥链接  一定双机所有都需要验证通过
ssh node2-priv date
ssh node1-priv date
ssh node1 date
ssh node2 date

node2执行

1
2
3
4
ssh node1-priv date
ssh node2-priv date
ssh node1 date
ssh node2 date

grid用户需要执行相同操作,由于过程一样,这里就不记录,只需切换到grid用户下执行即可

  • 配置存储
ASM磁盘组 大小 ASM磁盘
CRS 20G CRS1
DATA 20G DATA1
FRA 20g FRA1

由于测试 这边每个分了20G

  • 在 Oracle RAC 节点上配置 iSCSI 卷

由于之前在安装系统时已经将iscsi-initiator-utils 安装,所以不需要在单独安装。

我们直接配置服务设置开机启动即可

1
2
3
4
5
[root@node1 ~]# service iscsid start
Turning off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@node1 ~]# chkconfig iscsid on
[root@node1 ~]# chkconfig iscsi on

检查是否设置为开机启动

1
chkconfig --list | grep iscsi

node1 和node2 都要执行

通过iscsiadm命令行接口发现网络存储服务器上的所有可用目标。这应该在两个 Oracle RAC 节点上执行,以检验配置是否正常工作:

使用

1
iscsiadm -m discovery -t sendtargets -p 192.168.1.50

命令

返回结果

1
2
3
4
5
6
7
[root@node1 log]# iscsiadm -m discovery -t sendtargets -p 192.168.1.50
192.168.1.50:3260,1 iqn.2006-01.com.openfiler:scn.fra
192.168.182.135:3260,1 iqn.2006-01.com.openfiler:scn.fra
192.168.1.50:3260,1 iqn.2006-01.com.openfiler:scn.data
192.168.182.135:3260,1 iqn.2006-01.com.openfiler:scn.data
192.168.1.50:3260,1 iqn.2006-01.com.openfiler:scn.crs
192.168.182.135:3260,1 iqn.2006-01.com.openfiler:scn.crs

手动登录到 iSCSI 目标

1
2
3
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.fra -l
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.data -l
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.crs -l

返回结果

1
2
3
4
5
6
[root@node1 log]# iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.fra -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:scn.fra, portal: 192.168.1.50,3260] (multiple)
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:scn.fra, portal: 192.168.182.135,3260] (multiple)
Login to [iface: default, target: iqn.2006-01.com.openfiler:scn.fra, portal: 192.168.1.50,3260] successful.
Login to [iface: default, target: iqn.2006-01.com.openfiler:scn.fra, portal: 192.168.182.135,3260] successful.
[root@node1 log]#

配置自动登录iSCSI

在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。和上面描述的手动登录过程一样,不过在这里加了2个参数。

1
2
3
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.fra -p 192.168.1.50 --op update -n node.startup -v automatic
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.data -p 192.168.1.50 --op update -n node.startup -v automatic
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.crs -p 192.168.1.50 --op update -n node.startup -v automatic

通过 fdisk -l 可以查看到硬盘

创建永久性本地 SCSI 设备名称,使用下面命令可以查看链接

1
ls /dev/disk/by-path -al

一些iSCSI的基本命令

查看主机上iscsi存储映射

1
iscsiadm -m node

删除不需要的映射

1
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:scn.crs -p 192.168.182.135:3260

登出已登录的映射磁盘

1
iscsiadm -m node -T iqn.2006-01.com.openfiler:scn.crs -p 192.168.182.135:3260 -u
1
2
3
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:scn.crs -p 192.168.182.135:3260
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:scn.data -p 192.168.182.135:3260
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:scn.fra -p 192.168.182.135:3260

创建新的规则文件

在两个 Oracle RAC 节点上创建以下规则文件 /etc/udev/rules.d/55-openiscsi.rules
新建

1
vim /etc/udev/rules.d/55-openiscsi.rules

内容为

1
KERNEL=="sd*",BUS=="scsi",PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c/part%n",OWNER="grid",GROUP="asmadmin",MODE="0660"

创建在接收该事件时将调用的 UNIX SHELL 脚本

(1)先在服务器上创建一个目录,用于存储 udev 脚本:

1
mkdir -p /etc/udev/scripts

(2)在服务器上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:
编辑

1
# vi /etc/udev/scripts/iscsidev.sh

内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/session*/targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi
# Check if QNAP drive
check_qnap_target_name=${target_name%%:*}
if [ $check_qnap_target_name = "iqn.2004-04.com.qnap" ]; then
target_name=`echo "${target_name%.*}"`
fi
echo "${target_name##*.}"

运行udev

1
/sbin/start_udev

(3)将刚才创建的shell脚本修改为可执行文件:

1
chmod 755 /etc/udev/scripts/iscsidev.sh

说明:这个脚本只使用于这次实验的系统,oracle linux 6.5 ,若在其他系统上使用,需要更改targetname文件的相关目录。
(4)在服务器上重新启动 iSCSI 服务:

1
service iscsi restart

(5)验证

1
2
3
4
5
[root@node1 iscsi_host]# ls -l /dev/iscsi/
总用量 0
drwxr-xr-x 2 root root 60 3月 14 15:59 crs
drwxr-xr-x 2 root root 60 3月 14 15:59 data
drwxr-xr-x 2 root root 60 3月 14 15:59 fra
  • 在 iSCSI 卷上创建分区

现在,我们需要在每个 iSCSI 卷上创建一个占用整个卷大小的主分区。下表列出了将要创建的三个 ASM 磁盘组及其将包含的 iSCSI 卷:

Oracle 共享驱动器配置信息

文件类型 ASM 磁盘组名称 iSCSI 目标(短)名称 ASM 冗余 大小 ASMLib 卷名
OCR 和表决磁盘 +CRS crs1 External 4GB ORCL:CRS1
Oracle 数据库文件 +DATA data1 External 10GB ORCL:DATA1
Oracle 快速恢复区 +FRA fra1 External 10GB ORCL:FRA1
  • 要在每个 iSCSI 卷上创建单个分区,只能从 Oracle RAC 集群中的一个节点上进行!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@node1 crs]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x84599ce7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-28096, default 1): w^H
First cylinder (1-28096, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-28096, default 28096):
Using default value 28096

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

fdisk /dev/sdc 执行相同操作
fdisk /dev/sdd 执行相同操作
验证分区: 在rac2 执行fdisk -l查看

最后,您应该在两个 Oracle RAC 节点上运行以下命令,以验证 udev 为每个新分区创建了新的符号链接:

1
cd /dev/disk/by-path; ls -l *openfiler* | awk '{FS=" "; print $9 " " $10 " " $11}'
  • 为 Oracle 配置 Linux 服务器

内存和交换空间考虑事项,若交换空间太小

1
2
3
4
5
6
7
8
9
10
11
free -m 查看内存 
df -h 查看大小
mkdir /swapimage 创建SWAP目录
cd /swapimage 进入目录
dd if=/dev/zero of=/swapimage/swap bs=1024 count=1024000 常见1G大文件
df -h
mkswap /swapimage/swap
swapon /swapimage/swap
free -m
vi /etc/fstab 增加swap信息开机生效
/swapimage/swap swap swap defaults 0 0
  • 安装 ASMLib 2.0 程序包

下载地址:http://www.oracle.com/technetwork/server-storage/linux/asmlib/rhel6-1940776.html

两个节点都需要安装
[root@rac1 soft]# rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm
[root@rac1 soft]# rpm -ivh oracleasmlib-2.0.12-1.el6.x86_64.rpm

配置 ASMLib
两个节点都需要执行

1
2
3
4
5
6
7
8
[root@node2 /]# oracleasm configure
ORACLEASM_ENABLED=false
ORACLEASM_UID=
ORACLEASM_GID=
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node1 oracle]# service oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
[root@node1 oracle]#
  • 为 Oracle 创建 ASM 磁盘
    创建 ASM 磁盘只需在 RAC 集群中的一个节点上以 root 用户帐户执行,实际中crs和vote最好3个
    ,data两个,fra两个。

在node1上执行

1
2
3
4
5
6
7
8
9
10
[root@node1 by-path]#  oracleasm createdisk CRS /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@node1 by-path]# oracleasm createdisk DATA /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@node1 by-path]# oracleasm createdisk FRA /dev/sdb1
Writing disk header: done
Instantiating disk: done
[root@node1 by-path]#

扫描

1
2
[root@node1 by-path]# service oracleasm scandisks
Scanning the system for Oracle ASMLib disks: [ OK ]

显示列表

1
2
3
4
[root@node1 by-path]# service oracleasm listdisks
CRS
DATA
FRA

在node2执行

1
2
service oracleasm scandisks
service oracleasm listdisks

集群的 Oracle Grid Infrastructure 的安装前任务

在grid用户下,进入grid解压目录,执行检查命令

./runcluvfy.sh stage -pre crsinst -n node1,node2 -fixup -verbose

解决所有未通过的检查

我这里只提示了缺失libaio-devel(x86_64)-0.3.107

下载上传后root下安装

在执行检查

如果中文乱码 执行 export LANG=C

oracle 安装

切换到grid用户

执行

[grid@node1 grid]$ ./runInstaller

需要操作处

1、在此处增加另一个节点

install_oracle1

2、在两台服务器root下执行图中脚本

install_oracle2

3、当脚本执行完成后执行一下命令确认是否安装成功

检查 CRS 状态

1
2
3
4
5
6
7
[oracle@node1 ~]$ su - grid
密码:
[grid@node1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

online表示正常。

检查 Clusterware 资源

注:在 Oracle Clusterware 11g 第 2 版 (11.2) 中不再使用 crs_stat 命令。

1
crs_stat -t -v  / crsctl status res -t

检查集群节点

1
[grid@racnode1 ~]$ olsnodes -n

检查两个节点上的 Oracle TNS 监听器进程

1
ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'

确认针对 Oracle Clusterware 文件的 Oracle ASM 功能

1
[grid@racnode1 ~]$ srvctl status asm -a

检查 Oracle 集群注册表 (OCR)

1
[grid@racnode1 ~]$ ocrcheck

检查表决磁盘

1
[grid@racnode1 ~]$ crsctl query css votedisk

4、回到服务器继续安装下一步即可

创建DATA和FRA磁盘组

在grid用户下

1
# asmca

在添加 DATA和FRA

之后查看磁盘组 命令为:

1
asmcmd ls -ls

返回显示:

1
2
3
4
5
6
[grid@node1 ~]$ asmcmd ls -ls
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 22079 21683 0 21683 0 Y CRS/
MOUNTED EXTERN N 512 4096 1048576 25023 24928 0 24928 0 N DATA/
MOUNTED EXTERN N 512 4096 1048576 28095 28000 0 28000 0 N FRA/
[grid@node1 ~]$

安装oracle数据库

在oracle账户下执行

install_oracle3

注意俩台node需要执行的脚本

install_oracle4

创建数据库

在oracle安装数据库

1
2
# 在roacle账户下执行
dbca

下一步下一步

配置数据库实例名称
install_oracle5

下一步设置密码

install_oracle6

选择数据文件位置

install_oracle7

设置闪回区,大小为总量的90% ,开启归档

install_oracle8

可选参数,直接下一步

设置内存为系统百分之60以上即可,打开自动管理内存、

设置进程为2000

设置字符集 zhs16gbk

install_oracle9

下一步下一步,点击完成即可

安装完后参数修改

  • 修改ASM内存大小(根据情况调整大小物理64G内存改成4G)

进入grid用户下执行:

memory_max_target(它为静态参数,修改完成后需要重启实例)
memory_target(它为动态参数,不需要重启实例)

2、查看ASM内存,并修改memory_max_target,由1G变为4G

1
2
3
4
sqlplus / as sysasm
show parameter mem;
alter system set memory_max_target=1070M scope=spfile sid='*';
exit

查看crs状态(因为测试数据库实例与监听没有启动,如果生产环境中,建议一个个去停,保证业务正常运行)

1
crsctl stat res -t

停crs 全部节点,生产中可以一个一个停,需要root用户

1
2
3
4
5
# 单个节点root账户下 进入/u01/grid/11.2.0/bin/目录
cd /u01/grid/11.2.0/bin/
./crsctl stop cluster
# 这是停止所有节点
crsctl stop cluster -all

启动crs 全部节点,需要root用户

1
crsctl start  cluster -all

查看crs状态

1
crsctl stat res -t

2、memory_target可以动态修改大小,不超过memory_max_target的值即可,需要分别在两个asm实例修改

节点上查看asm的mem参数
show parameter mem;

memory_target可以动态修改大小,不超过memory_max_target的值即可,需要分别在两个asm实例修改

1
2
alter system set memory_target=1600m scope=both  sid='+ASM1';
alter system set memory_target=1600m scope=both sid='+ASM2';
  • 开启归档
    1、在存储上创建归档文件夹在
    1
    2
    3
    4
    su - grid
    asmcmd
    cd FRA
    mkdir ARCH

2、修改归档路径参数,在一个节点执行即可。

1
2
3
4
su - oracle
sqlplus / as sysdba
alter system set log_archive_dest_1='location=+FRA/ARCH' scope=spfile sid='*';
exit

3、关闭数据库所有节点

1
2
3
4
5
6
su - oracle
[oracle@node1 ~]$ srvctl stop database -d rac   # 关闭数据库所有节点
[oracle@node1 ~]$ srvctl status database -d rac  # 查看数据库状态
实例 rac1 没有在 node1 节点上运行
实例 rac2 没有在 node2 节点上运行
[oracle@node1 ~]$

4、开启数据库归档

如果数据库开始为归档则直接开始即可 srvctl start database -d rac,查看归档状态

如果数据库开始为非归档需要继续执行

将一个节点开启到mount状态,进入mount节点的sqlplus执行

1
2
3
4
5
sqlplus / as sysdba
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

查看节点归档状态

1
archive log list

在开启另一个节点

1
2
su - oracle
srvctl start instance -d rac -i rac2

在检查状态

1
2
su - oracle
srvctl status database -d rac

查看集群状态

1
2
su - gird
crsctl stat res -t

查看两个节点的归档状态

1
2
3
4
5
6
7
8
9
su - oracle
archive log list
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +FRA/arch
Oldest online log sequence 14
Next log sequence to archive 15
Current log sequence 15

查看rac数据库的dbid

所有v$ 字典视图
所有gv$ 集群字典视图

1
select dbid from v$database;

创建数据库、表空间、临时表空间、rman

  • 查询数据文件存放位置

    1
    2
    desc dba_data_files; # 查看数据文件表结构
    select file_name from dba_data_files; # 查看数据文件存放路径
  • 创建表空间

    1
    create tablespace 表空间名 datafile '+DATA/rac/datafile/数据文件路径.dbf' size 4g autoextend on next 1g maxsize unlimited extent management local segment space management auto;
  • 查看所有已存在的表空间

    1
    select * from v$tablespace;

创建账户、删除、更新 、赋权

  • 创建用户

    1
    create user 用户名 identified by 密码 account unlock; # 创建一个账户设置密码并解锁该账户
  • 查询所有用户

    1
    2
    desc dba_users; # 查询用户表结构
    select username from dba_users;
  • 授权

    1
    grant connect,resource,dba to 用户名;   # 给账户赋权 connect 链接、resource 资源表空间等、 dba 所有权限。
  • 创建只读账户

    1
    grant select any tables to 用户名;
  • 删除账户

    1
    drop user 用户名 cascade;
  • 修改用户默认表空间

    1
    alter user 用户名 default tablespace 表空间名;
  • 创建表

    1
    create table 表名 (id number,name varchar2(100));
  • 插入数据到表

    1
    insert into  表名 values(1,'xiaomaguohe');
  • 备注
    在创建表和插入数据库别忘记commit

数据库的各种连接方式

  • sqlplus 链接正常用户
    1
    sqlplus 用户名/密码

数据库备份、还原的各种方式

RMAN 备份
检查是否开启归档
  • 简单描述
    rman备份,首先下需要确认是否开了归档,如果没有开启是无法使用rman备份恢复的。

-查看是否开启归档

1
archive log list

返回结果

1
2
3
4
5
6
7
8
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination +FRA/arch
Oldest online log sequence 50
Next log sequence to archive 51
Current log sequence 51
SQL>

表示已经开启

开启归档方法
  • 创建数据库相关信息备份文件

    1
    2
    3
    4
    5
    6
    7
    mkdir /backup
    chown oracle:oinstall backup
    su -oracle
    sqlplus / as sysdba
    create pfile='/backup/init.ora' from spfile;
    exit
    exit
  • 当前日志归档,在备份前先把当前日志归档一次,以便保留最新的数据

    1
    2
    alter system switch logfile;  				# 切换联机日志
    alter system archive log current; # 归档当前联机日志
  • rman 备份

    1
    2
    su - oracle
    rman target /

返回显示,如果有 DBID=一串数字表示正常

1
2
3
4
5
[oracle@node1 ~]$ rman target / 
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Mar 16 23:43:52 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: RAC (DBID=2558856765)
RMAN>

显示rman工具的配置环境

1
RMAN> show all
1
2
3
4
5
6
RMAN> configure channel 1 device type disk connect 'sys/123456@192.168.1.34:1521/rac';
RMAN> configure channel 2 device type disk connect 'sys/123456@192.168.1.35:1521/rac';
SQL> alter database enable block change tracking using file '+FRA/RMAN/block_change_track'; # 在oracle sqlplus中执行
RMAN> configure backup optimization on;
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type disk to '+FRA/RMAN/%F';

控制备份天数,默认7天

1
configure retention policy to recovery window of 21 days;
导出备份

rman导出备份

1
2
3
4
5
6
7
8
9
10
11
12
run{
sql'alter system switch logfile';
allocate channel c1 type disk connect 'sys/123456@192.168.1.34:1521/rac';
allocate channel c2 type disk connect 'sys/123456@192.168.1.35:1521/rac';
crosscheck backup;
crosscheck archivelog all;
backup as compressed backupset incremental level 0 format '+FRA/RMAN/%d_%T_%U_0.bak' database plus archivelog;
delete noprompt obsolete;
delete noprompt archivelog all completed before 'sysdate-30';
release channel c1;
release channel c2;
}
rman恢复

1、首先停止所有数据库rac

1
[oracle@node1 backup]$ srvctl stop database -d rac

2、更改数据库为mount模式

1
[oracle@node1 backup]$ srvctl start database -d rac -o mount

3、检查数据库是否为mountd

1
[grid@node1 ~]$ crsctl status res -t

返回结果中存在

1
2
3
ora.rac.db
1 ONLINE INTERMEDIATE node1 Mounted (Closed)
2 ONLINE INTERMEDIATE node2 Mounted (Closed)

4、进入rman恢复数据库

1
RMAN>restore database 6;

5、根据归档恢复到最新数据

1
RMAN>recover database 6;

6、将数据库db从mounted改为open

1
2
3
4
5
6
7
[grid@node1 ~]$ srvctl stop database -d rac
[grid@node1 ~]$ srvctl start database -d rac

# 检查数据库是否正常
su - oracle
sqlplus xiaoma/123456
select * from user_tables;

7、检查

1
[grid@node1 ~]$ crsctl status res -t   # 检查是否为open状态
exp/imp的基本用法
  • exp 导出

    1
    2
    3
    4
    5
    6
    7
    8
    9
    --备份某几张表
    exp smsc/smsc file=/data/oracle_bak/dmp/bakup0209_2.dmp tables=[Math Processing Error]
    --备份整个数据库
    --方式1
    exp smsc/smsc file=/data/oracle_bak/dmp/bakupsmmc0209_2.dmp full=y
    --方式2
    exp cop/cop@133.96.84.39:1521/coprule file=/home/oracle/cop_20160902.dmp owner=cop log=/home/oracle/cop.log
    --本机上
    exp zop/zop@orcl file= D:\zop_bak.dmp owner=zop log=D:\zop_ba.log
  • imp 导入

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    --数据的导入  
    --1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
    imp system/manager@TEST file=d:\daochu.dmp
    imp aichannel/aichannel@TEST full=y file=d:\datanewsmgnt.dmp ignore=y
    --上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
    -- 在后面加上 ignore=y 就可以了。
    --2 将d:daochu.dmp中的表table1 导入
    imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

    --基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
    注意:
    操作者要有足够的权限,权限不够它会提示。
    数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

查询会话与结束会话

1
2
select * from gv$session;							# 可以加where查询特定账户
alter system kill session 'SID,SERIAL#,@INST_ID'; # kill掉该会话

系统表空间视图作用

1
2
3
4
5
6
v$tablespace        # 表空间字典视图
dba_tablespaces # 所有的表空间相关信息
dba_users # 所有的用户相关信息
gv$session # 所有会话字典视图
gv$log # 日志
gv$logfile # 日志文件

说明

gv$ 是集群字典
v$ 是单实例字典

oracle性能分析与故障处理方法

  • 查看log日志
    目录
    1
    /u01/app/oracle/diag/rdbms/rac/rac1/trace

日志会随着使用的时间变长而增大。

建议三个月备份一次。

  • 生成AWR方法
    sql脚本路径
    1
    2
    3
    1、登录到oracle中
    ```sh
    sqlplus / as sysdba

2、执行

1
@/u01/app/oracle/product/11.2.0/db_1/rdbms/admin/awrrpt.sql

根据回复输入相应内容即可。

  • 查看实时的oracel连接

1、通过日志方法

该路径下的log.xml

1
/u01/app/oracle/diag/rdbms/rac/rac1/alert

当有新的链接加入时,该文件会增加

1
2
3
4
5
6
7
8
9
10
11
[root@node1 alert]# tail -f log.xml 
<txt> Current log# 1 seq# 57 mem# 1: +FRA/rac/onlinelog/group_1.257.970874753
</txt>
</msg>
<msg time='2018-03-20T15:00:26.227+08:00' org_id='oracle' comp_id='rdbms'
client_id='' type='UNKNOWN' level='16'
host_id='node1' host_addr='192.168.1.34' module=''
pid='4439'>
<txt>Archived Log entry 213 added for thread 1 sequence 56 ID 0x9884fb3a dest 1:
</txt>
</msg>

类似于以上的消息

2、通过sql语句

1
select * from v$session where USERNAME='用户名';
支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫