11gR2 Grid Infrastructure Installation prerequisites On LINUX

本文档详细介绍了在IBM X3650 M2服务器上部署Oracle RAC的具体步骤,包括基础环境配置、软件准备、yum源配置、必要的软件包安装、服务关闭、主机名及DNS配置、Oracle用户及目录创建、环境变量设置、用户资源限制、多路径软件安装、共享磁盘分区、asmlib包安装、CVU软件安装等关键环节。

基础环境

服务器品牌

IBM

服务器型号

X3650M2

cpu类型

Intel Xeon E5620 @ 2.40GHz

cpu个数

2

内存大小

24G

磁盘阵列

DS3200

硬盘大小

1.8TB

 

软件准备:

--Oracle Database (includes Oracle Database and Oracle RAC)

p10404530_112030_platform_1of7.zip

p10404530_112030_platform_2of7.zip  

--Oracle Grid Infrastructure (includes Oracle ASM, Oracle Clusterware, and Oracle Restart)

p10404530_112030_platform_3of7.zip

 

1配置yum

vim /etc/yum.repos.d/rhel-debuginfo.repo

 

ORADB1:

[Server]

name=Server

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

 

ORADB2:

[Server]

name=Server

baseurl=ftp://oradb1/pub/Server

enabled=1

gpgcheck=0

       

2同时检查以下包是否被安装

rpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" \

binutils \

compat-libstdc++-33 \

elfutils-libelf \

elfutils-libelf-devel \

gcc \

gcc-c++ \

glibc \

glibc-common \

glibc-devel \

glibc-headers \

ksh \

libaio \

libaio-devel \

libgcc \

libstdc++ \

libstdc++-devel \

make \

sysstat \

unixODBC \

unixODBC-devel

 

通过检查发现我的系统一下4个包没有安装:

package libaio-devel is not installed

package sysstat is not installed

package unixODBC is not installed

package unixODBC-devel is not installed

package sysstat is not installed

 

--挂载CD镜像到mnt目录下:

[root@localhost tmp]# mount /dev/cdrom /mnt/

mount: block device /dev/cdrom is write-protected, mounting read-only

--yum安装这几个包

[root@localhost tmp]# yum install libaio-devel package libaio-devel unixODBC unixODBC-devel sysstat –y

--yum安装第二个节点的时候可以重新挂载

[root@localhost tmp]# mount /dev/cdrom /var/ftp/pub/

mount: block device /dev/cdrom is write-protected, mounting read-only

3.关掉大部分不用服务(可能因人因环境而异).

chkconfig bluetooth --level 2345 off

chkconfig ip6tables --level 2345 off

chkconfig portmap --level 2345 off

chkconfig sendmail --level 2345 off

chkconfig vsftpd --level 2345 off

chkconfig iptables off

chkconfig ntpd off

 

4在每一个节点上配置/etc/hosts文件,文件内容如下

 

# Public Network ? (eth0)

10.0.18.12 oradb1.bdstar.com  oradb1

10.0.18.13 oradb2.bdstar.com  oradb2

 

# Public Virtual IP (VIP) addresses ? (eth0:1)

10.0.18.120 oradb1-vip.bdstar.com oradb1-vip

10.0.18.130 oradb2-vip.bdstar.com oradb2-vip

 

# Private Interconnect ? (eth1)

10.10.10.120 oradb1-priv.bdstar.com   oradb1-priv

10.10.10.130 oradb2-priv.bdstar.com   oradb2-priv

 

#Compute node Client Access SCAN Interface details

10.0.18.36 oradb-scan.bdstar.com   oradb-scan

5修改主机名

[root@localhost ~]# vim /etc/sysconfig/network

Oradb1上添加如下:

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=oradb1.bdstar.com

 

Oradb2上添加如下:

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=oradb1.bdstar.com

 

配置集群时间同步服务 (CTSS)

--不采用系统上的NTP服务,利用oracle集群的CTSS服务

[root@racnode1 ~]# /sbin/service ntpd stop

[root@racnode1 ~]# chkconfig ntpd off

[root@racnode1 ~]# mv /etc/ntp.conf /etc/ntp.conf.original

还要删除以下文件:

[root@racnode1 ~]# rm /var/run/ntpd.pid

 

7内核参数的配置

[root@rac1 ~]# cd /etc/

[root@rac1 etc]# sysctl -p

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.ip_local_port_range = 9000 65500

fs.file-max = 6815744

fs.suid_dumpable = 1

fs.aio-max-nr = 1048576

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

 

8 DNS的配置

只在节点1做一个DNS服务端即可:

[root@localhost etc]# yum install bind bind-chroot caching-nameserver

 

# vim /var/named/chroot/etc/named.conf

 

options {

directory "/var/named";

};

zone "localdomain" in {

       type master;

       file "localdomain.zone";

};

 

zone "bdstar.com" IN {

type master;

file "bdstar.com.zone";

};

 

[root@oradb1 ~]# cd /var/named/chroot/var/named/

[root@oradb1 named]# vim bdstar.com.zone

$TTL   86400

@              IN SOA @      root (

                                       42             ; serial (d. adams)

                                       3H             ; refresh

                                       15M            ; retry

                                       1W             ; expiry

                                       1D )           ; minimum

@ IN NS      oradb1.bdstar.com.

 

oradb1      IN A      10.0.18.12

 

oradb2      IN A      10.0.18.13

 

oradb1-vip  IN A      10.0.18.120

 

oradb2-vip  IN A      10.0.18.130

 

oradb-scan  IN A      10.0.18.36

 

[root@oradb1 named]# vim localdomain.zone

 

$TTL   86400

@              IN SOA localhost root (

                                       42             ; serial (d. adams)

                                       3H             ; refresh

                                       15M            ; retry

                                       1W             ; expiry

                                       1D )           ; minimum

           IN NS     localhost

oradb1      IN A      10.0.18.12

 

oradb2      IN A      10.0.18.13

 

oradb1-vip  IN A      10.0.18.120

 

oradb2-vip  IN A      10.0.18.130

 

oradb-scan  IN A      10.0.18.36

 

[root@oradb1 named]# cat /etc/resolv.conf

nameserver 10.0.18.12

search localdomain bdstar.com

 

[root@oradb1 named]# service named restart

--测试下是否生效

[root@oradb1 named]# nslookup oradb1.bdstar.com

Server:              10.0.18.12

Address: 10.0.18.12#53

 

Name:     oradb1.bdstar.com

Address: 10.0.18.12

 

--调整DNS解析

 由于oracle强烈建议不要见scan放入到hosts中,这样做的结果是只能有一个SCANIP被使用。所以我们调整解析的顺序:

[root@oradb1 log]# vim /etc/nsswitch.conf

hosts:     dns files

[root@oradb1 ~]# /sbin/service nscd restart

 

9创建gridoracle用户,在每一个节点操作

 

groupadd -g 1000 oinstall

groupadd -g 1020 asmadmin

groupadd -g 1021 asmdba

groupadd -g 1022 asmoper

groupadd -g 1300 dba

 

useradd -u 1101 -g oinstall -G dba,asmdba -c "Oracle Software Owner" oracle

useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba -c "Grid Infrastructure Owner" grid

--修改oracle grid密码

passwd oracle

passwd grid

 

10创建oraclegridOracle Base 目录

mkdir -p /u01/app/11.2.0/grid

mkdir -p /u01/app/grid

chown -R grid:oinstall /u01

mkdir -p /u01/app/oracle

chown oracle:oinstall /u01/app/oracle

chmod -R 775 /u01

 

-- Oracle Inventory Directory

mkdir -p /u01/app/oraInventory

chown -R grid:oinstall /u01/app/oraInventory

chmod -R 755 /u01/app/oraInventory

 

官方推荐:

*************************************************************************************************************************************************************************

To create the Oracle Inventory directory, enter the following commands as the root user:

# mkdir -p /u01/app/oraInventory
# chown -R grid:oinstall /u01/app/oraInventory
# chmod -R 775 /u01/app/oraInventory

  Creating the Oracle Grid Infrastructure Home Directory

To create the Grid Infrastructure home directory, enter the following commands as the root user:

# mkdir -p /u01/11.2.0/grid
# chown -R grid:oinstall /u01/11.2.0/grid
# chmod -R 775 /u01/11.2.0/grid

Creating the Oracle Base Directory

To create the Oracle Base directory, enter the following commands as the root user:

# mkdir -p /u01/app/oracle
# mkdir /u01/app/oracle/cfgtoollogs --needed to ensure that dbca is able to run after the rdbms installation.
# chown -R oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/app/oracle

Creating the Oracle RDBMS Home Directory

To create the Oracle RDBMS Home directory, enter the following commands as the root user:

# mkdir -p /u01/app/oracle/product/11.2.0/db_1
# chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
# chmod -R 775 /u01/app/oracle/product/11.2.0/db_1

**********************************************************************************************************

11配制grid,oracle用户环境变量

节点1grid用户:

~/.bash_profile增加以下内容

 

export ORACLE_BASE=/u01/app/grid

export ORACLE_HOME=/u01/app/11.2.0/grid

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

export ORACLE_SID=+ASM1

umask 022

stty erase ^H

 

节点2grid用户:

~/.bash_profile增加以下内容

 

export ORACLE_BASE=/u01/app/grid

export ORACLE_HOME=/u01/app/11.2.0/grid

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

export ORACLE_SID=+ASM2

umask 022

stty erase ^H

 

 

节点1 ORACLE用户:

 

~/.bash_profile增加以下内容

 

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

export ORACLE_SID=bdspoc1

umask 022

stty erase ^H

 

 

节点2 ORACLE用户:

 

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

export ORACLE_SID=bdspoc2

umask 022

stty erase ^H

 

 

12设置用户资源限制

1.在文件 /etc/security/limits.conf加以下参数:

#Install oracle setting

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

 

 

 

增加如下行在/etc/pam.d/login文件中

session   required    pam_limits.so

 

vim /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

 

For the C shell (csh or tcsh), add the following lines to the /etc/csh.login file:

 

 if ( $USER = "oracle" || $USER = "grid" ) then

 limit maxproc 16384

 limit descriptors 65536

 endif

 

13设置RDAC

由于用的是IBM的磁盘阵列,所以需要在系统端安装多路径软件。

下载地址:http://support.netapp.com/NOW/public/apbu/oemcp/

 

将下载的RDAC包解压生成linuxrdac-09.03.0C05.0638文件夹

进入文件夹后编译该包,

[root@oradb1 linuxrdac-09.03.0C05.0638]#make

make[1]: Entering directory `/usr/src/kernels/2.6.18-274.el5-x86_64'

….

gcc mppUtil.o mppUtilSysdep.o -o mppUtil

gcc -o genuniqueid genuniqueid.c

[root@oradb1 linuxrdac-09.03.0C05.0638]#make install

make[1]: Entering directory `/tmp/linuxrdac-09.03.0C05.0638'

….

MPP driver package has been successfully installed on your system.

--/boot文件夹下生成一个mpp的文件

[root@oradb1 boot]# pwd

/boot

[root@oradb1 boot]# ls

config-2.6.18-274.el5     initrd-2.6.18-274.el5kdump.img symvers-2.6.18-274.el5.gz

grub  lost+found     System.map-2.6.18-274.el5

initrd-2.6.18-274.el5.img mpp-2.6.18-274.el5.img         vmlinuz-2.6.18-274.el5

--修改启动选项

[root@oradb1 tmp]# vim /boot/grub/menu.lst

default=1

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-274.el5)

       root (hd0,0)

       kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ rhgb quiet

       initrd /initrd-2.6.18-274.el5.img

title Red Hat Enterprise Linux Server with MPP surpport

       root (hd0,0)

       kernel /vmlinuz-2.6.18-274.el5 ro root=LABEL=/ rhgb quiet

       initrd /mpp-2.6.18-274.el5.img

 

节点2做同样的事

 

14共享磁盘分区

 

[root@oradb1 ~]# fdisk /dev/sdc

 

The number of cylinders for this disk is set to 72815.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

  (e.g., DOS FDISK, OS/2 FDISK)

 

Command (m for help): n

Command action

  e  extended

  p  primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-72815, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-72815, default 72815): +1024M

 

Command (m for help): n

Command action

  e  extended

  p  primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (126-72815, default 126):

Using default value 126

Last cylinder or +size or +sizeM or +sizeK (126-72815, default 72815):

Using default value 72815

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

[root@oradb1 ~]# /sbin/partprobe

在节点2查看共享磁盘情况,OK!和1节点的一直。

 

 

15 asmlib包的安装

下载:http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html

查看对应的版本后下载后安装:[root@oradb1 pub]# uname -a

Linux oradb1.bdstar.com 2.6.18-274.el5 #1 SMP Fri Jul 8 17:36:59 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

 

[root@oradb1 pub]# rpm -ivh oracleasm-support-2.1.8-1.el5.x86_64.rpm

warning: oracleasm-support-2.1.8-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

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

  1:oracleasm-support     ########################################### [100%]

[root@oradb1 pub]# rpm -ivh oracleasm-2.6.18-274.el5-2.0.5-1.el5.x86_64.rpm

warning: oracleasm-2.6.18-274.el5-2.0.5-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

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

  1:oracleasm-2.6.18-274.el########################################### [100%]

[root@oradb1 pub]# rpm -ivh oracleasmlib-2.0.4-1.el5.x86_64.rpm

warning: oracleasmlib-2.0.4-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159

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

  1:oracleasmlib          ########################################### [100%]

 

16使用root用户安装配置asmlib

--这里使用asm工具对设备进行持久化,当然也可以使用udev的方式对设备进行持久化!

--双节点都要configure

[root@oradb1 pub]# /etc/init.d/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@oradb1 pub]# /etc/init.d/oracleasm createdisk crs01 /dev/sdb1

Marking disk "crs01" as an ASM disk:                      [ OK ]

[root@oradb1 pub]# /etc/init.d/oracleasm createdisk crs02 /dev/sdc1

Marking disk "crs02" as an ASM disk:                      [ OK ]

[root@oradb1 pub]# /etc/init.d/oracleasm createdisk crs02 /dev/sdc1

Marking disk "crs02" as an ASM disk:                      [ OK ]

[root@oradb1 pub]# /etc/init.d/oracleasm createdisk data01 /dev/sdb2

Marking disk "data01" as an ASM disk:                     [ OK ]

[root@oradb1 pub]# /etc/init.d/oracleasm createdisk data02 /dev/sdc2

Marking disk "data02" as an ASM disk:                     [ OK ]

[root@oradb1 pub]# /etc/init.d/oracleasm createdisk data03 /dev/sdd2

Marking disk "data03" as an ASM disk:                     [ OK ]

--每个节点都要查看下

--/usr/sbin/oracleasm为更高级的oracleasm命令

[root@oradb1 pub]# /usr/sbin/oracleasm listdisks

CRS01

CRS02

CRS03

DATA01

DATA02

DATA03

--每个节点都进行注册

[root@oradb1 pub]# /usr/sbin/oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

 

17安装CVU软件

两节点上分别作

# export CVUQDISK_GRP=oinstall

# cd /mnt/stage/cvu/cv/remenv

# rpm -ivh cvuqdisk-1.0.9-1.rpm

 

18检查配置

./runcluvfy.sh stage -pre crsinst -n node1,node2 -verbose > /tmp/checkrac.txt


安装好后查看:

[grid@node1 ~]$ crsctl query crs activeversion
集群上的 Oracle Clusterware 活动版本为 [11.2.0.3.0]
[grid@node1 ~]$ crsctl query crs releaseversion
本地节点上的 Oracle 高可用性服务发行版为 [11.2.0.3.0]
[grid@node1 ~]$ crsctl query crs softwareversion
节点 [node1] 上的 Oracle Clusterware 版本为 [11.2.0.3.0]

reference :

最常见的5个导致 RAC 实例崩溃的问题[文章 ID 1549191.1]

最常见的5个CRS/Grid Infrastructure 安装问题[文章 ID 1549192.1]

最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题[文章 ID 1524455.1]


内容概要:本文档名为《赵家湾学校后大门一百三十六栋.txt》,实则是一份综合性科研仿真资源索引,集中展示了多个技术领域的Matlab/Simulink与Python代码实现项目。内容涵盖风光互补制氢合成氨系统容量-调度优化、微电网能量管理、无人机三维路径规划、图像分割、信号处理、电力系统建模、模型预测控制(MPC)、深度学习预测模型(如LSTM、Transformer)、联邦学习、强化学习应用等多个前沿方向。文档不仅列出具体研究题目和算法模型,还整合了智能优化算法(如PSO、GWO、DBO等)、路径规划、车间调度、通信优化、雷达跟踪、元胞自动机模拟等通用技术模块,并附有网盘链接提供完整代码与仿真模型下载,旨在为科研人员提供可复现的技术支持与开发参考。; 适合人群:具备一定编程基础,从事电气工程、自动化、计算机科学、人工智能、控制工程、能源系统等相关领域的研究生、科研人员及工程技术开发者。; 使用场景及目标:①辅助高水平学术论文复现与科研项目开发;②为硕士/博士论文、课程设计、学科竞赛提供算法实现与仿真建模支持;③提升在新能源并网、智能控制、路径规划、负荷预测、故障诊断等领域的工程实践与创新能力。; 阅读建议:此文档为资源导航型材料,建议结合个人研究方向筛选对应主题,通过提供的百度网盘链接获取完整代码包,并配合相关文献进行仿真实验与参数调试,以实现高效复用、二次开发与技术创新。
内容概要:本文深入解析了AI Agent(智能体)的技术原理与系统架构,阐述其如何通过“思考-行动-观察”的闭环循环,使大语言模型(LLM)从被动应答的对话系统进化为能主动完成复杂任务的智能实体。文章详细介绍了Agent四大核心模块:作为决策中枢的LLM(大脑)、实现外部交互的工具调用(双手)、支持状态延续的记忆模块(记忆),以及驱动自主执行的规划与协调机制(协调)。同时对比了Agent与传统聊天机器人在任务规划、工具使用、记忆能力和执行闭环等方面的本质差异,并探讨了从单智能体到多智能体系统的架构演进趋势,强调专业分工对处理复杂任务的重要性。最后,文章分析了Agent模式与预设工作流模式的应用权衡,指出前者适用于灵活探索类任务,后者更适合确定性高的固定流程。; 适合人群:对人工智能、大模型应用开发感兴趣的技术人员、产品经理及研究人员,尤其适合具备一定AI基础知识、希望深入了解Agent系统设计的专业人士; 使用场景及目标:①理解AI Agent的核心架构与关键技术组件;②掌握ReAct等主流执行范式;③区分Agent与传统聊天机器人的能力边界;④判断在实际业务中应采用Agent模式还是工作流模式; 阅读建议:本文理论性强且结构清晰,建议结合实际Agent案例(如AutoGPT、LangChain应用)进行对照学习,重点关注各模块间的协同机制与设计权衡,以深化对Agent系统级思维的理解。
内容概要:本文针对三相并网逆变器在瞬态过程中的全局最优控制问题,提出一种基于有限字符集预测控制(FCS-MPC)的渐进式调控策略,旨在实现从电流畸变抑制到功率无差拍响应的平滑过渡。通过构建电流与功率双模态预测控制框架,结合Simulink仿真与Matlab代码实现,系统分析了有限控制集对系统动态响应、谐波含量及功率调节性能的影响机理,深入探讨了预测模型构建、代价函数设计与控制参数优化的关键技术路径,验证了该策略在提升并网电能质量、增强动态响应能力和实现多目标协同控制方面的优越性与可行性; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真环境,从事新能源发电并网、逆变器先进控制策略研究等相关领域的研究生、科研人员及工程技术人员; 使用场景及目标:①深入研究有限集模型预测控制在三相并网系统中的理论与应用;②掌握电流与功率双模态预测控制策略的设计方法与实现流程;③实现高动态性能、低谐波畸变与功率快速无差拍响应的综合控制目标; 阅读建议:建议结合文中提供的Matlab代码与Simulink仿真模型进行复现实验,重点剖析预测时域设定、代价函数权重配置及开关状态枚举策略对系统性能的影响,以全面理解FCS-MPC的核心原理及其在工程实践中的优化技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值