当前位置: 首页 > 编程日记 > 正文

Step-By-Step在AIX上安装Oracle RAC

最近遇到一个项目,是在AIX5.3上安装ORACLE 9i RAC,说实话,ORACLE俺压根就没有接触过,我也是临危受命。感觉如同当年实施AS400的XSM项目一般。无奈,下载了N多本REDBOOK开始研究,终于有了些眉目,找到了一份英文资料《Step-By-Step Installation of RAC on IBM AIX  (RS/6000)》看后觉得很不错,闲暇之余翻译并修改了一些地方,发到这里与大家分享。

Oracle RAC的三种架构模式
1、RAC+HACMP---最常见,但是其实安装HACMP只为了使用concurrent vg
attachimg.gif 20120605091733884.jpg
下载 (20.92 KB)
2009-10-11 23:20

2、RAC+GPFS---个人感觉应该是比较好的选择,减少了管理的复杂度
attachimg.gif 20120605091743541.jpg
3、RAC+ASM---由于使用ASM管理磁盘系统,所以从系统层面来看存在一些弊端
attachimg.gif 20120605091808782.jpg
下载 (23.57 KB)
2009-10-11 23:20


以上是个人的粗略之见,不对之处,还望高手指教。这次项目是RAC+HACMP,希望有机会尝试一下另外两种模式,哈哈

马上就要实施这个项目,我将在实施的过程中随时上来与大家分享实战心得
  
? 1. Configuring the Cluster Hardware  
o 1.1 Minimal Hardware list / System Requirements  
§ 1.1.1 Hardware  
§ 1.1.2 Software  
§ 1.1.3 Patches  
o 1.2 Installing Disk Arrays  
o 1.3 Installing Cluster Interconnect and Public Network Hardware  
? 2. Creating a cluster  
o 2.1 HACMP/ES Software Installation  
o 2.2 Configuring Cluster Topology  
o 2.3 Synchronizing Cluster Topology  
o 2.4 Configuring Cluster Resources  
§ 2.4.1 Create volume groups to be shared concurrently on one node  
§ 2.4.2 Create Shared RAW Logical Volumes   
§ 2.4.3 Import the Volume Group on to the Other Nodes  
§ 2.4.4 Add a Concurrent Cluster Resource Group  
§ 2.4.5 Configure the Concurrent Cluster Resource Group  
§ 2.4.6 Creating Parallel Filesystems (GPFS)   
o 2.5 Synchronizing Cluster Resources  
o 2.6 Joining Nodes Into the Cluster  
o 2.7 Basic Cluster Administration  
? 3. Preparing for the Installation of RAC  
o 3.1 Configure the shared disks and UNIX preinstallation tasks  
§ 3.2.1 Configure the shared disks  
§ 3.2.2 UNIX preinstallation tasks  
o 3.2 Using the Oracle Universal Installer for Real Application Clusters  
o 3.3 Create a RAC Database using the Oracle Database Configuration Assistant  
? 4. Administering Real Application Clusters Instances  
? 5. References  
  
1. 配置群集硬件  
1.1 系统需求
至少需要两个节点
查看AIX和RAC的兼容性列表
1.1.1 硬件
? IBM 小型机 – 两台运行 AIX 4.3.3 或 5L (需要64位)
? 至少512MB内存,1G换页空间
1.1.2 软件
? 当使用IBM AIX 4.3.3时:   
o HACMP/ES CRM 4.4.x   
o 数据文件仅支持RAW Logical Volumes (Raw Devices)  
o Oracle数据库企业版 9i Release 1 (9.0.1) 或 9i Release 2 (9.2.0)   
? 当使用IBM AIX 5.1 (5L)时:   
o 数据库文件 RAW Logical Volumes (Raw Devices)和Parallel Filesystem (GPFS):   
o HACMP/ES CRM 4.4.x(当使用GPFS时不需要HACMP)
o GPFS 1.5   
o IBM Patch PTF12 and IBM patch IY34917 or IBM Patch PTF13   
o Oracle Server Enterprise Edition 9i Release 2 (9.2.0)  
o Oracle数据库企业版(含RAC)9i for AIX 4.3.3 和 5L 包含在不同的CD中  
1.1.3 补丁
需要如下补丁:
? IBM AIX 操作系统环境补丁  
? 存储firmware或者微码补丁
补丁考虑因素:
? 务必保证所有节点中的补丁版本一致
? 不要轻易安装firmware相关的补丁
? 尽量获得最新补丁的相关信息

1.2 安装磁盘阵列
参照磁盘阵列的初始安装说明完成安装步骤。
1.3 安装群集互联和公共网络硬件
该部分务必在群集被配置前配置完成并保证可用
? 如果尚未安装,则在群集节点中安装主机适配器。
? 如果群集中超过两个节点,则需要交换机进行连接
  
2. 创建群集
2.1 IBM HACMP/ES软件安装
大致步骤如下:
? 安装硬件
? 安装IBM AIX操作系统软件
? 安装最新的AIX操作系统补丁
? 在每个节点上安装HACMP/ES 4.X.X软件
? 安装HACMP/ES需要的补丁
? 配置群集拓扑
? 同步群集拓扑
? 配置群集资源
? 同步群集资源
在HACMP for AIX 4.X.X 的安装过程中,需要如下包被安装:
? cluster.adt.es.client.demos  
? cluster.adt.es.client.include  
? cluster.adt.es.server.demos  
? cluster.clvm.rte  HACMP for AIX Concurrent  
? cluster.cspoc.cmds HACMP CSPOC commands  
? cluster.cspoc.dsh  HACMP CSPOC dsh and perl  
? cluster.cspoc.rte  HACMP CSPOC Runtime Commands  
? cluster.es.client.lib ES Client Libraries  
? cluster.es.client.rte  ES Client Runtime  
? cluster.es.client.utils  ES Client Utilities  
? cluster.es.clvm.rte  ES for AIX Concurrent Access  
? cluster.es.cspoc.cmds  ES CSPOC Commands>;  
? cluster.es.cspoc.dsh  ES CSPOC dsh and perl  
? cluster.es.cspoc.rte  ES CSPOC Runtime Commands  
? cluster.es.hc.rte  ES HC Daemon  
? cluster.es.server.diag  ES Server Diags  
? cluster.es.server.events ES Server Events  
? cluster.es.server.rte  ES Base Server Runtime  
? cluster.es.server.utils  ES Server Utilities  
? cluster.hc.rte  HACMP HC Daemon  
? cluster.msg.En_US.cspoc  HACMP CSPOC Messages - U.S.  
? cluster.msg.en_US.cspoc  HACMP CSPOC Messages - U.S.  
? cluster.msg.en_US.es.client  
? cluster.msg.en_US.es.server  
? cluster.msg.en_US.haview  HACMP HAView Messages - U.S.  
? cluster.vsm.es  ES VSM Configuration Utility  
? cluster.clvm.rte  HACMP for AIX Concurrent  
? cluster.es.client.rte  ES Client Runtime  
? cluster.es.clvm.rte  ES for AIX Concurrent Access  
? cluster.es.hc.rte  ES HC Daemon  
? cluster.es.server.events  ES Server Events  
? cluster.es.server.rte  ES Base Server Runtime  
? cluster.es.server.utils  ES Server Utilities  
? cluster.hc.rte  HACMP HC Daemon  
? cluster.man.en_US.client.data  
? cluster.man.en_US.cspoc.data  
? cluster.man.en_US.es.data  ES Man Pages - U.S. English  
? cluster.man.en_US.server.data  
? rsct.basic.hacmp RS/6000 Cluster Technology  
? rsct.basic.rte RS/6000 Cluster Technology  
? rsct.basic.sp  RS/6000 Cluster Technology  
? rsct.clients.hacmp  RS/6000 Cluster Technology  
? rsct.clients.rte  RS/6000 Cluster Technology  
? rsct.clients.sp  RS/6000 Cluster Technology  
? rsct.basic.rte  RS/6000 Cluster Technology  
你可以使用如下命令验证HACMP软件的安装情况
    # /usr/sbin/cluster/diag/clverify

2.2 配置群集拓扑
使用如下命令:
  # smit hacmp

添加群集定义:
  Smit HACMP ->; Cluster Configuration ->; Cluster Topology ->; Configure Cluster ->; Add a Cluster Definintion
快捷路径:
  # smit cm_config_cluster.add
在打开的界面中为群集指定一个名字,例如cluster01

配置节点:
  Smit HACMP ->; Cluster Configuration ->; Cluster Topology ->; Configure Nodes ->; Add Cluster Nodes
快捷路径:
  # smit cm_config_nodes.add
在打开的界面中为群集指定参与的节点,例如Node1和Node2

配置网络适配器[以每个节点两个网络适配器和一个串口为例]
Node Name address IP Label (/etc/hosts) Type
  node1 192.168.0.1 node1srvc service服务IP
        192.168.1.1 node1stby standby 启动IP
        /dev/tty0   serial用于心跳
  node2 192.168.0.2 node2srvc service 服务IP
        192.168.1.2 node2stby standby 启动IP
        /dev/tty0   serial用于心跳
   
将网络配置定义到群集配置中:  
  Smit HACMP ->; Cluster Configuration ->; Cluster Topology ->; Configure Nodes ->; Add an Adapter
快捷路径:
  # smit cm_confg_adapters.add
在打开的界面中为群集指定参与节点的网络设置。务必保证Adapter IP Label与/etc/hosts中的定义一致,Network Name可以选择ipa或者rs232
例如:  
                         Add an AdapterType or select values in entry fields.
* Adapter IP Label                                   [node1stby]
* Network Type                                       [ether]                  +
* Network Name                                       [ipa]                    +
* Network Attribute                                   public                  +
* Adapter Function                                    standby                 +  
Adapter Identifier                                 []  
Adapter Hardware Address                           []  
Node Name                                          [node1]                  +

            Add an AdapterType or select values in entry fields.
* Adapter IP Label                                   [node1_tty]
* Network Type                                       [rs232]                  +
* Network Name                                       [serial]                 +
* Network Attribute                                   serial                  +
* Adapter Function                                    service                 +  
Adapter Identifier                                 [/dev/tty0]  
Adapter Hardware Address                           []  
Node Name                                          [node1]                  + 
Oracle RAC for AIX.rar (43.49 KB)
下载次数:116
2009-10-13 21:48
英文原版与汉化版

2.3 同步群集拓扑
在进行同步之前需要在"/" 目录下创建".rhosts" 文件.   
  ".rhosts" 文件样例:
      node1 root
      node2 root
保证"/.rhosts" 文件的权限是 600.   
   # chmod 600 /.rhosts
使用"rcp" 命令在每个节点上测试:
   在node1上:
     # rcp /etc/group node2:/tmp
   在node2上:
     # rcp /etc/group node1:/tmp

同步群集拓扑:
  Smit HACMP ->; Cluster Configuration ->; Cluster Topology ->; Synchronize Cluster Topology
快捷路径:
  # smit configchk.dialog

2.4 配置群集资源组
在RAC的配置中仅需要一个资源组。这个资源组就是共享卷组的并行资源组:
1)使用lspv检查是否目标硬盘被物理连接到群集中的两个节点
2.4.1 在一个节点上创建并行卷组
  # smit vg  并选择"Add a Volume Group"
在打开的界面中设定该卷组为并行卷组,禁止卷组的自动启动和并行模式的自动激活,务必保证 major number 在所有节点中相同
2.4.2 如果不使用GPFS,则创建共享的 RAW Logical Volumes
  mklv -y'db_name_cntrl1_110m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_cntrl2_110m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_system_400m' -w'n' -s'n' -r'n' usupport_vg 13 hdisk5
  mklv -y'db_name_users_120m' -w'n' -s'n' -r'n' usupport_vg  4 hdisk5
  mklv -y'db_name_drsys_90m' -w'n' -s'n' -r'n' usupport_vg 3 hdisk5
  mklv -y'db_name_tools_12m' -w'n' -s'n' -r'n' usupport_vg 1 hdisk5
  mklv -y'db_name_temp_100m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_undotbs1_312m' -w'n' -s'n' -r'n' usupport_vg 10 hdisk5
  mklv -y'db_name_undotbs2_312m' -w'n' -s'n' -r'n' usupport_vg 10 hdisk5
  mklv -y'db_name_log11_120m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_log12_120m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_log21_120m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_log22_120m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_indx_70m' -w'n' -s'n' -r'n' usupport_vg 3 hdisk5
  mklv -y'db_name_cwmlite_100m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
  mklv -y'db_name_example_160m' -w'n' -s'n' -r'n' usupport_vg  5 hdisk5
  mklv -y'db_name_oemrepo_20m' -w'n' -s'n' -r'n' usupport_vg 1 hdisk5
  mklv -y'db_name_spfile_5m' -w'n' -s'n' -r'n' usupport_vg 1 hdisk5
  mklv -y'db_name_srvmconf_100m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5
解释:"mklv -y'db_name_cntrl1_110m' -w'n' -s'n' -r'n' usupport_vg 4 hdisk5"将创建4个分区,每个分区32MB,该命令创建两个文件:
   /dev/db_name_cntrl1_110m     物理文件
  /dev/rdb_name_cntrl1_110m     裸设备文件(raw)
使用下面的方法修改文件的权限:
  # chown oracle:dba /dev/rdb_name*
2.4.3 在其他节点中导入卷组
在第一个节点中输入:
   %  varyoffvg 卷组名
在其他节点中输入"smit vg" :
选择"Import a Volume Group"
在打开的界面中禁止卷组的自动启动和并行模式的自动激活,务必保证 major number 与之前节点中的相同
使用下面的方法修改文件的权限:  
    # chown oracle:dba /dev/rdb_name*  
2.4.4 添加一个并行资源组
  Smit HACMP ->; Cluster Configuration ->; Cluster Resources ->; Define Resource Groups ->; Add a Resource Group
快捷路径:
  # smit cm_add_grp
2.4.5 配置并行资源组
  Smit HACMP ->; Cluster Configuration ->; Cluster Resources ->; Change/Show Resources for a Resource Group
快捷路径:
  # smit cm_cfg_res.select
在打开的界面中Concurrent Volume groups处输入之前创建的并行卷组名
2.4.6  创建并行文件系统(GPFS)  此处忽略
With AIX 5.1 (5L) you can also place your files on GPFS (RAW Logical Volumes are not a requirement of GPFS). In this case create GPFS capable of holding all required Database Files, Controlfiles and Logfiles.  

2.5 同步群集资源组
  Smit HACMP ->; Cluster Configuration ->; Cluster Resources ->; Synchronize Cluster Resources
快捷路径:
  # smit clsyncnode.dialog

2.6 添加节点到群集中
  Smit HACMP ->; Cluster Services ->; Start Cluster Services
快捷路径:
  # smit clstart.dialog  
在打开的界面中 "Startup Cluster Information Daemon?" 应该选择为"true".   
通过查看"/etc/hacmp.out"可以得知启动情况。如果节点添加成功则会显示在 "/tmp/hacmp.out" 文件中:

2.7 基本群集管理
"/tmp/hacmp.out"是最好的查看群集信息的地方。"clstat" 也可以用于验证群集的健康情况。
  # /usr/es/sbin/cluster/clstat
快速查看群集服务情况:
  Smit HACMP ->; Cluster Services ->; Show Cluster Services
  
3.0 安装RAC前的准备工作
The Real Application Clusters安装过程包含以下四个步骤.  
1. 配置共享磁盘和UNIX预安装任务.  
2. 安装Oracle9i Enterprise Edition 和Oracle9i Real Application Clusters 软件.  
3. 创建和配置数据库.   

3.1 配置共享磁盘和UNIX预安装任务
3.1.1 配置共享磁盘
如果你没有安装GPFS,那么Real Application Clusters 需要所有的实例都可以访问在共享磁盘上未被格式化的设备,即裸设备。
Oracle 实例通过配置RAC可以向裸设备写入:
? 控制文件
? spfile.ora  
? 数据文件
? 在线重做日志文件
? 服务器管理(SRVM)配置信息
因此为每一个类型的文件定义裸设备十分必要。Oracle数据库配置助手将创建如下配置:
Raw         Volume File         Size         Sample File Name
SYSTEM      tablespace          400 Mb       db_name_raw_system_400m
USERS       tablespace          120 Mb       db_name_raw_users_120m
TEMP        tablespace          100 Mb       db_name_raw_temp_100m
UNDOTBS     tablespace          312 Mb       db_name_raw_undotbsx_312m
CWMLITE     tablespace          100 Mb       db_name_raw_cwmlite_100m
EXAMPLE                         160 Mb       db_name_raw_example_160m
OEMREPO                         20 Mb        db_name_raw_oemrepo_20m
INDX        tablespace          70 Mb        db_name_raw_indx_70m
TOOLS       tablespace          12 Mb        db_name_raw_tools_12m
DRYSYS      tablespace          90 Mb        db_name_raw_drsys_90m
First       control file        110 Mb       db_name_raw_controlfile1_110m
Second      control file        110 Mb       db_name_raw_controlfile2_110m
两个在线重做日志文件,每个120 Mb x 2        db_name_thread_lognumber_120m
spfile.ora                      5 Mb         db_name_raw_spfile_5m
srvmconfig                      100 Mb       db_name_raw_srvmconf_100m
3.1.2 UNIX预安装步骤
使用root用户运行installPrep.sh脚本 [从网上下载,提供自动检查]
添加Oracle用户
? 确保在所有的节点上已经创建了osdba 组和oinstall组(primary group)
典型的定义如下:  
osdba::101:oracle
oinstall::102:root,oracle
? 在每个节点上创建oracle用户,确保:  
o 是osdba 组的成员
o oinstall 作为首选组
o 仅用于安装和升级Oracle软件
o 拥有远程目录的写权限
创建用户:
   Smit ->; Security & Users ->; Users ->; Add a User
快捷路径:
  # smit mkuser  
? 创建挂载点目录,确保:
o 每个节点的挂载点相同
o oracle帐户拥有读写和执行权限
? 在安装Oracle的节点上,设定用户等效。包含本地节点,oracle帐户的.rhosts文件或者/etc/hosts.equiv 文件.  
? 对于oracle帐户,通过执行远程登录(rlogin)来检查群集中每个节点的用户等效机制
建立系统环境变量:
?在用户的PATH中设定本地的bin目录, 例如 /usr/local/bin, 或者 /opt/bin. 在这些目录中拥有执行权限十分重要
? 设定 DISPLAY 变量指向显示系统的IP地址,名称,X服务器和屏幕
? 为TMPDIR设定至少20MB的临时目录空间
设定Oracle环境变量(建议):
ORACLE_BASE eg /u01/app/oracle
ORACLE_HOME eg /u01/app/oracle/product/901
ORACLE_TERM xterm
NLS_LANG AMERICAN-AMERICA.UTF8 for example
ORA_NLS33 $ORACLE_HOME/ocommon/nls/admin/data
PATH Should contain $ORACLE_HOME/bin
CLASSPATH $ORACLE_HOME/JRE:$ORACLE_HOME/jlib \$ORACLE_HOME/rdbms/jlib: \$ORACLE_HOME/network/jlib
? 创建目录 /var/opt/oracle 并设定oracle用户的所有权.  
? 验证/opt/SUNWcluster/bin/lkmgr的存在.

3.2 安装Oracle数据库和Real Application Clusters
安装Oracle软件,请执行一下步骤:
? 使用root用户登录并加载光驱
# mount -rv cdrfs /dev/cd0 /cdrom
? 执行存放于光盘中的"rootpre.sh" 脚本
# / ;/rootpre.sh      
? 使用oracle 用户登录并执行"runInstaller".
$ / ;/runInstaller
? 打开图形界面执行安装.  
? 关于Inventory Location的定义存放在/etc/oraInst.loc中.
? 验证用户组。可以执行/tmp/orainstRoot.sh来强制通过验证
? 选择配置类型为高级配置。
? 选择数据库将要安装的其他节点。
? 建议raw partition最小100MB.  
? 务必不要选择升级或者迁移已经存在的数据库选项,否则将导致错误
? 显示总结界面.确认RAC 数据库软件被选择。OUI将安装 Oracle9i 软件到当前的节点,然后拷贝信息到其他已选的节点上.  

3.3 使用Oracle数据库配置助手创建RAC数据库

4.0 管理Real Application Clusters实例
Oracle公司建议使用SRVCTL去管理RAC数据库环境. 在使用SRVCTL之前, 确保在配置完数据库后的Global Services Daemon (GSD) 处于运行状态. 为了使用SRVCTL,必须为所管的数据库创建了配置信息.
如果这是群集中的第一个Oracle9i数据库, 则必须初始clusterwide SRVM 配置. 首先, 创建或者编辑/var/opt/oracle/srvConfig.loc文件并且添加 srvconfig_loc=path_name.其中的path_name指cluster-shared raw volume
例如
$ vi /var/opt/oracle/srvConfig.loc
srvconfig_loc=/dev/rrac_srvconfig_100m
然后执行如下命令初始这个raw volume (Note: gsd运行过程中不可执行. Prior to 9i Release 2 you will need to kill the .../jre/1.1.8/bin/... process to stop the gsd from running. From 9i Release 2 use the gsdctl stop command):
$ srvconfig -init
第一次使用 SRVCTL 去创建配置,需要在所有节点上启用GSD以便SRVCTL可以访问节点信息。然后执行srvctl add命令使RAC知道哪些实例属于该节点:
对于Oracle RAC v9.0.1:  
$ gsd
Successfully started the daemon on the local node.
$ srvctl add db -p db_name -o oracle_home
然后从每个节点输入命令:  
$ srvctl add instance -p db_name -i sid -n node
显示配置信息,输入如下命令:
$ srvctl config  
racdb1
racdb2
$ srvctl config -p racdb1
racnode1 racinst1
racnode2 racinst2
$ srvctl config -p racdb1 -n racnode1
racnode1 racinst1

启动和停止RAC的命令如下:
$ srvctl start -p racdb1
Instance successfully started on node: racnode2
Listeners successfully started on node: racnode2
Instance successfully started on node: racnode1
Listeners successfully started on node: racnode1

$ srvctl stop -p racdb2  
Instance successfully stopped on node: racnode2
Instance successfully stopped on node: racnode1
Listener successfully stopped on node: racnode2
Listener successfully stopped on node: racnode1

$ srvctl stop -p racdb1 -i racinst2 -s inst  
Instance successfully stopped on node: racnode2

$ srvctl stop -p racdb1 -s inst
PRKO-2035 : Instance is already stopped on node: racnode2
Instance successfully stopped on node: racnode1
  
对于Oracle RAC v9.2.0+:
$ gsdctl start
Successfully started the daemon on the local node.
$ srvctl add database -d db_name -o oracle_home [-m domain_name] [-s spfile]
然后从每个节点输入命令:  
$ srvctl add instance -d db_name -i sid -n node

显示配置信息,输入如下命令:
racnode1/2 with instances racinst1/2 run:-  

$ srvctl config  
racdb1
racdb2

$ srvctl config -p racdb1 -n racnode1
racnode1 racinst1 /u01/app/oracle/product/9.2.0.1

$ srvctl status database -d racdb1
Instance racinst1 is running on node racnode1
Instance racinst2 is running on node racnode2

启动和停止RAC的命令如下:
$ srvctl start database -d racdb2

$ srvctl stop database -d racdb2

$ srvctl stop instance -d racdb1 -i racinst2  

$ srvctl start instance -d racdb1 -i racinst2

$ gsdctl stat
GSD is running on local node
$ gsdctl stop

CUUG官网
更多oracle视频教程请点击:http://crm2.qq.com/page/portalpage/wpa.php?uin=800060152&f=1&ty=1&aty=0&a=&from=6

转载于:https://blog.51cto.com/19880614/1127694

相关文章:

Python中输出字体的颜色设置

1.实现过程 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关。控制字符颜色的转义序列是以ESC开头,即用\033来完成 2.书写过程开头部分: \033[显示方式;前景色;背景色m结尾部分: \033[0m注意:开头部分的三个…

linux进程间通信:system V 信号量

文章目录概念描述通信原理编程接口使用流程编程案例概念描述 英文:semaphore 简称SEM,主要用来进行进程间同步本质:内核维护的一个正整数,可对其进行各种/-操作分类:systemV 信号量、POSIX 有名信号量、POSIX 无名信号…

设计模式总结1

1.代码不是没有错误就是最好的 (1)命名要规范-------取一个好的名字。 (2)代码少做无用功。 (3)注意逻辑错误。 (4)面向对象:可维护、可复用、可扩展、灵活性好。 2.简单…

mysql 单选字段_mysql字段类型

学习自 https://www.cnblogs.com/jennyyin/p/7895010.html,感谢原博主的奉献mysql支持多种类型,大致可以分为三类:数值、字符串、日期/时间。数值类型类型大小范围(有符号)范围(无符号)用途tinyint1字节(-128, 127)(0,255)小整数值smallint2字…

ios时间差,以时间格式显示

为什么80%的码农都做不了架构师?>>> NSDate *nowDate [[NSDate alloc]init]; double diffTime [nowDate timeIntervalSinceDate:preDate]; int diffHour diffTime / (60*60); int diffMin ( diffTime - diffHour*(60*60) ) / (60); int diffSec…

深入理解C++中public、protected及private用法

深入理解C中public、protected及private用法 这篇文章主要介绍了C中public、protected及private用法,对于C面向对象程序设计来说是非常重要的概念,需要的朋友可以参考下初学C的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问…

v-vim 代码批量缩进,字符串精确查找及替换

vim中代码批量缩进 有如下两种办法&#xff0c;主要依靠>和<字符来进行 缩进的单位通过设置~/.vimrc,添加如下行 set tabstop4 "设定tab宽度为4个字符 set shiftwidth4 "设定自动缩进为4个字符 set expandtab "用space替代tab的输入 set noexpandtab &q…

Codeforces Round #228 (Div. 1)B

进制构造 这里用了十进制 有点像串并联 每一位代表的数分开表示出来再把每一位的数并起来 比如892 就是800902 800又可分为8*10*10。。。 1 #include <iostream>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 #include<stdlib.h&g…

javaweb实现mysql备份功能_java web 实现mysql 数据库备份、恢复

如题&#xff0c;由于项目需要&#xff0c;研究并实现了java web的 mysql数据库的备份、下载、恢复功能&#xff0c;中间遇到一些问题&#xff0c;耗费了不少时间&#xff0c;下面让我一一道来&#xff1a;背景介绍&#xff1a;window 7系统mysql 5.7eclipsespring mvctomcat 7…

在windows8 上安装framework 3.5

在电脑上装了windows8 的双系统后&#xff0c;为了装上Windows Live Writer&#xff0c;需要安装framework3.5.在线安装等了很久都装不上&#xff0c;下载的安装包不能用&#xff0c;提示需要framework3.5的支持。死循环啊 。搜索找到离线更新的方法&#xff0c; 离线更新方法&…

C#第一章笔记

第一个C#程序 namespace 是C#中组织代码的方式&#xff0c;它的作用那个类似java中的包 using 在Java中作用如果导入其他包 应该是用import关键字而在C#中应使用using关键字来引用 class关键字 与java一样C#也是一门面向对象的得语言&#xff0c;使用class关键字来表示类 Main&…

linux进程间通信:system V 信号量和共享内存实现进程间同步

关于信号量和共享内存的相关描述已经在前几篇提到过&#xff1b; 信号量&#xff1a;即内核维护的一个正整数&#xff0c;可以使用内核提供的p/v接口进行该正整数的/-操作&#xff0c;它主要用来表示系统中可用资源的个数&#xff0c;协调各个进程有序访问资源&#xff0c;防止…

mysql三次握手_一文彻底搞懂 TCP三次握手、四次挥手过程及原理

原创文章首发于公众号&#xff1a;「码农富哥」&#xff0c;欢迎收藏和关注&#xff0c;如转载请注明出处&#xff01;TCP 协议简述TCP 提供面向有连接的通信传输&#xff0c;面向有连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。无论哪一方向另…

【转】常见系统中文字体的英文名

http://www.aoao.org.cn/blog/2008/03/fonts-chinese/ http://www.yale.edu/chinesemac/pages/fonts.html Mac OS的一些&#xff1a; 华文细黑&#xff1a;STHeiti Light [STXihei]华文黑体&#xff1a;STHeiti华文楷体&#xff1a;STKaiti华文宋体&#xff1a;STSong华文仿宋&…

手动新增swap分区

1、建立1G的交换分区&#xff08;填充&#xff09; #dd if /dev/zore of /opt/swapfile bs1M count1024 2、设置交换分区文件 #mkswap /opt/swapfile 3、立即启用交换分区文件 #swapon /opt/swapfile 4、系统开机时自动挂载新分区 #vim /etc/fstab 末尾添加&#xff1a;/opt…

js捕获和冒泡

面向对象&#xff1a; 1.单例模式 2.工厂模式 3.构造函数 &#xff08;1&#xff0c;2&#xff0c;3的目的都是生成对象&#xff09; js天生自带的类 object&#xff08;基类&#xff09; 子类&#xff1a;function&#xff08;函数&#xff09; array&#xff08;数组&…

linux进程间通信:system V 信号量 生产者和消费者模型编程案例

生产者和消费者模型&#xff1a; 有若干个缓冲区&#xff0c;生产者不断向里填数据&#xff0c;消费者不断从中取数据两者不冲突的前提&#xff1a; 缓冲区有若干个&#xff0c;且是固定大小&#xff0c;生产者和消费者各有若干个生产者向缓冲区中填数据前需要判断缓冲区是否满…

mysql类exadata功能_几类关系型数据库的数据解决方案

今天聊下几类关系型数据库的数据解决方案,算是抛砖引玉&#xff0c;近期也要对技术方向上做一些扩展&#xff0c;也算是前期的小结吧。13Oracle目前市面上的主流版本应该还是11gR2&#xff0c;记得很多年前有个网站做过一次调查&#xff0c;10g&#xff0c;11g的版本比例差不多…

ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

两题水题&#xff1a; 1.如果一个数能被分解为两个素数的乘积&#xff0c;则称为Semi-Prime&#xff0c;给你一个数&#xff0c;让你判断是不是Semi-Prime数。 2.定义F(0) 7, F(1) 11, F(n) F(n-1) F(n-2) (n>2) 让你判断第n项是否能被3整除。 1.ZOJ 2723 Semi-Prime ht…

Lua中的基本函数库

基本函数库为Lua内置的函数库&#xff0c;不需要额外装载assert (v [, message])功能&#xff1a;相当于C的断言&#xff0c;参数&#xff1a;v&#xff1a;当表达式v为nil或false将触发错误,message&#xff1a;发生错误时返回的信息&#xff0c;默认为"assertion failed…

Oracle中的substr()函数 详解及应用

1&#xff09;substr函数格式 (俗称&#xff1a;字符截取函数) 格式1&#xff1a; substr(string string, int a, int b); 格式2&#xff1a;substr(string string, int a) ; 解释&#xff1a; 格式1&#xff1a; 1、string 需要截取的字符串 2、a 截取字符串…

linux进程间通信:POSIX 消息队列

文章目录基本介绍相关编程接口编程实例消息队列通信实例消息队列属性设置实例基本介绍 关于消息队列的基本介绍&#xff0c;前面在学习system V的消息队列时已经有过了解&#xff0c;linux进程间通信&#xff1a;system V消息队列 支持不同进程之间以消息&#xff08;message…

opencv 修改图像数值_opencv 修改图像数值_Python中使用OpenCV读取像素

如何在Python中遍历像素呢&#xff1f;请看代码&#xff1a;import numpy as npimport cv2import matplotlib.pyplot as pltsrc cv2.imread("src.png")gray cv2.cvtColor(src, cv2.COLOR_RGB2GRAY)rows, cols gray.shape[:2]row gray[200]plt.plot(row)# plt.sho…

SQL中返回一个字符串在另一个中存在的次数

ALTER FUNCTION [reg].[f_GetSameStringCntNoSort] ( str1 VARCHAR(100),--源字符串&#xff0c;取该串中的strLen长度的字符是否在目的字符串 str2 VARCHAR(100) --目的字符串 ) RETURNS INT AS BEGIN -- 返回的长度 DECLARE count INT DECLARE returnValue …

自由软件的自由

我相信我的订阅者中有很多是IT从业人员&#xff0c;我们在工作中会使用各种软件&#xff0c;除了微软、苹果等软件巨头的商业软件&#xff0c;还有更多的自由软件。我们使用这些软件构建自己的工作环境&#xff0c;为公司开发运营系统&#xff0c;为客户实现业务流程&#xff0…

c/c++ 拷贝控制 构造函数的问题

拷贝控制 构造函数的问题 问题1&#xff1a;下面①处的代码注释掉后&#xff0c;就编译不过&#xff0c;为什么&#xff1f;&#xff1f;&#xff1f; 问题2&#xff1a;但是把②处的也注释掉后&#xff0c;编译就过了&#xff0c;为什么&#xff1f;&#xff1f;&#xff1f; …

linux进程间通信:POSIX 消息队列 ----异步通信

在上一篇中linux进程间通信&#xff1a;POSIX 消息队列我们知道消息队列中在消息个数达到了队列所能承载的上限&#xff0c;就会发生消息的写阻塞。 阻塞式的通信影响系统效率&#xff0c;进程之间在通信收到阻塞时并不能去做其他事情&#xff0c;而是一直处于阻塞状态。 为了…

【转】Android设计中的.9.png

来源&#xff1a;http://isux.tencent.com/android-ui-9-png.html Android设计中的.9.png 注意&#xff1a;当使用9.png做TextView背景时&#xff0c;一定要设置内容区域&#xff08;底部和右侧&#xff09;&#xff0c;否则&#xff0c;文字显示不出来。 偶米伽 2013.08.20在A…

python创建scrapy_Python爬虫教程-31-创建 Scrapy 爬虫框架项目

首先说一下&#xff0c;本篇是在 Anaconda 环境下&#xff0c;所以如果没有安装 Anaconda 请先到官网下载安装Scrapy 爬虫框架项目的创建0.打开【cmd】1.进入你要使用的 Anaconda 环境1.环境名可以在【Pycharm】的【Settings】下【Project&#xff1a;】下找到2.使用命令&#…

KOAProgressBar

2019独角兽企业重金招聘Python工程师标准>>> KOAProgressBar 是 iOS 上的一个进度条控件&#xff0c;要求 iOS 5 支持 转载:http://www.adobex.com/ios/source/details/00000866.htm 转载于:https://my.oschina.net/u/868244/blog/106310