一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg

0    629    1

Tags:

👉 本文共约119860个字,系统预计阅读时间或需451分钟。

一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之grid安装 (四)

这一步也比较重要,主要是安装ASM,如果前一步的共享磁盘没有准备好的话,执行root脚本的时候可能会报错,不过不要紧的,,,一定可以解决的,,,,

Grid安装过程

下载软件,上传软件,解压软件:

[root@rac1 share]# ll

total 3398288

-rwxrwxrwx 1 root root 1358454646 Dec 14 2011 p10404530_112030_Linux-x86-64_1of7.zip

-rwxrwxrwx 1 root root 1142195302 May 25 2012 p10404530_112030_Linux-x86-64_2of7.zip

-rwxrwxrwx 1 root root 979195792 May 26 2012 p10404530_112030_Linux-x86-64_3of7.zip

[root@rac1 share]# unzip p10404530_112030_Linux-x86-64_1of7.zip -d /tmp/ && unzip p10404530_112030_Linux-x86-64_2of7.zip -d /tmp/

[root@rac1 share]# unzip p10404530_112030_Linux-x86-64_3of7.zip -d /tmp/

安装补丁包(cvuqdisk)

安装cvuqdisk包并验证,在2个节点上都需要安装该包:

在两个 Oracle RAC 节点上安装操作系统程序包 cvuqdisk。如果没有 cvuqdisk,集群验证实用程序就无法发现共享磁盘,当运行(手动运行或在 Oracle Grid Infrastructure 安装结束时自动运行)集群验证实用程序时,您会收到这样的错误消息:“Package cvuqdisk not installed”。使用适用于您的硬件体系结构(例如,x86_64 或 i386)的 cvuqdisk RPM。

cvuqdisk RPM 包含在 Oracle Grid Infrastructure 安装介质上的 rpm 目录中。

设置环境变量 CVUQDISK_GRP,使其指向作为 cvuqdisk 的所有者所在的组(本文为 oinstall):

export CVUQDISK_GRP=oinstall

使用 CVU 验证是否满足 Oracle 集群件要求

记住要作为 grid 用户在将要执行 Oracle 安装的节点 (racnode1) 上运行。此外,必须为 grid

用户配置通过用户等效性实现的 SSH 连通性。

[root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm

Preparing... ########################################### [100%]

Using default group oinstall to install package

1:cvuqdisk ########################################### [100%]

[root@rac1 Packages]# rpm -q cvuqdisk

cvuqdisk-1.0.7-1.x86_64

传输到第2个节点上:

[root@rac1 rpm]# scp cvuqdisk-1.0.9-1.rpm root@192.168.59.136:/tmp

cluster 硬件检测--安装前预检查配置信息

该过程有点慢。。。。。慢慢等待吧。。。。。

只需要在其中一个节点上运行即可

在安装 GRID 之前,建议先利用 CVU(Cluster Verification Utility)检查 CRS 的安装前环境。

① 使用 CVU 检查 CRS 的安装前环境

在grid软件目录里运行以下命令:

使用 CVU 验证硬件和操作系统设置

./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -fixup -verbose

./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

./runcluvfy.sh stage -post hwos -n rac1,rac2 -verbose

cluvfy stage -pre crsinst -n node1,node2,node3 -fixup -verbose

未检测通过的显示为failed,根据情况修复一下即可:

[grid@rac1 grid]$ ll

total 15

drwxrwxrwx 1 root root 4096 Aug 16 2009 doc

drwxrwxrwx 1 root root 4096 Aug 15 2009 install

drwxrwxrwx 1 root root 0 Aug 15 2009 response

drwxrwxrwx 1 root root 0 Aug 15 2009 rpm

-rwxrwxrwx 1 root root 3795 Jan 28 2009 runcluvfy.sh

-rwxrwxrwx 1 root root 3227 Aug 15 2009 runInstaller

drwxrwxrwx 1 root root 0 Aug 15 2009 sshsetup

drwxrwxrwx 1 root root 8192 Aug 15 2009 stage

-rwxrwxrwx 1 root root 4228 Aug 17 2009 welcome.html

[grid@rac1 grid]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

Performing pre-checks for cluster services setup

Checking node reachability...

Check: Node reachability from node "rac1"

Destination Node Reachable?

------------------------------------ ------------------------

rac2 yes

rac1 yes

Result: Node reachability check passed from node "rac1"

Checking user equivalence...

Check: User equivalence for user "grid"

Node Name Comment

------------------------------------ ------------------------

rac2 passed

rac1 passed

Result: User equivalence check passed for user "grid"

Checking node connectivity...

Checking hosts config file...

Node Name Status Comment

------------ ------------------------ ------------------------

rac2 passed

rac1 passed

Verification of the hosts config file successful

Interface information for node "rac2"

Name IP Address Subnet Gateway Def. Gateway HW Address MTU

------ --------------- --------------- --------------- --------------- ----------------- ------

eth0 192.168.128.152 192.168.128.0 0.0.0.0 192.168.128.2 00:0C:29:EC:A0:64 1500

eth1 10.10.10.152 10.0.0.0 0.0.0.0 192.168.128.2 00:0C:29:EC:A0:6E 1500

Interface information for node "rac1"

Name IP Address Subnet Gateway Def. Gateway HW Address MTU

------ --------------- --------------- --------------- --------------- ----------------- ------

eth0 192.168.128.151 192.168.128.0 0.0.0.0 192.168.128.2 00:0C:29:2F:A8:C3 1500

eth1 10.10.10.151 10.0.0.0 0.0.0.0 192.168.128.2 00:0C:29:2F:A8:CD 1500

Check: Node connectivity of subnet "192.168.128.0"

Source Destination Connected?

------------------------------ ------------------------------ ----------------

rac2:eth0 rac1:eth0 yes

Result: Node connectivity passed for subnet "192.168.128.0" with node(s) rac2,rac1

Check: TCP connectivity of subnet "192.168.128.0"

Source Destination Connected?

------------------------------ ------------------------------ ----------------

rac1:192.168.128.151 rac2:192.168.128.152 passed

Result: TCP connectivity check passed for subnet "192.168.128.0"

Check: Node connectivity of subnet "10.0.0.0"

Source Destination Connected?

------------------------------ ------------------------------ ----------------

rac2:eth1 rac1:eth1 yes

Result: Node connectivity passed for subnet "10.0.0.0" with node(s) rac2,rac1

Check: TCP connectivity of subnet "10.0.0.0"

Source Destination Connected?

------------------------------ ------------------------------ ----------------

rac1:10.10.10.151 rac2:10.10.10.152 passed

Result: TCP connectivity check passed for subnet "10.0.0.0"

Interfaces found on subnet "192.168.128.0" that are likely candidates for VIP are:

rac2 eth0:192.168.128.152

rac1 eth0:192.168.128.151

Interfaces found on subnet "10.0.0.0" that are likely candidates for a private interconnect are:

rac2 eth1:10.10.10.152

rac1 eth1:10.10.10.151

Result: Node connectivity check passed

Check: Total memory

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 999.85MB (1023844.0KB) 1.5GB (1572864.0KB) failed

rac1 999.85MB (1023844.0KB) 1.5GB (1572864.0KB) failed

Result: Total memory check failed

Check: Available memory

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 878.98MB (900076.0KB) 50MB (51200.0KB) passed

rac1 717.45MB (734672.0KB) 50MB (51200.0KB) passed

Result: Available memory check passed

Check: Swap space

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

Result: Swap space check failed

Check: Free disk space for "rac2:/tmp"

Path Node Name Mount point Available Required Comment

---------------- ------------ ------------ ------------ ------------ ------------

/tmp rac2 / 14.5GB 1GB passed

Result: Free disk space check passed for "rac2:/tmp"

Check: Free disk space for "rac1:/tmp"

Path Node Name Mount point Available Required Comment

---------------- ------------ ------------ ------------ ------------ ------------

/tmp rac1 / 14.06GB 1GB passed

Result: Free disk space check passed for "rac1:/tmp"

Check: User existence for "grid"

Node Name Status Comment

------------ ------------------------ ------------------------

rac2 exists passed

rac1 exists passed

Result: User existence check passed for "grid"

Check: Group existence for "oinstall"

Node Name Status Comment

------------ ------------------------ ------------------------

rac2 exists passed

rac1 exists passed

Result: Group existence check passed for "oinstall"

Check: Group existence for "dba"

Node Name Status Comment

------------ ------------------------ ------------------------

rac2 exists passed

rac1 exists passed

Result: Group existence check passed for "dba"

Check: Membership of user "grid" in group "oinstall" [as Primary]

Node Name User Exists Group Exists User in Group Primary Comment

---------------- ------------ ------------ ------------ ------------ ------------

rac2 yes yes yes yes passed

rac1 yes yes yes yes passed

Result: Membership check for user "grid" in group "oinstall" [as Primary] passed

Check: Membership of user "grid" in group "dba"

Node Name User Exists Group Exists User in Group Comment

---------------- ------------ ------------ ------------ ----------------

rac2 yes yes yes passed

rac1 yes yes yes passed

Result: Membership check for user "grid" in group "dba" passed

Check: Run level

Node Name run level Required Comment

------------ ------------------------ ------------------------ ----------

rac2 5 3,5 passed

rac1 5 3,5 passed

Result: Run level check passed

Check: Hard limits for "maximum open file descriptors"

Node Name Type Available Required Comment

---------------- ------------ ------------ ------------ ----------------

rac2 hard 65536 65536 passed

rac1 hard 65536 65536 passed

Result: Hard limits check passed for "maximum open file descriptors"

Check: Soft limits for "maximum open file descriptors"

Node Name Type Available Required Comment

---------------- ------------ ------------ ------------ ----------------

rac2 soft 1024 1024 passed

rac1 soft 1024 1024 passed

Result: Soft limits check passed for "maximum open file descriptors"

Check: Hard limits for "maximum user processes"

Node Name Type Available Required Comment

---------------- ------------ ------------ ------------ ----------------

rac2 hard 16384 16384 passed

rac1 hard 16384 16384 passed

Result: Hard limits check passed for "maximum user processes"

Check: Soft limits for "maximum user processes"

Node Name Type Available Required Comment

---------------- ------------ ------------ ------------ ----------------

rac2 soft 2047 2047 passed

rac1 soft 2047 2047 passed

Result: Soft limits check passed for "maximum user processes"

Check: System architecture

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 x86_64 x86_64 passed

rac1 x86_64 x86_64 passed

Result: System architecture check passed

Check: Kernel version

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 2.6.18-348.el5 2.6.18 passed

rac1 2.6.18-348.el5 2.6.18 passed

Result: Kernel version check passed

Check: Kernel parameter for "semmsl"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 250 250 passed

rac1 250 250 passed

Result: Kernel parameter check passed for "semmsl"

Check: Kernel parameter for "semmns"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 32000 32000 passed

rac1 32000 32000 passed

Result: Kernel parameter check passed for "semmns"

Check: Kernel parameter for "semopm"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 100 100 passed

rac1 100 100 passed

Result: Kernel parameter check passed for "semopm"

Check: Kernel parameter for "semmni"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 128 128 passed

rac1 128 128 passed

Result: Kernel parameter check passed for "semmni"

Check: Kernel parameter for "shmmax"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 68719476736 536870912 passed

rac1 68719476736 536870912 passed

Result: Kernel parameter check passed for "shmmax"

Check: Kernel parameter for "shmmni"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 4096 4096 passed

rac1 4096 4096 passed

Result: Kernel parameter check passed for "shmmni"

Check: Kernel parameter for "shmall"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 2147483648 2097152 passed

rac1 2147483648 2097152 passed

Result: Kernel parameter check passed for "shmall"

Check: Kernel parameter for "file-max"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 6815744 6815744 passed

rac1 6815744 6815744 passed

Result: Kernel parameter check passed for "file-max"

Check: Kernel parameter for "ip_local_port_range"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 between 9000 & 65500 between 9000 & 65500 passed

rac1 between 9000 & 65500 between 9000 & 65500 passed

Result: Kernel parameter check passed for "ip_local_port_range"

Check: Kernel parameter for "rmem_default"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 262144 262144 passed

rac1 262144 262144 passed

Result: Kernel parameter check passed for "rmem_default"

Check: Kernel parameter for "rmem_max"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 4194304 4194304 passed

rac1 4194304 4194304 passed

Result: Kernel parameter check passed for "rmem_max"

Check: Kernel parameter for "wmem_default"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 262144 262144 passed

rac1 262144 262144 passed

Result: Kernel parameter check passed for "wmem_default"

Check: Kernel parameter for "wmem_max"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 1048586 1048576 passed

rac1 1048586 1048576 passed

Result: Kernel parameter check passed for "wmem_max"

Check: Kernel parameter for "aio-max-nr"

Node Name Configured Required Comment

------------ ------------------------ ------------------------ ----------

rac2 1048576 1048576 passed

rac1 1048576 1048576 passed

Result: Kernel parameter check passed for "aio-max-nr"

Check: Package existence for "make-3.81"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 make-3.81-3.el5 make-3.81 passed

rac1 make-3.81-3.el5 make-3.81 passed

Result: Package existence check passed for "make-3.81"

Check: Package existence for "binutils-2.17.50.0.6"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 binutils-2.17.50.0.6-20.el5_8.3 binutils-2.17.50.0.6 passed

rac1 binutils-2.17.50.0.6-20.el5_8.3 binutils-2.17.50.0.6 passed

Result: Package existence check passed for "binutils-2.17.50.0.6"

Check: Package existence for "gcc-4.1"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 gcc-4.1.2-54.el5 gcc-4.1 passed

rac1 gcc-4.1.2-54.el5 gcc-4.1 passed

Result: Package existence check passed for "gcc-4.1"

Check: Package existence for "libaio-0.3.106 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libaio-0.3.106-5 (i386) libaio-0.3.106 (i386) passed

rac1 libaio-0.3.106-5 (i386) libaio-0.3.106 (i386) passed

Result: Package existence check passed for "libaio-0.3.106 (i386)"

Check: Package existence for "libaio-0.3.106 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libaio-0.3.106-5 (x86_64) libaio-0.3.106 (x86_64) passed

rac1 libaio-0.3.106-5 (x86_64) libaio-0.3.106 (x86_64) passed

Result: Package existence check passed for "libaio-0.3.106 (x86_64)"

Check: Package existence for "glibc-2.5-24 (i686)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 glibc-2.5-107 (i686) glibc-2.5-24 (i686) passed

rac1 glibc-2.5-107 (i686) glibc-2.5-24 (i686) passed

Result: Package existence check passed for "glibc-2.5-24 (i686)"

Check: Package existence for "glibc-2.5-24 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 glibc-2.5-107 (x86_64) glibc-2.5-24 (x86_64) passed

rac1 glibc-2.5-107 (x86_64) glibc-2.5-24 (x86_64) passed

Result: Package existence check passed for "glibc-2.5-24 (x86_64)"

Check: Package existence for "compat-libstdc++-33-3.2.3 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 missing compat-libstdc++-33-3.2.3 (i386) failed

rac1 missing compat-libstdc++-33-3.2.3 (i386) failed

Result: Package existence check failed for "compat-libstdc++-33-3.2.3 (i386)"

Check: Package existence for "compat-libstdc++-33-3.2.3 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 compat-libstdc++-33-3.2.3-61 (x86_64) compat-libstdc++-33-3.2.3 (x86_64) passed

rac1 compat-libstdc++-33-3.2.3-61 (x86_64) compat-libstdc++-33-3.2.3 (x86_64) passed

Result: Package existence check passed for "compat-libstdc++-33-3.2.3 (x86_64)"

Check: Package existence for "elfutils-libelf-0.125 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 elfutils-libelf-0.137-3.el5 (x86_64) elfutils-libelf-0.125 (x86_64) passed

rac1 elfutils-libelf-0.137-3.el5 (x86_64) elfutils-libelf-0.125 (x86_64) passed

Result: Package existence check passed for "elfutils-libelf-0.125 (x86_64)"

Check: Package existence for "elfutils-libelf-devel-0.125"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 elfutils-libelf-devel-0.137-3.el5 elfutils-libelf-devel-0.125 passed

rac1 elfutils-libelf-devel-0.137-3.el5 elfutils-libelf-devel-0.125 passed

WARNING:

PRVF-7584 : Multiple versions of package "elfutils-libelf-devel" found on node rac2: elfutils-libelf-devel-0.137-3.el5 (i386),elfutils-libelf-devel-0.137-3.el5 (x86_64)

WARNING:

PRVF-7584 : Multiple versions of package "elfutils-libelf-devel" found on node rac1: elfutils-libelf-devel-0.137-3.el5 (i386),elfutils-libelf-devel-0.137-3.el5 (x86_64)

Result: Package existence check passed for "elfutils-libelf-devel-0.125"

Check: Package existence for "glibc-common-2.5"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 glibc-common-2.5-107 glibc-common-2.5 passed

rac1 glibc-common-2.5-107 glibc-common-2.5 passed

Result: Package existence check passed for "glibc-common-2.5"

Check: Package existence for "glibc-devel-2.5 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 missing glibc-devel-2.5 (i386) failed

rac1 missing glibc-devel-2.5 (i386) failed

Result: Package existence check failed for "glibc-devel-2.5 (i386)"

Check: Package existence for "glibc-devel-2.5 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 glibc-devel-2.5-107 (x86_64) glibc-devel-2.5 (x86_64) passed

rac1 glibc-devel-2.5-107 (x86_64) glibc-devel-2.5 (x86_64) passed

Result: Package existence check passed for "glibc-devel-2.5 (x86_64)"

Check: Package existence for "glibc-headers-2.5"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 glibc-headers-2.5-107 glibc-headers-2.5 passed

rac1 glibc-headers-2.5-107 glibc-headers-2.5 passed

Result: Package existence check passed for "glibc-headers-2.5"

Check: Package existence for "gcc-c++-4.1.2"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 gcc-c++-4.1.2-54.el5 gcc-c++-4.1.2 passed

rac1 gcc-c++-4.1.2-54.el5 gcc-c++-4.1.2 passed

Result: Package existence check passed for "gcc-c++-4.1.2"

Check: Package existence for "libaio-devel-0.3.106 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 missing libaio-devel-0.3.106 (i386) failed

rac1 missing libaio-devel-0.3.106 (i386) failed

Result: Package existence check failed for "libaio-devel-0.3.106 (i386)"

Check: Package existence for "libaio-devel-0.3.106 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libaio-devel-0.3.106-5 (x86_64) libaio-devel-0.3.106 (x86_64) passed

rac1 libaio-devel-0.3.106-5 (x86_64) libaio-devel-0.3.106 (x86_64) passed

Result: Package existence check passed for "libaio-devel-0.3.106 (x86_64)"

Check: Package existence for "libgcc-4.1.2 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libgcc-4.1.2-54.el5 (i386) libgcc-4.1.2 (i386) passed

rac1 libgcc-4.1.2-54.el5 (i386) libgcc-4.1.2 (i386) passed

Result: Package existence check passed for "libgcc-4.1.2 (i386)"

Check: Package existence for "libgcc-4.1.2 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libgcc-4.1.2-54.el5 (x86_64) libgcc-4.1.2 (x86_64) passed

rac1 libgcc-4.1.2-54.el5 (x86_64) libgcc-4.1.2 (x86_64) passed

Result: Package existence check passed for "libgcc-4.1.2 (x86_64)"

Check: Package existence for "libstdc++-4.1.2 (i386)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libstdc++-4.1.2-54.el5 (i386) libstdc++-4.1.2 (i386) passed

rac1 libstdc++-4.1.2-54.el5 (i386) libstdc++-4.1.2 (i386) passed

Result: Package existence check passed for "libstdc++-4.1.2 (i386)"

Check: Package existence for "libstdc++-4.1.2 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libstdc++-4.1.2-54.el5 (x86_64) libstdc++-4.1.2 (x86_64) passed

rac1 libstdc++-4.1.2-54.el5 (x86_64) libstdc++-4.1.2 (x86_64) passed

Result: Package existence check passed for "libstdc++-4.1.2 (x86_64)"

Check: Package existence for "libstdc++-devel-4.1.2 (x86_64)"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 libstdc++-devel-4.1.2-54.el5 (x86_64) libstdc++-devel-4.1.2 (x86_64) passed

rac1 libstdc++-devel-4.1.2-54.el5 (x86_64) libstdc++-devel-4.1.2 (x86_64) passed

Result: Package existence check passed for "libstdc++-devel-4.1.2 (x86_64)"

Check: Package existence for "sysstat-7.0.2"

Node Name Available Required Comment

------------ ------------------------ ------------------------ ----------

rac2 sysstat-7.0.2-12.el5 sysstat-7.0.2 passed

rac1 sysstat-7.0.2-12.el5 sysstat-7.0.2 passed

Result: Package existence check passed for "sysstat-7.0.2"

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复