ADG架构搭建1--Oracle安装

article/2025/9/26 17:06:05

在这里插入图片描述

本系列文章将会带领大家从零完成一个Oracle ADG架构的搭建。
本片文章为系列文章的第一篇。

前言

本文将带领大家完成两台服务的Oracle安装。

正文

版本说明:
Oracle版本 Oracle Database 12c Release 1 (12.1.0.2.0) - Enterprise Edition
操作系统版本 Red Hat 7.0

一、检查硬件是否符合安装要求

Oracle12c的硬件要求如下:

1)检查操作系统位数是否与安装包一致

# uname -m
x86_64

经检查,操作系统是64位操作系统,符合安装要求

2)内存与交换空间

官方要求如下:

RAM(内存)Swap Space(交换空间)
Between 1GB and 2GB1.5 tmes the size of the RAM
Between 2GB and 16GBEqual to the size of the RAM
More than 16GB16GB
--执行命令查看
#  free      total        used        free      shared  buff/cache   available
Mem:             8009356      245836      7480536      9076    282984     7518036
Swap:            16769020        0        16769020 

说明:若需扩充swap空间,请参考附录【1】

二、安装必要软件包

1)检查是否已安装包
使用命令:rpm -qa |grep 包名

#rpm -qa |grep binutils

#rpm -qa |grep compat-libstdc++

#rpm -qa |grep elfutils-libelf

#rpm -qa |grep expat

#rpm -qa |grep gcc

#rpm -qa |grep glibc

#rpm -qa |grep libaio

#rpm -qa |grep libgcc

#rpm -qa |grep libstdc++

#rpm -qa |grep make

#rpm -qa |grep numactl

#rpm -qa |grep sysstat

#rpm -qa |grep ksh

#rpm -qa |grep unixODBC

#rpm -qa |grep cpp

#rpm -qa |grep mpfr

#rpm -qa |grep compat-libcap

#rpm -qa |grep libstdc+±devel

#rpm -qa |grep gcc-c

#rpm -qa |grep glibc-devel

#rpm -qa |grep libaio-devel

2)安装包

--使用如下命令安装
# yum -y install 包名

需安装的包参考如下:
binutils-2.27-41.base.el7.x86_64
compat-libstdc+±33-3.2.3-72.el7.x86_64
elfutils-libelf-0.176-2.el7.x86_64
expat-2.1.0-10.el7_3.x86_64
libgcc-4.8.5-39.el7.x86_64
glibc-2.17-292.el7.x86_64
glibc-common-2.17-292.el7.x86_64
libaio-0.3.109-13.el7.x86_64
libgcc-4.8.5-39.el7.x86_64
libstdc+±4.8.5-39.el7.x86_64
make-3.82-24.el7.x86_64
numactl-libs-2.0.12-3.el7.x86_64
sysstat-10.1.5-18.el7.x86_64.rpm
ksh-20120801-139.0.1.el7.x86_64.rpm
cpp-4.8.5-39.0.1.el7.x86_64.rpm
unixODBC-2.3.1-14.0.1.el7.x86_64.rpm
mpfr-devel-3.1.1-4.el7.x86_64.rpm
compat-libcap1-1.10-7.el7.x86_64.rpm
libstdc+±devel-4.8.5-39.0.1.el7.x86_64.rpm
gcc-c+±4.8.5-39.0.1.el7.x86_64.rpm
glibc-devel-2.17-292.0.1.el7.x86_64.rpm
libaio-devel-0.3.109-13.el7.x86_64.rpm

补充说明:
若yum源中无所需包,可从网上下载,链接如下:
http://rpmfind.net/linux/rpm2html/search.php?query=ksh&submit=Search+…&system=&arch=

将下载安装包上传至服务器/usr/package 目录下(其它路径也可以),在该路径执行yum命令安装(如下例):
# yum -y install ksh-20120801-142.el7.x86_64.rpm

三.Oracle安装包拷贝

1)创建安装包存放目录

# mkdir -p /oradata/source_target/

2)拷贝oracle 12c安装包至服务器

# cd /oradata/source_target/#cp /tmp/rui/linuxamd64_12102_database_1of2.zip .#cp /tmp/rui/linuxamd64_12102_database_2of2.zip . # ll
total 2625080
-rw-r--r--. 1 root root 1673544724 Mar 19 00:56 linuxamd64_12102_database_1of2.zip
-rw-r--r--. 1 root root 1014530602 Mar 19 00:56 linuxamd64_12102_database_2of2.zip

四.创建Oracle数据库的系统账号和用户名

说明:
安装oracle需要创建三个用户组与一个用户,理论上单例按照需要3种用户组,实际可以只建两个oinstall和dba,后面再安装oracle数据库的时候把OSOPER组也设置是dba组。各用户组清单如下:

oracle 清单组(一般为oinstall):
OINSTALL 组的成员被视为 Oracle 软件的“所有者”,拥有对 Oracle 中央清单 (oraInventory) 的写入权限。在一个 Linux 系统上首次安装 Oracle 软件时,OUI 会创建 /etc/oraInst.loc 文件。该文件指定 Oracle 清单组的名称(默认为 oinstall)以及 Oracle 中央清单目录的路径。

数据库管理员(OSDBA,一般为 dba):
OSDBA 组的成员可通过操作系统身份验证使用 SQL 以 SYSDBA 身份连接到一个 Oracle 实例。该组的成员可执行关键的数据库管理任务,如创建数据库、启动和关闭实例。该组的默认名称为dba。

数据库操作员组(OSOPER,一般为 oper):
OSOPER 组的成员可通过操作系统身份验证使用 SQL 以 SYSOPER 身份连接到一个 Oracle 实例。这个可选组的成员拥有一组有限的数据库管理权限,如管理和运行备份。
该组的默认名称为oper。SYSOPER 系统权限甚至在数据库未打开时也允许访问数据库实例。对此权限的控制完

执行命令如下:

--创建oinstall组
# groupadd oinstall	--创建dba组
# groupadd dba	--创建oper组
# groupadd oper--创建oracle用户,加入第一个用户组为oinstall,然后加入dba,oper用户组
# useradd -g oinstall -G dba,oper oracle	--修改oracle用户密码,需要手动输入两次
# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.--查看新建的oracle用户信息
# id oracle
uid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba),1002(oper)

五.修改系统核心参数

在Root用户下执行以下步骤:
1)修改shell参数,以限制oracle用户资源配置。

--打开/etc/security/limits.conf文件
# 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
oracle hard stack 32768

2)编辑登录配置/etc/pam.d/login文件,使上一步的shell配置生效

--打开/etc/pam.d/login文件
# vi /etc/pam.d/login

将下列内容加入该文件末尾:
session required /lib/security/pam_limits.so
session required pam_limits.so

3)修改内核参数

--打开/etc/sysctl.conf文件
# vi /etc/sysctl.conf

将以下参数添加至文件末尾:
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmall = 19804244
kernel.shmmax = 101397731328
kernel.shmmni = 4096
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500

4)完成添加后用root用户执行语句sysctl -p使配置生效,并检查显示的结果是否与修改后的值:

# sysctl -p
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmall = 19804244
kernel.shmmax = 101397731328
kernel.shmmni = 4096
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.ip_local_port_range = 9000 65500

5)增大可打开文件描述符的最大数

--打开/etc/profile文件
# vi /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

6)创建oracle安装目录
创建数据库软件目录和数据文件存放目录,目录的位置,根据自己的情况来定。

#mkdir -p /oracle/app/product
#mkdir /oracle/app/oradata
#mkdir /oracle/oraInventory

7)创建目录完成后将目录权限分配给oracle用户

--更改目录属主为Oracle用户所有,属组为oinstall
# chown -R oracle:oinstall /oracle/app
# chown -R oracle:oinstall /oracle/oraInventory

8)配置oracle用户的环境变量(环境变量可在安装完成后配置)

--使用oracle用户打开文件.bash_profile
# su - oracle
$ vi .bash_profile

增加以下内容:
export ORACLE_BASE=/oracle/app
export ORACLE_HOME= O R A C L E B A S E / p r o d u c t / 12.1.0 / d b h o m e 1 e x p o r t O R A C L E S I D = r u i a d g e x p o r t P A T H = ORACLE_BASE/product/12.1.0/dbhome_1 export ORACLE_SID=ruiadg export PATH= ORACLEBASE/product/12.1.0/dbhome1exportORACLESID=ruiadgexportPATH=HOME/bin: O R A C L E H O M E / b i n : ORACLE_HOME/bin: ORACLEHOME/bin:PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

--查看环境变量
$ env | grep ORA
$ su - oracle
Password:
Last login: Fri Mar 19 01:23:56 CST 2021 on pts/0
$ env | grep ORA #查看环境变量是否完成
ORACLE_SID=ruiadg
ORACLE_BASE=/oracle/app
ORACLE_HOME=/oracle/app/product/12.1.0/dbhome_1

六.安装包准备

1)查看压缩包

$ su
Password:
# cd /oradata/source_target/
# ll
total 2625080
-rw-r--r--. 1 root root 1673544724 Mar 19 00:56 linuxamd64_12102_database_1of2.zip
-rw-r--r--. 1 root root 1014530602 Mar 19 00:56 linuxamd64_12102_database_2of2.zip

2)解压压缩文件准备安装

# unzip linuxamd64_12102_database_1of2.zip
# unzip linuxamd64_12102_database_2of2.zip

解压后在当前目录中生成了一个database的文件夹,解压过程中将两个压缩文件的内容解压到了database文件夹中

# ll
total 2625080
drwxr-xr-x. 7 root root        117 Jul  7  2014 database
-rw-r--r--. 1 root root 1673544724 Mar 19 00:56 linuxamd64_12102_database_1of2.zip
-rw-r--r--. 1 root root 1014530602 Mar 19 00:56 linuxamd64_12102_database_2of2.zip
# cd database/
# ll
total 20
drwxr-xr-x.  4 root root  234 Mar 19 01:34 install
drwxrwxr-x.  2 root root   61 Jul  7  2014 response
drwxr-xr-x.  2 root root   34 Jul  7  2014 rpm
-rwxr-xr-x.  1 root root 8533 Jul  7  2014 runInstaller
drwxrwxr-x.  2 root root   29 Jul  7  2014 sshsetup
drwxr-xr-x. 14 root root 4096 Jul  7  2014 stage
-rwxr-xr-x.  1 root root  500 Feb  7  2013 welcome.html

七.Win10上安装RealVNC

参考:https://jingyan.baidu.com/article/6079ad0e6215fd28ff86db88.html

八.Linux 服务器上VNC安装与配置

1)安装

#yum -y install tigervnc-server-1.8.0-17.el7.x86_64.rpm

2)配置

# vi /etc/sysconfig/vncservers

添加如下内容:
VNCSERVERS=“1:root”
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

3)启动vnc服务

# vncserverYou will require a password to access your desktops.Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:
xauth:  file /root/.Xauthority does not existNew 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log
--查看服务开启状态
# service vncserver status 
Redirecting to /bin/systemctl status vncserver.service
Unit vncserver.service could not be found. 

4)配置图形界面
修改配置文件,激活图形界面

#  vi /root/.vnc/xstartup

注释掉倒数三行,并在末尾添加:
gnome-session &

5)配置vnc服务

$  su - root
Password:Last login: Fri Mar 19 03:05:49 CST 2021 from 10.159.44.100 on pts/0
# xhost +
xhost:  unable to open display ""
# export DISPLAY=localhost.localdomain:1
# xhost +
access control disabled, clients can connect from any host

九.关闭防火墙

参考:Linux防火墙状态查看与修改命令(含centOS7操作命令)

# firewall-cmd --state
not running

若防火墙为开启状态,执行如下命令关闭:

# systemctl stop firewalld.service

十.Windows借助VNC Viewer访问Linux

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一.安装oracle

--切换到oracle用户
#  su - oracle$ cd /oradata/source_target/database$ ll
total 20
drwxr-xr-x.  4 root root  234 Mar 19 01:34 install
drwxrwxr-x.  2 root root   61 Jul  7  2014 response
drwxr-xr-x.  2 root root   34 Jul  7  2014 rpm
-rwxr-xr-x.  1 root root 8533 Jul  7  2014 runInstaller
drwxrwxr-x.  2 root root   29 Jul  7  2014 sshsetup
drwxr-xr-x. 14 root root 4096 Jul  7  2014 stage
-rwxr-xr-x.  1 root root  500 Feb  7  2013 welcome.html--执行安装
$ ./runInstaller

图形化安装步骤如下:
当前VNC画面如下:
在这里插入图片描述
下面开始进入安装步骤。
1)配置安全更新。因为后期不需要收到更新信息,所以取消邮件通知的勾选,点击【Next】进入下一步。
在这里插入图片描述
会弹出告警,点击【Yes】继续。
在这里插入图片描述
2)选择安装选项。选择创建和配置数据库,点击【Next】进入下一步。
在这里插入图片描述
3)系统类。选择服务器类,点击【Next】进入下一步。
在这里插入图片描述
4)网格安装选项。选择单实例数据库安装,点击【Next】进入下一步。
在这里插入图片描述
5)安装类型。选择高级安装,点击【Next】进入下一步。
在这里插入图片描述
6)产品语言。默认的有英语,添加简体中文,点击【Next】进入下一步。
在这里插入图片描述
7)数据库版本。选择企业版,点击【Next】进入下一步。
在这里插入图片描述
8)安装位置。根据需要正确配置完Oracle基目录和软件位置后,点击【Next】进入下一步。
在这里插入图片描述
9)创建Inventory。配置Inventory目录后,点击【Next】进入下一步。
在这里插入图片描述
10)配置类型。选择一般用途/事务处理,点击【Next】进入下一步。
在这里插入图片描述
11)数据库标识符。正确配置全局数据库名和SID,取消对“创建为容器数据库”的勾选,点击【Next】进入下一步。
在这里插入图片描述

12)配置选项。
内存调整为50%
在这里插入图片描述
字符集选择UTF-8
在这里插入图片描述
实例方案保留默认配置,点击【Next】进入下一步。
在这里插入图片描述
13)数据库存储。指定数据库文件位置,点击【Next】进入下一步。
在这里插入图片描述

14)管理选项。保留默认配置,点击【Next】进入下一步。
在这里插入图片描述
15)恢复选项。勾选“启用恢复”,并配置文件系统的恢复区位置,点击【Next】进入下一步。
在这里插入图片描述

16)方案口令。对所有账户设置相同的密码,点击【Next】进入下一步。
在这里插入图片描述
在弹出的提示框中点击【Yes】继续。
在这里插入图片描述
17)操作系统组。直接点击【Next】进入下一步。
在这里插入图片描述
18)概要。若查看信息没有问题,点击【Install】开始安装。
在这里插入图片描述

19)安装产品。执行到脚本安装会要求以root用户身份执行脚本。
在这里插入图片描述

在这里插入图片描述
打开个命令行,把脚本复制进入回车即可,如下所示:

# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.Changing groupname of /oracle/oraInventory to oinstall.
The execution of the script is complete.# /oracle/app/oracle/product/12.1.0/dbhome_1/root.sh
Performing root user operation.The following environment variables are set as:ORACLE_OWNER= oracleORACLE_HOME=  /oracle/app/oracle/product/12.1.0/dbhome_1Enter the full pathname of the local bin directory: [/usr/local/bin]:  此处直接回车Copying dbhome to /usr/local/bin ...Copying oraenv to /usr/local/bin ...Copying coraenv to /usr/local/bin ...Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

执行完成后,点击【OK】继续安装。
在这里插入图片描述
20)完成。安装完成后,点击【Close】关闭窗口。
在这里插入图片描述
至此,Oracle软件及实例ruiadg已安装成功。

如上,已经完成一台机器的Oracle安装,按照相同的方式在另一台机器上安装Oracle(两台机器的配置最好相同),即满足了搭建最基本ADG架构(一主一备)的基本条件。


附录【1】
参考连接:https://www.cnblogs.com/jascky/p/8078540.html

1)找个地方创建一个.swap的文件,我放在了/mnt目录下

# dd if=/dev/zero of=/mnt/8GB.swap bs=1G count=8
8+0 records in
8+0 records out
8589934592 bytes (8.6 GB) copied, 11.8513 s, 725 MB/s

这条命令是在/mnt目录下创建一个名为8GB.swap的交换文件,基础大小为1GB,有8个,so:1*8=8GB

2)把创建的.swap文件格式化为Swap文件

# mkswap /mnt/8GB.swap
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=d4cba72b-4e46-43e7-92ba-aa11278b89a2

3)把创建的.swap文件加入到系统中

# swapon /mnt/8GB.swap
swapon: /mnt/8GB.swap: insecure permissions 0644, 0600 suggested.

以上步骤可以做到临时启用交换文件,如果要下次启动系统的时候也启动交换文件,那么还要继续做以下步骤。

4)在/ect/fstab中加入新的Swap分区

# vi /etc/fstab 

在最后一行添加(前面是生成的.swap文件的位置)

/mnt/8GB.swap   none swap sw 0 0 

在这里插入图片描述


下一篇:ADG架构搭建2 – 搭建一主一备ADG架构


http://chatgpt.dhexx.cn/article/G6gSqNk3.shtml

相关文章

Oracle ADG 与 DG 的区别

首先,DG(Data Guard,数据卫士)不是一个备份恢复的工具,然而,DG却拥有备份的功能,在物理DG下它可以和主库一模一样,但是它存在的目的并不仅仅是为了备份恢复数据,应该说它…

ADG架构搭建5 -- 一主两备ADG主备切换

本文接该系列文章的上一篇:ADG架构搭建4 – 搭建一主两备ADG架构 前言 在《ADG架构搭建3 – 一主一备ADG主备切换》一文中,已经带领大家完成了一主一备ADG的主备切换,相信大家对该部分内容已有所了解。本文将对《ADG架构搭建4 – 搭建一主两…

第一章 ADG基本知识

Oracle Data Guard 配置可以包含一个主数据库和多达 30 个目标。 备用数据库是主数据库的事务一致副本。 当主数据库是 CDB 时,代理配置中的所有备用数据库也必须是 CDB。 备用数据库的类型如下: 物理备用数据库 提供物理上相同的主数据库副本&#xf…

完成端口使用总结

前言 本文不是全面介绍完成端口的,只是简单介绍了一下完成端口和几个常用概念。本文主要关注完成端口关闭时资源释放问题。 基础介绍 完成端口——可能是Win32下最复杂的一种I/O模型,Win32下最复杂的内核对象。它通过指定数量的线程对重叠I/O请求进行管理,以便为已经完成的…

WinSock完成端口I/O模型

关于重叠I/O,参考《WinSock重叠I/O模型》;关于完成端口的概念及内部机制,参考译文《深度探索I/O完成端口》。 完成端口对象取代了 WSAAsyncSelect 中的消息驱动和 WSAEventSelect 中的事件对象,当然完成端口模型的内部机制要比 WS…

Windows 完成端口编程

Windows 完成端口编程 本文为转载, 原文地址: http://xingzhesun.blogbus.com/logs/3925649.html Table of Contents 1 基本概念 2 OVERLAPPED数据结构 3 完成端口的内部机制 3.1 创建完成端口 3.2 完成端口线程的工作原理 3.3 线程间数据传递 3.4 线程的安全退出 1 基本…

完成端口IOCP详解

本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始动笔了,但愿还不算晚….. 这篇文档我非常详细并且图文并茂的介绍了…

Win socket编程--IOCP完成端口模型

引言 要想编写一个高性能的服务器应用程序,必须实现一个高效的线程模型。让太少或者太多的服务器线程来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有的请求,那么客户端可能长期等待而得不到响…

深度探索I/O完成端口

引言 要想编写一个高性能的服务器应用程序,必须实现一个高效的线程模型。让太少或者太多的服务器线程来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有的请求,那么客户端可能长期等待而得不到响…

Windows中I/O完成端口机制详解

Windows中I/O完成端口机制详解 引言 要想编写一个高性能的服务器应用程序,必须实现一个高效的线程模型。让太少或者太多的服务器线程来处理客户的请求,都可能导致性能问题。例如,如果一个服务器创建单个线程来处理所有的请求,那么…

c++使用完成端口实现服务器的高性能并发

如何使用c,借助完成端口完成大并发服务器的搭建,是今天要讨论的问题,套路如下: 套路总结一下: 创建完成端口 依据CPU核数创建一定数量的线程 线程中不断调用GetQueuedCompletionStatus检查完成端口状态,分别给予处理 创建一个…

C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码

遥望星空 好好干,有前途! 博客园首页新随笔联系管理订阅 随笔- 1082 文章- 0 评论- 151 C#高性能大容量SOCKET并发(转) C#高性能大容量SOCKET并发(零):代码结构说明 C#高性能大容量SOCKET并发(一…

完成端口学习笔记(一):完成端口+控制台 实现文件拷贝

最近在整理手里一个项目的后台服务端归档程序,重新梳理了一下有关“完成端口”的知识,发现还是有很多模棱两可的地方,下面记录一下再次学习的点滴,该篇博文还会有后续的补充章节,不知道什么时间会再补充^_^。 IO概念 还…

Socket编程模型之完成端口模型

转载请注明来源:http://blog.csdn.net/caoshiying?viewmodecontents 一、回顾重叠IO模型 用完成例程来实现重叠I/O比用事件通知简单得多。在这个模型中,主线程只用不停的接受连接即可;辅助线程判断有没有新的客户端连接被建立,如…

完成端口(IOCP)详解[2/2](转载)

版权声明:本文为CSDN博主「PiggyXP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/piggyxp/article/details/6922277 五 使用完成端口的基本流程 说了这么多的废话&a…

Windows io完成端口

Windows 提供一种称为I/O完成端口(I/O Completion Port)机制,能够让I/O的完成处理交由一个专门的线程池来完成,而线程池的线程数量是一个可配置的参数。这种做法将I/O请求的发起动作与完成处理分离到了不同的线程中。 I/O完成端口是内核对象。个人的感觉…

完成端口(Completion Port)详解

http://blog.csdn.net/piggyxp/article/details/6922277 手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔&#xf…

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后&…

树同构-树哈希

树同构-树哈希 题目描述 题解 对于无根树,由于数据范围较小,可以直接以每个点为根dfs一次,维护其树哈希的值,然后用并查集维护 (若数据范围大一些,可以以树的重心跑dfs) 代码实现 #include&…

2.3 树的同构(树,c)

树的同构 树的同构输入格式:输出格式:输入样例1(对应图1):输出样例1:输入样例2(对应图2):输出样例2: 题意理解输入两棵二叉树的信息,判断是否同构(对应图1) 求解思路二叉…