首页 » ORACLE, ORACLE [C]系列 » Oracle Database 配置IPV6 (一)

Oracle Database 配置IPV6 (一)

ipv6
什么是IPV6

Internet Protocol Version 6(IPV6), IPV6演变的主要影响因素是:地址空间IPV4的耗尽。 IPV4中较少的地址空间迫使用户使用网络地址转换(NAT)。我们都知道IPV6有128位, 那IPV6的地址空间就有2的128次方,IPV4有4Billion个地址,而IPV6有340 Undecillion(340,282,366,920,938,000,000,000,000,000,000,000,000 )大到不可想象。

IPV6的地址格式

IPV6 具有许多默认分配给操作系统的地址类型,下面使用的是GUA地址,其它还有Link Local等。IPV6的设计考虑地址空间的维护,被设计为自动配置常有DHCP分配,本文使用的是手动指定(hard code)的方式,通常情况下对于即使像运行着ORACLE 数据库的服务器主机也不需要手动配置IPV6地址。

  1.   IPV6是128位,比IPV4多96位

  2.  使用的是十六进制表示

  3.  每段之间使用”:”隔开,而不是”.”

  4.  128位地址有2部分组成,Network Prefix 64-bit,  Host Prefix 64-bit

IPV6地址如:2001:db8::1234:1235:abcd:abef

IPV6地址中可以删除连接出现的0,缩写同样等效,如IPV4的回路地址127.0.0.1,在IPV6中是0000:0000:0000:0000:0000:0000:0000:0001, 可以缩写为”::1″ 。

ORACLE DB 支持IPV6

操作系统也支持同时运行IPV4和IPV6,ORACLE 11.2 是第一个支持IPV6的数据库版本, 但是只支持 单实例模式的IPV6地址和连接, 从ORACLE 12版本开始完全的支持IPV6地址通过Public Vip到ORACLE RAC,准确是从12.1.0.1开始支持public network, 但是对于Private network还必须使用IPV4. ORACLE数据库和监听可以同时使用IPV4和IPV6,从12.2版本开始所有组件可以完全支持IPV6.

同时也可以配置IPV4 Mapping Address, 允许IPV6的应用程序使用IPV4的协议, 但是IPV4 MA不是IPV6隧道,只是操作系统的配置,IPV4 MA IPV6地址规则是前80位为0,接下来是16位的1,最后32位是IPV4的点位表示或是十六进制的等效IPV4如下面的是同一个地址,更多配置可以参考MOS  note 831153.1

0000:0000:0000:0000:0000:FFFF:129.168.134.145
0000:0000:0000:0000:0000:FFFF:81A8:8691
::FFFF: 129.168.134.145
::FFFF: 81A8:8691

LINUX 配置 IPV6 (  我的版本是OEL6.6)

[root@anbob ~]# cat /etc/issue
Oracle Linux Server release 6.6
Kernel \r on an \m

Load the IPV6 module as root user
[oracle@anbob net]$ modprobe ipv6
[oracle@anbob net]$ 

如果上面输出有错误修改/etc/modprobe.conf 如下面后,重启主机:

#alias net-pf-10 off
#alias ipv6 off
#options ipv6 disable=1

To add IPV6 interface
/sbin/ifconfig <interface> inet6 add <ipv6address>/<prefixlength>

[root@anbob ~]# ifconfig eth2 inet6 add 2001:db8::1234:1235:abcd:abef/64
[root@anbob ~]# ifconfig
eth2 Link encap:Ethernet HWaddr 08:00:27:CE:89:B8
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: 2001:db8::1234:1235:abcd:abef/64 Scope:Global
inet6 addr: fe80::a00:27ff:fece:89b8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:250 errors:0 dropped:0 overruns:0 frame:0
TX packets:222 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:27493 (26.8 KiB) TX bytes:66904 (65.3 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:680 (680.0 b) TX bytes:680 (680.0 b)

[root@anbob ~]# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8::1234:1235:abcd:abef/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fece:89b8/64 scope link
valid_lft forever preferred_lft forever

[oracle@anbob net]$ cat /proc/net/if_inet6
00000000000000000000000000000001 01 80 10 80       lo
20010db80000000012341235abcdabef 02 40 00 80     eth2
fe800000000000000a0027fffece89b8 02 40 20 80     eth2

[root@anbob ~]# ping6 2001:db8::1234:1235:abcd:abef
PING 2001:db8::1234:1235:abcd:abef(2001:db8::1234:1235:abcd:abef) 56 data bytes
64 bytes from 2001:db8::1234:1235:abcd:abef: icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 2001:db8::1234:1235:abcd:abef: icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from 2001:db8::1234:1235:abcd:abef: icmp_seq=3 ttl=64 time=0.071 ms

[root@anbob ~]# vi /etc/sysconfig/network:

NETWORKING=yes
HOSTNAME=anbob.com
# Enable global IPv6 initialization
NETWORKING_IPV6=yes         
# Disable global IPv6 forwarding and have host configure itself 
# to not be an IPv6 router
IPV6FORWARDING=no             
# Disable global IPv6 auto-configuration so a static IPv6 address can be set
IPV6_AUTOCONF=no               
# Disable automatic IPv6 tunneling as we are not setting up an IPv6 tunnel
IPV6_AUTOTUNNEL=no

[root@anbob ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
HWADDR=00:1E:4F:E6:FE:11
ONBOOT=yes
IPADDR=192.168.56.101
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=yes
IPV6ADDR=2001:db8::1234:1235:abcd:abef/64

[root@anbob ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.56.101 anbob.com anbob
2001:db8::1234:1235:abcd:abef    anbob6.com

ORACLE 配置LISTENER, TNS 使用IPV6地址

[oracle@anbob ~]$ vi /u02/app/oracle/product/12.2.0/db_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u02/app/oracle/product/12.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = anbob.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = anbob6.com)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

[oracle@anbob ~]$ lsnrctl start

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 16-AUG-2018 16:51:03

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Starting /u02/app/oracle/product/12.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u02/app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Log messages written to /u02/app/oracle/diag/tnslsnr/anbob/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=anbob.com)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=2001:db8::1234:1235:abcd:abef)(PORT=1522)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=anbob.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                16-AUG-2018 16:51:05
Uptime                    0 days 0 hr. 0 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u02/app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Listener Log File         /u02/app/oracle/diag/tnslsnr/anbob/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=anbob.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=2001:db8::1234:1235:abcd:abef)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

Note:
这里监听配置好了IPV6 地址的1522端口, 同时保留了原来的IPV4地址的1521端口。 当前no service是因为数据库还没有打开。

在打开数据库实例后,为了让系统服务注册到这个端口上,tnsnames.ora 文件增加ipv6的指向,并修改LOCAL_LISTENER配置文件

 show parameter local

PARAMETER_NAME                                               TYPE        VALUE
------------------------------------------------------------ ----------- -------------------------------------
local_listener                                               string      LISTENER_ANBOB
parallel_force_local                                         boolean     FALSE


SQL> alter system set local_listener='LISTENER_ANBOB','PDBANBOBv6';
System altered.

SQL> alter system register;
System altered.

[oracle@anbob admin]$ lsnrctl status

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 16-AUG-2018 17:14:36
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=anbob.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                16-AUG-2018 16:51:05
Uptime                    0 days 0 hr. 23 min. 30 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u02/app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Listener Log File         /u02/app/oracle/diag/tnslsnr/anbob/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=anbob.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=2001:db8::1234:1235:abcd:abef)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "465fa0ab8243396ae0530338a8c0fc9e.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
Service "4a0d4eafec1b1916e0530338a8c07871.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
Service "anbob.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
Service "anbobXDB.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
Service "pdbanbob.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
Service "pdbweejar.com" has 1 instance(s).
  Instance "anbob", status READY, has 1 handler(s) for this service...
The command completed successfully

[oracle@anbob admin]$ netstat -an|grep 1522
tcp        0      0 2001:db8::1234:1235:ab:1522 :::*                        LISTEN      
tcp        0      0 2001:db8::1234:1235:a:63072 2001:db8::1234:1235:ab:1522 ESTABLISHED 
tcp        0      0 2001:db8::1234:1235:ab:1522 2001:db8::1234:1235:a:63072 ESTABLISHED 

[oracle@anbob admin]$ lsof -i:1522
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
tnslsnr   4792 oracle   12u  IPv6  14281      0t0  TCP anbob6.com:ricardo-lm (LISTEN)
tnslsnr   4792 oracle   16u  IPv6  16114      0t0  TCP anbob6.com:ricardo-lm->anbob6.com:63072 (ESTABLISHED)
ora_lreg_ 4861 oracle   11u  IPv6  16113      0t0  TCP anbob6.com:63072->anbob6.com:ricardo-lm (ESTABLISHED)

[oracle@anbob admin]$ ps -ef|grep 4792|grep -v grep
oracle    4792     1  0 16:51 ?        00:00:00 /u02/app/oracle/product/12.2.0/db_1/bin/tnslsnr LISTENER -inherit

[oracle@anbob admin]$ ps -ef|grep 4861|grep -v grep
oracle    4861     1  0 16:52 ?        00:00:00 ora_lreg_anbob

Note:
可以看到当前监听已经配置好了IPV4和IPV6两种地址,并且LREG进程已经把服务注册到LISTENER进程的1522端口上。

测试连接

[oracle@anbob ~]$ tnsping pdbanbob             
TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 16-AUG-2018 23:46:20
Copyright (c) 1997, 2016, Oracle.  All rights reserved.
Used parameter files:
/u02/app/oracle/product/12.2.0/db_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = anbob.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdbanbob.com)))
OK (0 msec)

[oracle@anbob ~]$ tnsping pdbanbobv6
TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 16-AUG-2018 23:46:36
Copyright (c) 1997, 2016, Oracle.  All rights reserved.
Used parameter files:
/u02/app/oracle/product/12.2.0/db_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =2001:db8::1234:1235:abcd:abef)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdbanbob.com)))
OK (0 msec)
[oracle@anbob ~]$ sqlplus anbob/anbob@pdbanbobv6

SQL*Plus: Release 12.2.0.1.0 Production on Thu Aug 16 23:48:01 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Last Successful login time: Thu Aug 16 2018 17:42:40 +08:00

Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production


USERNAME             INST_NAME            HOST_NAME                 SID   SERIAL#  VERSION    STARTED  SPID       OPID  CPID            SADDR            PADDR
-------------------- -------------------- ------------------------- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ----------------
ANBOB                PDBANBOB-anbob       anbob                     59    60861    12.2.0.1.0 20180816 4725       54    4723            000000006D22C440 000000006EC3DB98


SQL> exit
Disconnected from Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
[oracle@anbob ~]$ sqlplus anbob/anbob@pdbanbob    --IPV4

SQL*Plus: Release 12.2.0.1.0 Production on Thu Aug 16 23:48:10 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Last Successful login time: Thu Aug 16 2018 23:48:01 +08:00

Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production


USERNAME             INST_NAME            HOST_NAME                 SID   SERIAL#  VERSION    STARTED  SPID       OPID  CPID            SADDR            PADDR
-------------------- -------------------- ------------------------- ----- -------- ---------- -------- ---------- ----- --------------- ---------------- ----------------
ANBOB                PDBANBOB-anbob       anbob                     59    43474    12.2.0.1.0 20180816 4730       54    4728            000000006D22C440 000000006EC3DB98


SQL> 

NOTE:
连接成功!

Oracle 11.2中除了ORACLE RAC和Oracle Clusterware所有功能都支持IPV6, 还有也不支持ASM使用IPV6,支持IPV6和IPV4共存. 在ORACLE 12C中,Oracle支持IPV4和IPV6在同一个网络,同样也可以配置PLUBIC network(Public/vip)在IPV6和IPV4,但是确保同一集群中所有节点使用相同的IP协议。但12.1 时不支持WINDOWS和private newwork. 在12.2 版本中 ORACLE提供了完全的支持IPV6,包括WINDOWS平台,ASM, FAN, 所有平台中的ORACLE Clusterwarer的private network。 更多内容可以阅读ORACLE白皮书

打赏

,

对不起,这篇文章暂时关闭评论。