本篇内容介绍了“Oracle 11G RAC集群安装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
数据库版本:Oracle 11g
grid版本:grid 11g
系统版本:Centos 6.5
如果网卡的设备名两个节点的名称不一致,在安装时不会出现错误,但在安装oracle数据库软件时会报错,CRS运行不正常。
因此在安装grid前发现网卡名称不一致要进行更改,方法为:
例如两个节点的的第二张网卡名称不一致,节点rac1的为eth2,节点rac2的为eth3
现在将rac2的网卡名eth3更改为eth2:
1.将节点rac2的第二张网卡的停掉:ifdown eth3
2.将rac2的第二张网卡的配置文件 ifcfg-eth3 名字改为 ifcfg-eth2,vim打开后将 DEVICE=eth3 改为 DEVICE=eth2.
3.将/etc/udev/rules.d/70-persistent-net.rules 中的NAME=“eth3” 修改为NAME=“eth2”
例如:
[root@rac1 network-scripts]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:34:5b:13", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:52:b8:54", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
4.将rac2主机重启后设备名就改为eth2,与节点rac1网卡名称一样了。
[root@rac1 ~]# cat /etc/hosts #public-ip公网ip 172.16.140.146 rac1 172.16.140.247 rac2 #priv-ip私网ip 186.18.6.222 rac1-priv 186.18.6.186 rac2-priv #vip 172.16.140.99 rac1-vip 172.16.140.98 rac2-vip #scan-ip 172.16.140.97 rac-scan
PS: Oracle
RAC集群安装需要配置网络包含了公网IP,VIP,私网IP与scan-ip,其中公网IP,VIP,私网IP在两个节点上都需要,而scan-ip只需要一个。
其中公网IP和vip都是可以正常对外访问,私网IP是为了集群各个节点之间联系使用,私网IP顾名思义就是自己用的,因此网段设置并没有特别要求,不冲突即可。
scan-ip网段也是可以正常对外访问的。集群安装后或自动配置到主节点的网卡上显示。具体ip功能以后另做介绍。
现在概括的说,两节点的Oracle
RAC集群需要跟网络工程师申请5个正常访问网段的IP地址,自己再配置私网IP地址,安装前公网IP地址和私网IP地址都可以在系统看到,VIP和scan-ip是在集群安装完成后自动配置到网卡上的。
(1)再节点主机上添加用户和组(每个节点都需要创建):
[root@rac1 ~]# groupadd -g 1000 oinstall [root@rac1 ~]# groupadd -g 1200 asmadmin [root@rac1 ~]# groupadd -g 1201 asmdba [root@rac1 ~]# groupadd -g 1202 asmoper [root@rac1 ~]# groupadd -g 1300 dba [root@rac1 ~]# groupadd -g 1301 oper [root@rac1 ~]# useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid -s /bin/bash grid [root@rac1 ~]# useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash oracle
(2)将用户grid添加到dba组:
[root@rac1 app]# gpasswd -a grid dba Adding user grid to group dba
(3)修改用户grid和oracle的密码(所有节点):
[root@rac1 ~]passwd oracle [root@rac1 ~]passwd grid
(4)确定nobody用户的信息:
[root@rac1 ~]# id nobody uid=99(nobody) gid=99(nobody) groups=99(nobody)
PS: 此用户无需创建,如果不存在,进行手工创建:
[root@rac1 ~]# /usr/sbin/useradd nobody
(5)禁用防火墙和SELNUX (所有节点)
[root@rac1 ~]service iptables status [root@rac1 ~]service iptables stop [root@rac1 ~]chkconfig iptables off [root@rac1 ~]chkconfig iptables --list
(6)设置/etc/selinux/config 文件,将SELINUX 设置为disabled。
[root@rac1 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
PS: 我处理的环境都是内网,并不连接互联网,因此时间同步使用的是集群自身的时间同步方式。
在 11gR2 中,RAC 在安装的时候,时间同步可以用两种方式来实现:
NTP --Linux系统的时间同步服务器
CTSS --集群自身的时间同步
当安装程序发现 NTP协议处于非活动状态时,安装集群时间同步服务将以活动模式自动进行安装并通过所有节点的时间。
如果发现配置了 NTP ,则以观察者模式启动集群时间同步服务,Oracle Clusterware 不会在集群中进行活动的时间同步。
Oracle 集群时间同步服务 (ctssd) 旨在为那些 Oracle RAC 数据库无法访问 NTP服务的组 织提供服务。
这里我们使用CTSS.oracle也建议使用集群内部时间同步的方式:
–配置CTSS
使用集群时间同步服务在集群中提供同步服务,需要卸载网络时间协议 (NTP) 及其配置。
要停用 NTP服务,必须停止当前的 ntpd服务,从初始化序列中禁用该服务,并删 除 ntp.conf 文件。
要在Linux上完成这些步骤,以 root用户身份在所有 Oracle RAC节点上运行以下命令:
/sbin/service ntpd stop Shutting down ntpd: [ OK ]
既有可能会关闭失败,不过无所谓
chkconfig ntpd off mv /etc/ntp.conf /etc/ntp.conf.original chkconfig ntpd --list ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
还要删除以下文件:
rm /var/run/ntpd.pid
(1)集群使用ASM存储方式,如节点挂载的是裸设备,通过fdisk -l查看设备:
PS:以下输出是我安装的实际用的机器中的磁盘配置,这种磁盘路径操作起来是很方便的,但是这种磁盘挂载路径大多出现在虚拟云服务器上,如果是实体机,则由于存储做了多链路优化,挂载路径就不一样了,udev的配置文件处理则无法使用如下方法来生成,至于实体机多链路存储挂载的共享存储如何做UDEV,我会额外写一个来做介绍。
[root@rac1 ~]# fdisk -l Disk /dev/sda: 53.7 GB, 53687091200 bytes 255 heads, 63 sectors/track, 6527 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0004d5d5 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 548 4194304 82 Linux swap / Solaris Partition 2 does not end on cylinder boundary. /dev/sda3 548 6528 48028672 83 Linux Disk /dev/sdb: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 2074 * 512 = 1061888 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdc: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 2074 * 512 = 1061888 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdd: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 2074 * 512 = 1061888 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sde: 1073 MB, 1073741824 bytes 34 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 2074 * 512 = 1061888 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdg: 6308 MB, 6308233216 bytes 195 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 12090 * 512 = 6190080 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdf: 6308 MB, 6308233216 bytes 195 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 12090 * 512 = 6190080 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdh: 6308 MB, 6308233216 bytes 195 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 12090 * 512 = 6190080 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdi: 6308 MB, 6308233216 bytes 195 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 12090 * 512 = 6190080 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdj: 6308 MB, 6308233216 bytes 195 heads, 62 sectors/track, 1019 cylinders Units = cylinders of 12090 * 512 = 6190080 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
PS:
磁盘挂载这里啰嗦几句:在挂载共享磁盘前跟系统工程师沟通,提前划分磁盘大小,主要是用于安装grid的vote盘,我在安装时选择划分三块30G左右的磁盘来安装grid(vote磁盘组使用normal冗余,三块即可),然后其他磁盘考虑以后磁盘io避免热点,尽量不是一整块磁盘挂载。
另外12c的rac要求vote磁盘组大小要比11g要求大,如果后续会考虑升级12C的RAC,可以将用于vote磁盘组的三快盘容量加大,每个50-100G即可。
(2)检查所有节点的挂载磁盘的scsi开头的盘号是否一致,命令是:
[root@rac1 ~]# ll /dev/disk/by-id [root@rac2 ~]# ll /dev/disk/by-id
在此只要使用udev 映射成grid可以识别的磁盘
(3)在使用fdisk -l中查看的设备名字母的编号(除了用于安装系统的盘,一般是sda),执行下列脚本:
[root@rac1 ~]# for i in b c d e f g h i j ; > do > echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"" > done KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45525936676145692d66374e542d476c666e", NAME="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45526a6d47665a522d6f7a39642d65674f47", NAME="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45525a574f6573662d6a4c59642d63375933", NAME="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c4552324f6d38394d2d525835432d56415337", NAME="asm-diske", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45526d7636645a542d577636452d62375874", NAME="asm-diskf", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c45527269467344372d644635642d32527033", NAME="asm-diskg", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c4552735232776e502d674542432d75787338", NAME="asm-diskh", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c455250456471356e2d534170302d65656262", NAME="asm-diski", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="14f504e46494c4552386f6a4e56632d4f6661442d32765a54", NAME="asm-diskj", OWNER="grid", GROUP="asmadmin", MODE="0660"
(4)进入到udev目录中
[root@rac1 ~]]# cd /etc/udev/rules.d/ [root@rac1 ~]# vim 99-oracle.rules
将输出的内容全部拷贝到99-oracle.rules中,拷贝时一定要确认拷贝完全与命令输出一致。此文件一般是不存在的,手动创建即可。
执行命令:
[root@rac1 ~]# start_udev 正在启动 udev: [确定]
执行命令成功后查看:
[root@rac1 ~]# ll /dev/asm* brw-rw---- 1 grid asmadmin 8, 16 1月 5 10:47 /dev/asm-diskb brw-rw---- 1 grid asmadmin 8, 32 1月 5 10:47 /dev/asm-diskc brw-rw---- 1 grid asmadmin 8, 48 1月 5 10:47 /dev/asm-diskd brw-rw---- 1 grid asmadmin 8, 64 1月 5 10:47 /dev/asm-diske brw-rw---- 1 grid asmadmin 8, 80 1月 5 10:47 /dev/asm-diskf brw-rw---- 1 grid asmadmin 8, 96 1月 5 10:47 /dev/asm-diskg brw-rw---- 1 grid asmadmin 8, 112 1月 5 10:47 /dev/asm-diskh brw-rw---- 1 grid asmadmin 8, 128 1月 5 10:47 /dev/asm-diski brw-rw---- 1 grid asmadmin 8, 144 1月 5 10:47 /dev/asm-diskj
PS:
集群之所以在共享磁盘挂在后无法识别,主要是挂在的磁盘的属主和属组是root,grid用户无权限访问,因此要想让grid和oracle识别这些挂载的磁盘必须将磁盘修改权限,但是共享磁盘的挂载方式会在主机重启后重新去映射,因此,如果手动去直接修改共享磁盘的权限,在主机重启后权限又会变成root管理员权限,udev的方式是直接将磁盘重新修改权限后映射的方式写到规则中(rules)。
另一种处理方式可以通过将修改权限的命令写到主机重启后访问的最后一个文件中去,让系统自动每次如果主机系统重启都会执行。已实现共享磁盘的访问。也就是裸设备使用raw方式处理共享磁盘。
使用的是Linux的 raw 命令
例如:
[root@rac1 ~]cat /etc/rc.loca # Oracle Cluster OCRDG ##### chown grid:asmadmin /dev/mapper/mpathb chown grid:asmadmin /dev/mapper/mpathc chown grid:asmadmin /dev/mapper/mpathd chown grid:asmadmin /dev/mapper/mpathe chown grid:asmadmin /dev/mapper/mpathf chmod 660 /dev/mapper/mpathb chmod 660 /dev/mapper/mpathc chmod 660 /dev/mapper/mpathd chmod 660 /dev/mapper/mpathe chmod 660 /dev/mapper/mpathf raw /dev/raw/raw1 /dev/mapper/mpathb raw /dev/raw/raw2 /dev/mapper/mpathc raw /dev/raw/raw3 /dev/mapper/mpathd raw /dev/raw/raw4 /dev/mapper/mpathe raw /dev/raw/raw5 /dev/mapper/mpathf sleep 2 chown grid:asmadmin /dev/raw/raw1 chown grid:asmadmin /dev/raw/raw2 chown grid:asmadmin /dev/raw/raw3 chown grid:asmadmin /dev/raw/raw4 chown grid:asmadmin /dev/raw/raw5 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4 chmod 660 /dev/raw/raw5
这是以前使用的老的方式处理共享磁盘,不过只能在11g以以前旧的版本中,12c版本只支持udev的方式处理共享磁盘。不在支持裸设备raw方式处理。
(5)在上述操作节点1上执行完毕后,将创建的99-oracle.rules 传给节点2,然后节点2执行 start_udev ,开启后查询ll /dev/asm* 得到和节点1同样的结果
1.在节点1和节点2上分别执行:
[root@rac1 ~]mkdir -p /oracle/app/grid/11.2.0.4 [root@rac1 ~]mkdir -p /oracle/grid [root@rac1 ~]chown -R grid:oinstall /oracle [root@rac1 ~]mkdir -p /oracle/app/oracle/11.2.0.4/db_1 [root@rac1 ~]chown -R oracle:oinstall /oracle/app/oracle [root@rac1 ~]chmod -R 775 /oracle [root@rac2 ~]mkdir -p /oracle/app/grid/11.2.0.4 [root@rac2 ~]mkdir -p /oracle/grid [root@rac2 ~]chown -R grid:oinstall /oracle [root@rac2 ~]mkdir -p /oracle/app/oracle/11.2.0.4/db_1 [root@rac2 ~]chown -R oracle:oinstall /oracle/app/oracle [root@rac2 ~]chmod -R 775 /oracle
2.配置环境变量
Grid 用户
修改grid 用户的.bash_profile. 注意每个节点的不同内容:
节点1:
[root@rac1 ~]# su - grid [grid@rac1 ~]$ vim .bash_profile export ORACLE_SID=+ASM1 export ORACLE_BASE=/oracle/grid export ORACLE_HOME=/oracle/app/grid/11.2.0.4 export PATH=$ORACLE_HOME/bin:$PATH
节点2:
[root@rac2 ~]# su - grid [grid@rac2 ~]$ vim .bash_profile export ORACLE_SID=+ASM2 export ORACLE_BASE=/oracle/grid export ORACLE_HOME=/oracle/app/grid/11.2.0.4 export PATH=$ORACLE_HOME/bin:$PATH
(PATH的配置信息要在grid用户下在命令行上输入 echo $PATH 得到的输出结果)
Oracle 用户
节点1:
[root@rac1 ~]# su - oracle [grid@rac1 ~]$ vim .bash_profile export ORACLE_SID=student1 export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=$ORACLE_BASE/11.2.0.4/db_1 export PATH=$ORACLE_HOME/bin:$PATH
节点2:
[root@rac2 ~]# su - oracle [grid@rac2 ~]$ vim .bash_profile export ORACLE_SID=student2 export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=$ORACLE_BASE/11.2.0.4/db_1 export PATH=$ORACLE_HOME/bin:$PATH
要改善 Linux 系统上的软件性能,必须对 Oracle软件所有者用户(grid、oracle)增加以下资源限制:
Shell 限制 limits.conf 中的条目 硬限制
打开文件描述符的大数 nofile 65536
可用于单个用户的大进程数 nproc 16384
进程堆栈段的大大小 stack 10240
以 root 用户身份,在每个 Oracle RAC 节点上,在 /etc/security/limits.conf 文件中添加
如下内容,或者执行执行如下命令:(整个复制到命令行)
cat >> /etc/security/limits.conf <八、 修改/etc/pam.d/login
在每个 Oracle RAC 节点上,在 /etc/pam.d/login 文件中添加或编辑下面一行内容:(整个复制到命令行)
cat >> /etc/pam.d/login <shell 的限制
对默认的 shell 启动文件进行以下更改,以便更改所有 Oracle安装所有者的 ulimit设置:
九、
在每个 Oracle RAC 节点上,对于 Bourne、Bash 或 Korn shell,通过运行以下命令将以下行添加到 /etc/profile文件:(整个复制到命令行)
cat >> /etc/profile <十、在每个 Oracle RAC 节点上,写关于内核参数的配置文件:
vim /etc/sysctl.conf kernel.shmmax = 4294967295 kernel.shmall = 2097152 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 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 fs.aio-max-nr=1048576以上操作完成后在每个 Oracle RAC 节点上执行:
sysctl -p在每个 Oracle RAC 节点上,安装相关的依赖包:
yum -y install autoconf automake binutils-devel bison cpp dos2unix ftp gcc gcc-c++ lrzsz python-deve compat-db compat-db42 compat-db43 compat-gcc-34 compat-gcc-34-c++ compat-libstdc++-33 glibc-* glibc-*.i686 libXpm-*.i686 libXp.so.6 libXt.so.6 libXtst.so.6 libgcc_s.so.1 ksh libXp libaio-devel numactl numactl-devel unixODBC unixODBC-devel compat-libcap* elfutils-libelf*PS: 如果使用到了oracleasm相关的包需要从官方网站下载并进行安装:
rpm -ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpmyum源的配置使用的是本地yum源,配置方法可参考: Linux配置本地yum源
在安装之前运行grid安装检测,使用的是grid安装包解压包中runcluvfy.sh,命令为:
[grid@rac1 ~]$ ./runcluvfh.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose
从输出的文本中检测那些检查项没有通过,做针对性处理。
PS:
一般检测都是通过的,只有在用户等同性检测中会出现用户等同性失败导致不通过,可以通过手动配置节点间的SSH免密访问来解决。处理检测不通过的项后再次检测没有问题后就可以正式进入grid与Oracle软件的安装阶段了“Oracle 11G RAC集群安装方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联-成都网站建设公司网站,小编将为大家输出更多高质量的实用文章!
当前标题:Oracle11GRAC集群安装方法是什么-创新互联
本文地址:http://cdkjz.cn/article/jcioc.html