RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)
一 首先需要安装两个CENTOS 7虚拟机(此处省略)。
由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡,并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》
这里大家需要注意的是,我们需要绑定两台机器的IP一共四个。
你要根据你自己设置的IP地址进行网卡IP设置,因为我只是演示环境,所以我就按照我的演示环境设置了,你要根据自己的真实环境来。
1号节点的主机名叫做ora19crac1 将 192.168.199.201和10.10.10.201绑定在这台机器的两块网卡上。
2号节点的主机名叫做ora19crac2 将 192.168.199.202和10.10.10.202并定在这台机器的两块网卡上。
我建议你使用以下IP:
RAC1 公有IP:192.168.100.201 私有IP 10.10.10.201
RAC2 公有IP:192.168.100.202 私有IP 10.10.10.202
所有IP对应的NETMASK(子网掩码)都是255.255.255.0
VIP(rac1-vip/rac2-vip)和SCANIP(rac-scan) 不需要你去处理,集群启动后会自动生成。
10.10.10.x这个网段你可以在宿主机上配置,也可以不配置看你心情。
编辑这两个虚拟机的/etc/hosts文件,把以下内容追加到/etc/hosts文件中
vi /etc/hosts
#RAC-PUBLIC-IP
192.168.199.201 ora19crac1
192.168.199.202 ora19crac2
#RAC-PRIVATE-IP
10.10.10.201 ora19crac1-priv
10.10.10.202 ora19crac2-priv
#RAC-VIP
192.168.199.101 ora19crac1-vip
192.168.199.102 ora19crac2-vip
#RAC-SCAN-IP
192.168.199.200 ora19crac-scan
关闭防火墙(RAC集群必须彻底关闭防火墙以防万一):
关闭防火墙
检查防火墙状态
systemctl status firewalld.service
暂时关闭防火墙,下次启动时防火墙仍随系统启动而启动
systemctl stop firewalld.service
彻底永久关闭防火墙
systemctl disable firewalld.service
关闭SELINUX防火墙!
vi /etc/selinux/config
将内容
SELINUX=enforcing
更改为
SELINUX=disabled
或者使用
sed 's#SELINUX=.*#SELINUX=disabled#' /etc/selinux/config
注:上面的命令是无法修改原文件内容的,只是去验证我们的命令是否正确,如果想要正式修改文件内容的话,请使用下面的命令:
sed -i 's#SELINUX=.*#SELINUX=disabled#' /etc/selinux/config (彻底的关闭SELINUX)
二 配置先决条件的yum源(先在RAC1这个节点上配置)
a 挂载光盘镜像
注:在虚拟机挂载光盘镜像以后,务必使用某个用户进入到虚拟机LINUX下看到桌面弹出小光盘为止(图形界面)
b 进入到光盘镜像中的Package目录中将所有的软件包复制到我们预设的目录下
mkdir /yums
CENTOS6/RHEL6 镜像挂载地点
cd /media/CentOS_6.6_Final/Packages/
cp * /yums
CENTOS7/RHEL7 镜像挂载地点
/run/media/root/CentOS 7 x86_64/Packages
CENTOS 7(这个目前适用于CENTOS7.4以及以下版本,如果你使用的是高版本的话,请自己注意具体包的名称,实在不知道就用tab键补全)
cd /yums
rpm -ivh deltarpm-3.6-3.el7.x86_64.rpm
rpm -ivh python-deltarpm-3.6-3.el7.x86_64.rpm
rpm -ivh createrepo-0.9.9-28.el7.noarch.rpm
createrepo .
进入到YUM源目录进行相关操作:
cd /etc/yum.repos.d/
rm -rf *
vi yum.local.repo
[local]
name=yum local repo
baseurl=file:///yums
gpgcheck=0
enable=1
生成yum源:
yum clean all
安装ftp(这里我们不在rac2这个虚拟机上再配置本地yum源了,我们是用一种新方法叫做:使用ftp的yum服务器)/当然了你如果不喜欢我的方法的话,你可以自己在另一个节点上再配置一次YUM源/
当然了,如果你觉得本地YUM源保险的话,依旧可以使用本地yum源没问题的。
知识点补充:FTP是一种文件传输协议,他可以传输文件。非常好用,他被经常用作我们进行相关文件传送使用。
yum install -y ftp* vsftpd*
安装好后,请执行以下操作:
cd /etc/vsftpd
vi ftpusers
然后把root用户注销掉。
修改好后保存退出
vi user_list
然后把root用户注销掉。
修改好后保存退出
vi vsftpd.conf
把下面这两个配置项前的#去掉。(在vi命令格式下使用set nu就能查看行号,这两行在82和83行)
#ascii_upload_enable=YES
#ascii_download_enable=YES
修改为
ascii_upload_enable=YES
ascii_download_enable=YES
全部修改好后保存退出
vi /etc/passwd
把
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin (在第12行)
修改为
ftp:x:14:50:FTP User:/yums:/sbin/nologin
启动 vsftpd
service vsftpd start
如果service vsftpd start 报出问题的话用下面命令启动ftp
/bin/systemctl status vsftpd.service
chkconfig vsftpd on --开机自启动
如果外面能连接上这个ftp服务器就说明没什么太大问题了。重启你的虚拟机
然后配置rac2这个节点
cd /etc/yum.repos.d/
rm -rf *
vi yum.local.repo
[local]
name=yum local repo
baseurl=ftp://192.168.199.201/
gpgcheck=0
enable=1
yum clean all
测试一下
yum install gcc
如果有反应就说明你的yum服务器配置成功了
安装先决条件包(两个节点都要做):
yum install -y bc
yum install -y compat-libcap1*
yum install -y compat-libcap*
yum install -y binutils
yum install -y compat-libstdc++-33
yum install -y elfutils-libelf
yum install -y elfutils-libelf-devel
yum install -y gcc
yum install -y gcc-c++
yum install -y glibc-2.5
yum install -y glibc-common
yum install -y glibc-devel
yum install -y glibc-headers
yum install -y ksh libaio
yum install -y libaio-devel
yum install -y libgcc
yum install -y libstdc++
yum install -y libstdc++-devel
yum install -y make
yum install -y sysstat
yum install -y unixODBC
yum install -y unixODBC-devel
yum install -y binutils*
yum install -y compat-libstdc*
yum install -y elfutils-libelf*
yum install -y gcc*
yum install -y glibc*
yum install -y ksh*
yum install -y libaio*
yum install -y libgcc*
yum install -y libstdc*
yum install -y make*
yum install -y sysstat*
yum install -y libXp*
yum install -y glibc-kernheaders
yum install -y net-tools-*
yum install -y iscsi-initiator-utils
yum install -y udev
yum install -y xclock*
三 内核参数(两个节点都做)
vi /etc/sysctl.conf
kernel.shmmax = 277495689510912
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
fs.file-max = 6815744
kernel.shmall = 67747971072
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
#net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_keepalive_intvl = 5
net.ipv4.tcp_timestamps = 0
fs.aio-max-nr = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
生成系统参数
sysctl -p
四.添加下列参数到/etc/security/limits.conf (两个节点都做)
vim /etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
grid hard memlock 134217728
grid soft memlock 134217728
五.添加下列条目到/etc/pam.d/login (两个节点都做)
vim /etc/pam.d/login
session required /lib/security/pam_limits.so
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
fi
生成环境变量
source /etc/profile
七.创建文件目录和相应的用户(两个节点都做)
#在两个节点增加用户与组:
groupadd -g 601 oinstall
groupadd -g 602 dba
groupadd -g 603 oper
groupadd -g 604 backupdba
groupadd -g 605 dgdba
groupadd -g 606 kmdba
groupadd -g 607 asmdba
groupadd -g 608 asmoper
groupadd -g 609 asmadmin
useradd -u 601 -g oinstall -G asmadmin,asmdba,dba,asmoper grid
useradd -u 602 -g oinstall -G dba,backupdba,dgdba,kmdba,asmadmin,oper,asmdba oracle
我们用这种最安全的方法修改grid和oracle用户密码
passwd grid
passwd oracle
以root用户,创建Oracle Inventory 目录
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
以root用户,创建GI HOME目录
mkdir -p /u01/app/grid
mkdir -p /u01/app/19c/grid
chown -R grid:oinstall /u01/app/grid
chmod -R 775 /u01/app/grid
chown -R grid:oinstall /u01/app/19c
chmod -R 775 /u01/app/19c/
以root用户,创建Oracle Base目录
mkdir -p /u01/app/oracle
mkdir /u01/app/oracle/cfgtoollogs
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
以root用户,创建Oracle RDBMS Home目录
mkdir -p /u01/app/oracle/product/19c/db_1
chown -R oracle:oinstall /u01/app/oracle/product/19c/db_1
chmod -R 775 /u01/app/oracle/product/19c/db_1
八.GRID用户好ORACLE用户添加环境变量
su - grid
#grid用户的环境变量如下:
vim ~/.bash_profile
PS1="[`whoami`@`hostname`:"'$PWD]$'
export PS1
umask 022
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM1
export ORACLE_TERM=xterm;
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19c/grid
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=.:$PATH:$HOME/bin:$ORACLE_HOME/bin
export THREADS_FLAG=native
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
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap asmcmd'
生成环境变量
source ~/.bash_profile
补充:两个节点的ORACLE_SID名称是不能一样的:
ora19crac1节点叫做+ASM1
ora19crac2节点叫做+ASM2
su - oracle
#oracle用户的环境变量如下:
vim ~/.bash_profile
PS1="[`whoami`@`hostname`:"'$PWD]$'
export PS1
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=rac1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/db_1
export ORACLE_SID=orcl1
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export PATH=.:$PATH:$HOME/bin:$ORACLE_BASE/product/19c/db_1/bin:$ORACLE_HOME/bin
export THREADS_FLAG=native;export THREADS_FLAG
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
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
生成环境变量
source ~/.bash_profile
补充:两个节点的ORACLE_SID名称是不能一样的:
ora19crac1节点叫做orcl1
ora19crac2节点叫做orcl2
如果你实例名不是orcl的话,那么请务必根据你的实例名改成xxxx1 xxxx2这样的格式。(xxxx代表你起的实例名)
九.配置ISCSI挂载外部存储
yum install -y iscsi*
开机启动iscsi服务
chkconfig iscsid on
发现磁盘
iscsiadm -m discovery -t sendtargets -p 192.168.199.235
手动登录目标(这里一定要注意 -T后面那个参数一定要按照你上面发现磁盘的那个结果进行更改)
iscsiadm -m node -T iqn.oracle19c.rac -p 192.168.199.235 -l
设置开机自启动连接
iscsiadm -m node -T iqn.oracle19c.rac -p 192.168.199.235 --op update -n node.startup -v automatic
查看
cd /dev/disk/by-path
ls -l /dev/disk/by-path/*iscsi* | awk '{FS=" "; print $9 " " $10 " " $11}'
检查磁盘的wwid
#!/bin/bash
for i in $(ls /dev/sd*|grep -v [0-9]|grep -v sda)
do
echo -ne "$(fdisk -l ${i}|grep ^Disk|grep ${i}|awk '{print $1,$2,$3,$4}') WWID:"
/lib/udev/scsi_id -g -u -d "${i}"
done|sort -nk3 -k5|column -t
输出结果:
Disk /dev/sde: 42.9 GB, WWID:14f504e46494c455267414a304a6b2d413653352d72653050
Disk /dev/sdf: 57.1 GB, WWID:14f504e46494c45525561634a51752d696d4b4c2d36576751
Disk /dev/sdb: 2147 MB, WWID:14f504e46494c4552774b6158696f2d5a7031692d35364e38
Disk /dev/sdc: 2147 MB, WWID:14f504e46494c4552555a6d3570652d506d56482d4b357167
Disk /dev/sdd: 2147 MB, WWID:14f504e46494c4552466d724d626f2d456b42732d7558575a
方法一(极端推荐)
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c455267414a304a6b2d413653352d72653050", SYMLINK+="asm_data", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c45525561634a51752d696d4b4c2d36576751", SYMLINK+="asm_bak", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c4552774b6158696f2d5a7031692d35364e38", SYMLINK+="asm_ocr_1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c4552555a6d3570652d506d56482d4b357167", SYMLINK+="asm_ocr_2", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", ENV{ID_SERIAL}=="14f504e46494c4552466d724d626f2d456b42732d7558575a", SYMLINK+="asm_ocr_3", OWNER="grid", GROUP="asmadmin", MODE="0660"
方法二 (实验环境可以 生产不建议你这么玩)
vi /etc/udev/rule.d/60-raw.rules
ACTION=="add", KERNEL=="sdb", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdc", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdd", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sde", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sdf", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", KERNEL=="raw[1-5]",OWNER="grid",GROUP="oinstall",MODE="660"
使用以下命令是udev生效
udevadm control --reload-rules
udevadm trigger
个人建议:如果上述文件配置完成或者要执行添加或者删除磁盘任务,编辑文件结束后最好重新启动系统。但是还是要看实际情况
九 上传软件 解压 并赋权
将
sshUserSetup.sh
cvuqdisk-1.0.10-1.rpm
kmod-20-21.el7.x86_64.rpm
kmod-libs-20-21.el7.x86_64.rpm
compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
rlwrap-0.37-1.el6.x86_64.rpm
上传到rac1的/root下
互信
sh sshUserSetup.sh -user root -hosts "ora19crac1 ora19crac2" -advanced -noPromptPassphrase #有的公司不允许root用户互信的
sh sshUserSetup.sh -user grid -hosts "ora19crac1 ora19crac2" -advanced -noPromptPassphrase
sh sshUserSetup.sh -user oracle -hosts "ora19crac1 ora19crac2" -advanced -noPromptPassphrase
使用root 、oracle和grid用户测试互信是否成功:
ssh ora19crac1 date
ssh ora19crac2 date
将文件从ora19crac1传输到ora19crac2上(root用户)
scp /root/cvuqdisk-1.0.10-1.rpm ora19crac2:/root
scp /root/kmod-20-21.el7.x86_64.rpm ora19crac2:/root
scp /root/kmod-libs-20-21.el7.x86_64.rpm ora19crac2:/root
scp /root/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm ora19crac2:/root
scp /root/rlwrap-0.37-1.el6.x86_64.rpm ora19crac2:/root
用root用户安装 (两个节点)
cd /root (必须在/root这个目录下)
rpm -ivh cvuqdisk-1.0.10-1.rpm
rpm -ivh rlwrap-0.37-1.el6.x86_64.rpm
yum install -y compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
yum install -y kmod-20-21.el7.x86_64.rpm
yum install -y kmod-libs-20-21.el7.x86_64.rpm
oracle官方建议关闭透明大页 (两个节点)
1 修改grub文件
cp /etc/default/grub /etc/default/grub.bak
vi /etc/default/grub
2 增加一行transparent_hugepage=never到尾部
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
3 执行命令
grub2-mkconfig -o /boot/grub2/grub.cfg
4 不重启生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled
5 查看是否禁用透明大页
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
或
grep AnonHugePages /proc/meminfo
AnonHugePages: 0 kB---------->>>返回值若是零代表关闭
建议重新启动。我试过了 好像不重启不行
以下所有操作都在ora19crac1上执行
用root用户把LINUX.X64_193000_grid_home.zip上传到/u01/app/19c/grid目录下
cd /u01/app/19c/grid
chown -R grid:oinstall LINUX.X64_193000_grid_home.zip
切换到grid用户并解压
su - grid
cd $ORACLE_HOME
unzip LINUX.X64_193000_grid_home.zip
export DISPLAY=xxxxxxx(按自己真实的写)
./gridSetup.sh
截图都在《19CRAC安装文档截图版.docx》
#########################################################
grid软件安装完成以后,我们开始安装database软件。
用root用户把database软件的压缩包LINUX.X64_193000_db_home.zip上传到/u01/app/oracle/product/19c/db_1
cd /u01/app/oracle/product/19c/db_1
chown -R oracle:oinstall LINUX.X64_193000_db_home.zip
切换到oracle用户并解压
su - oracle
cd $ORACLE_HOME
unzip LINUX.X64_193000_db_home.zip
export DISPLAY=xxxxxxx(按自己真实的写)
./runInstaller
截图都在《19CRAC安装文档截图版.docx》
十 卸载软件
rm -rf /u01/app/19c/grid/*
rm -rf /u01/app/grid/*
rm -rf /u01/app/oraInventory/*
rm -rf /u01/app/oracle/product/19c/db_1/*
rm -rf /etc/ora*
rm -rf /tmp/.oracle
rm -rf /tmp/OraInstall*
rm -rf /opt/ORCLfmap
rm -rf /var/tmp/.orac*
rm -rf /usr/local/bin/oraenv
rm -rf /usr/local/bin/coraenv
如果你有ASM的话,需要使用这种方式格式化
dd if=/dev/zero of=/dev/sdb bs=1M count=1024
dd if=/dev/zero of=/dev/sdc bs=1M count=1024
dd if=/dev/zero of=/dev/sdd bs=1M count=1024
dd if=/dev/zero of=/dev/sde bs=1M count=1024
dd if=/dev/zero of=/dev/sdf bs=1M count=1024
dd if=/dev/zero of=/dev/sdg bs=1M count=1024
dd if=/dev/zero of=/dev/sdh bs=1M count=1024
dd if=/dev/zero of=/dev/sdi bs=1M count=1024
dd if=/dev/zero of=/dev/sdj bs=1M count=1024
dd if=/dev/zero of=/dev/sdk bs=1M count=1024
dd if=/dev/zero of=/dev/sdl bs=1M count=1024
dd if=/dev/zero of=/dev/sdm bs=1M count=1024
dd if=/dev/zero of=/dev/sdn bs=1M count=1024
这个省略掉。
blacklist {
devnode "^sd[b-e]" #过滤磁盘,哪些不做多路径
}
defaults {
user_friendly_names yes
path_grouping_policy multibus
failback immediate
no_path_retry fail
}
service multipathd.service start
/sbin/iscsiadm -m node -T iqn.3960-05.storos.t-11 -p 192.168.10.250 -l
/sbin/iscsiadm -m node -T iqn.3960-05.storos.t-12 -p 192.168.10.250 -l
/sbin/iscsiadm -m node -T iqn.3960-05.storos.t-13 -p 192.168.10.250 -l
/sbin/iscsiadm -m node -T iqn.3960-05.storos.t-14 -p 192.168.10.250 -l
/sbin/iscsiadm -m node -T iqn.3960-05.storos.t-15 -p 192.168.10.250 -l
29335
/
相关文章:
RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)
一 首先需要安装两个CENTOS 7虚拟机(此处省略)。 由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡,并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》 这里大家需要注意的是,我们需要绑定两台机器的IP一共…...

CCSK:面试云计算岗的高频问题
在竞争激烈的云计算岗位求职市场中,拥有 CCSK云计算安全知识认证无疑能为你增添强大的竞争力。而深入了解云计算面试中的高频问题并熟练掌握答案,更是迈向成功的关键一步。 一、AWS 相关问题 AWS 是重要考点,常被问到其关键特性,…...

C++ String(1)
String的头文件是#include <string> String本质上是一个类,是C实现好的一个类 初学只用学重要的部分,不可能一次性全部学完 1.构造函数 我们先来看它的几个构造函数 首先(1)就是无参的构造 (2)是…...
ts 中 ReturnType 作用
ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型,其语法为ReturnType<T>,其中T是一个函数类型。例如,如果有一个函数add,ReturnType<typeof add>就可以获取…...

Hadoop + Hive + Apache Ranger 源码编译记录
背景介绍 由于 CDH(Clouderas Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。 组件…...

Java从入门到精通笔记篇(十二)
枚举类型与泛型 枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中 使用枚举类型设置常量 关键字为enum 枚举类型的常用方法 values()方法 枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。 valueOf()可…...
入侵排查之Linux
目录 1.黑客入侵后的利用思路 2.入侵排查思路 2.1.账号安全 2.1.1.用户信息文件/etc/passwd 2.1.2.影子文件/etc/shadow 2.1.3.入侵排查 2.1.3.1.排查当前系统登录信息 2.1.4.2.查询可以远程登录的账号信息 2.2.历史命令 2.2.1.基本使用 2.2.1.1.root历史命令 2.2.…...

从0开始学习Linux——文件管理
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…...

全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
一、软件系统设计开发运行安全 1、注重OpenSource组件安全检查和版本更新(black duck) 现在很多云、云服务器都是由开源的组件去搭成的,对于OpenSource组件应该去做一些安全检查和版本更新,尤其是版本管理,定期对在运…...
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装 目次1. Leidenアルゴリズムの概要2. Python実装例3. グループ分けの結果分析4. なぜこのような分割になるのか5. Leidenアルゴリズムの仕組み6. 実践的な応用例7. 初心者へのアドバイス8. まとめ …...

安当ASP系统:适合中小企业的轻量级Radius认证服务器
安当ASP(Authentication Service Platform)身份认证系统是一款功能强大的身份认证服务平台,特别适用于中小企业。其中,简约型Radius认证服务器是安当ASP系统中的一个重要组成部分。以下是对该系统的详细介绍: 一、主要…...
Vue 组件间传值指南:Vue 组件通信的七种方法
前言 Vue 的组件系统非常强大,允许我们将应用程序拆分成独立且可复用的组件。随着前端开发的复杂性增加,组件间的数据传递和状态管理显得尤为重要。本文将详细介绍几种在 Vue 中常用的组件间传值方法,并结合实际代码示例,帮助您更…...

推荐一个超漂亮ui的网页应用设计
https://andi.cn/download/65211.html...

有什么初学算法的书籍推荐?
对于初学算法的读者,以下是一些值得推荐的书籍: 1、算法超简单:趣味游戏带你轻松入门与实践 作者:童晶 著 推荐理由:本书把趣味游戏应用于算法教学,提升读者的学习兴趣,并通过可视化的图解和动…...
自动化工作流建设指南
🚀 自动化工作流建设指南:CI/CD、Github Actions与自动化测试部署 打造现代化的自动化工作流,提升团队开发效率。今天咱们将深入探讨 CI/CD 最佳实践、Github Actions 实战经验以及自动化测试与部署策略。 📑 目录 CI/CD 最佳实践…...

[免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue3校园宿舍管理系统(优质版),分享下哈。 项目视频演示 【免费】SpringBootVue3校园宿舍管理系统(优质版) Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术的不断发展&…...
SNK施努卡 - 机器人测温取样系统
机械手测温取样系统 有色行业自动化 机器人:机械手测温取样系统是以工业机器人为平台,技术相对成熟稳定,利用机器人的灵活性,自动往测温取样枪上安装探头,自动将探头伸进高温铜水内进行测温取样,自动拆除废…...
goframe开发一个企业网站 验证码17
Go验证码功能实现详解 目录结构 ├── internal │ ├── controller │ │ └── captcha │ │ └── captcha.go │ ├── logic │ │ └── captcha │ │ └── captcha.go │ └── service │ └── captcha.go1. Serv…...

【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …...
MySQL电商多级分类表设计方案对比
MySQL电商多级分类表设计方案对比 在电商系统中,多级分类是一个常见的需求,用于组织和管理商品类别,合理的设计可以提高系统的性能和可维护性。本文将详细介绍三种不同的多级分类表设计方案,我们将使用宠物分类作为示例数据&…...
九、【ESP32开发全栈指南: UDP通信服务端】
一、TCP与UDP核心差异 特性TCPUDP连接方式面向连接 (需三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付 (不保证可靠性)实时性延迟较高低延迟,实时性强传输效率协议开销大头部开销小 (仅8字节)连接类型点对点支持广播/多播资源占用高 (需维护连接状态)极低…...

Spring AI(10)——STUDIO传输的MCP服务端
Spring AI MCP(模型上下文协议)服务器Starters提供了在 Spring Boot 应用程序中设置 MCP 服务器的自动配置。它支持将 MCP 服务器功能与 Spring Boot 的自动配置系统无缝集成。 本文主要演示支持STDIO传输的MCP服务器 仅支持STDIO传输的MCP服务器 导入j…...

《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估
一、写在前面 基因捕获效率、分辨率一直是空间转录组细胞类型识别的拦路虎,许多算法能够整合单细胞(single-cell, sc)或单细胞核(single-nuclear, sn)数据与空间转录组数据,从而帮助空转数据的细胞类型注释。此前我们介绍过近年新出炉的Stereo-seq平台&…...

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!
PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)🤩 工具介绍🥳 主要功能🤪 软件使用🤪 参数解释🤪 关键代码🤩 项…...

数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20250607)
数据库管理334期 2024-06-07 数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20240607)1 环境与安装介质2 操作标准系统配置2.1 关闭防火墙2.2 关闭SELinux2.3 关闭avahi-daemon2.4 时间同步配置 3 存储服务器配置3.1 配置本地yum源3.2 安装…...

408第一季 - 数据结构 - 线性表
只能用C/C! 顺序表 闲聊 线性表的逻辑顺序和物理顺序相同 都是1234 顺序表的优点: 随机访问,随机访问的意思是访问的时间 和位置没有关系,访问下标1和100一样的,更深层就是直接计算 a100 * 数组大小,随便…...
npm error Cannot read properties of null (reading ‘matches‘)
当在使用 npm 命令时遇到 Cannot read properties of null (reading matches) 错误,这通常表示代码尝试访问一个 null 对象的 matches 属性。以下是综合多个来源的解决策略,按优先级排列: 一、核心解决方法 1. 清理缓存与重新安装依赖&…...
python学习打卡day47
DAY 47 注意力热图可视化 昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 # 可视化空间注意力热力图(显示模型关注的图像区域) def visualize_attention_map(model, test_loader,…...
spring:继承接口FactoryBean获取bean实例
spring框架提供接口FactoryBean获取bean实例。 实现步骤: 实现接口FactoryBean。 在xml文件中配置实现接口FactoryBean的类。 调用接口FactoryBean中方法getObject,获取bean实例。 实现接口类 package com.itheima.factory;import org.springframework…...
Docker 容器化基础:镜像、容器与仓库的本质解析
Docker 概念与容器化技术 Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...