1 零碎环境需要
1.1 装置前的零碎环境筹备
- 查看Solaris服务器装置实现并打上最新的补丁集
- 网络环境连通并调试失常。
- 磁盘阵列装置实现并按ORACLE零碎进行磁盘划分。
1.2 硬件要求
- 内存:> 2G。
- SWAP区:2G。通常等于物理内存,最低不少于1G。
- 硬盘容量:数据库软件 > 4G。数据库 > 2G。
- /tmp:长期目录空间大于500M。
1.3 软件要求
- 操作系统及Patches:
Solaris 10补丁
SUNWarc SUNWbtool SUNWhea SUNWlibC SUNWlibm SUNWlibms SUNWmfrun SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs SUNWxwfnt SUNWcsl SUNWxcu4
2 筹备工作
2.1 查看操作系统运行环境
- 查看是否蕴含所需Patch。命令:
pkginfo -i SUNWarc SUNWbtool SUNWhea SUNWlibC SUNWlibm SUNWlibms SUNWmfrun SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs SUNWxwfnt SUNWcsl SUNWxcu4
- 查看操作系统的版本
# uname -r
- 查看理论可用内存,命令:
# /usr/sbin/prtconf | grep "Memory size"
- 查看替换区大小。命令:
# /usr/sbin/swap -s
- 查看文件系统可用空间和长期目录/tmp可用空间。命令:
# df -h /tmp# df -h
- 查看操作系统内核架构
# /bin/isainfo -kv
- 查看网络
# hostname# ifconfig –a# ping
服务器的hosts文件内容:
#public IP172.16.10.1 BXDB1172.16.10.2 BXDB2#private IP172.16.1.3 BXDB1-priv172.16.1.4 BXDB2-priv#VIP172.16.10.7 BXDB1-vip172.16.10.8 BXDB2-vip#SCAN172.16.10.9 BXDB-scan
- 查看节点工夫保障同步
# date
2.2 用户的筹备工作(BXDB1和BXDB2雷同)
- 批改UDP参数
$ vi /etc/rc2.d/S99ndd
增加
ndd -set /dev/udp udp_xmit_hiwat 65536ndd -set /dev/udp udp_recv_hiwat 65536
- 建设所需的组
/usr/sbin/groupadd -g 1000 oinstall/usr/sbin/groupadd -g 1100 asmadmin/usr/sbin/groupadd -g 1200 dba/usr/sbin/groupadd -g 1201 oper/usr/sbin/groupadd -g 1300 asmdba/usr/sbin/groupadd -g 1301 asmoper
- 建设所需的用户
# mkdir -p /export/home/grid# useradd -u 1100 -g oinstall -G dba,asmadmin,asmdba,asmoper -d /export/home/grid -s /usr/bin/bash grid# mkdir -p /export/home/oracle# useradd -u 1101 -g oinstall -G asmdba,dba,oper -d /export/home/oracle -s /usr/bin/bash oracle
批改新建用户的明码 明码1qaz.oracle
# passwd grid# passwd oracle
- 批改环境变量
Grid用户
# su – grid$ vi .profile
增加
\# ORACLE_SID (节点2上要写ORACLE_SID=+ASM2)
ORACLE_SID=+ASM1; export ORACLE_SIDORACLE_BASE=/oracle/app/grid; export ORACLE_BASEORACLE_HOME=/oracle/app/11.2.0/grid; export ORACLE_HOMEPATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/binPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/binexport PATHNLS_LANG=AMERICAN_AMERICA.UTF8;export NLS_LANGumask 022
oracle用户
# su – oracle$ vi .profile
增加
\# ORACLE_SID (节点2上要写ORACLE_SID=boss2)
ORACLE_SID=boss1; export ORACLE_SIDORACLE_BASE=/oracle/app/oracle; export ORACLE_BASEORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1; export ORACLE_HOMEPATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/binPATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/binexport PATHNLS_LANG=AMERICAN_AMERICA.UTF8;export NLS_LANGumask 022
- 批改零碎参数(root用户)
# vi /etc/system
增加
set noexec_user_stack=1set semsys:seminfo_semmni=100set semsys:seminfo_semmns=1024set semsys:seminfo_semmsl=256set semsys:seminfo_semvmx=23767set shmsys:shminfo_shmmax=107374182400set shmsys:shminfo_shmmin=1set shmsys:shminfo_shmmni=100set shmsys:shminfo_shmset=10
执行
# projmod -sK "project.max-shm-memory=(privileged,100G,deny)" default
重启服务器
- 配置等效性
以下是grid用户,oracle用户配置形式一样
$ chmod 755 /export/home (该目录权限必须是755)
◆以下两个RAC节点都执行
-bash-3.00$ mkdir -p ~/.ssh-bash-3.00$ chmod 700 ~/.ssh-bash-3.00$ /usr/bin/ssh-keygen -t rsa
提醒输出输出明码时,放弃为空回车即可,应用空明码操作简略一些。
◆以下只在RAC节点1执行
-bash-3.00$ touch ~/.ssh/authorized_keys-bash-3.00$ ssh BXDB1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys-bash-3.00$ ssh BXDB2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys-bash-3.00$ scp ~/.ssh/authorized_keys BXDB2:.ssh/authorized_keys
◆以下两个RAC节点都执行
-bash-3.00$ chmod 600 ~/.ssh/authorized_keys
测试等效性,不提醒输出明码即配置胜利(第一次要求输出明码是失常的)
ssh BXDB1 "date;hostname"ssh BXDB2 "date;hostname"
- 配置裸盘(root用户)
# formatAVAILABLE DISK SELECTIONS:0. c0t5000CCA03C70E8B4d0 <HITACHI-H106030SDSUN300G-A2B0 cyl 46873 alt 2 hd 20 sec 625> solarisscsi_vhci/disk@g5000cca03c70e8b41. c0t5000CCA03C709A38d0 <HITACHI-H106030SDSUN300G-A2B0 cyl 46873 alt 2 hd 20 sec 625> solarisscsi_vhci/disk@g5000cca03c709a382. c0t600000E00D11000000111430000D0000d0 <FUJITSU-ETERNUS_DXL-0000 cyl 254 alt 2 hd 64 sec 256>scsi_vhci/ssd@g600000e00d11000000111430000d00003. c0t600000E00D1100000011143000040000d0 <FUJITSU-ETERNUS_DXL-0000-409.00GB>scsi_vhci/ssd@g600000e00d11000000111430000400004. c0t600000E00D1100000011143000060000d0 <FUJITSU-ETERNUS_DXL-0000-409.00GB>scsi_vhci/ssd@g600000e00d11000000111430000600005. c0t600000E00D1100000011143000070000d0 <FUJITSU-ETERNUS_DXL-0000-409.00GB>scsi_vhci/ssd@g600000e00d11000000111430000700006. c0t600000E00D1100000011143000050000d0 <FUJITSU-ETERNUS_DXL-0000-409.00GB>scsi_vhci/ssd@g600000e00d11000000111430000500007. c0t600000E00D1100000011143000030000d0 <FUJITSU-ETERNUS_DXL-0000 cyl 58878 alt 2 hd 128 sec 256>scsi_vhci/ssd@g600000e00d11000000111430000300008. c0t600000E00D1100000011143000020000d0 <FUJITSU-ETERNUS_DXL-0000 cyl 58878 alt 2 hd 128 sec 256>scsi_vhci/ssd@g600000e00d11000000111430000200009. c0t600000E00D1100000011143000010000d0 <FUJITSU-ETERNUS_DXL-0000 cyl 58878 alt 2 hd 128 sec 256>scsi_vhci/ssd@g600000e00d110000001114300001000010. c0t600000E00D1100000011143000000000d0 <FUJITSU-ETERNUS_DXL-0000 cyl 58878 alt 2 hd 128 sec 256>scsi_vhci/ssd@g600000e00d1100000011143000000000Specify disk (enter its number)[7]: 2selecting c0t600000E00D11000000111430000D0000d0[disk formatted]format> pPARTITION MENU:0 - change `0' partition1 - change `1' partition2 - change `2' partition3 - change `3' partition4 - change `4' partition5 - change `5' partition6 - change `6' partition7 - change `7' partitionselect - select a predefined tablemodify - modify a predefined partition tablename - name the current tableprint - display the current tablelabel - write partition map and label to the disk!<cmd> - execute <cmd>, then returnquitpartition> 0Part Tag Flag Cylinders Size Blocks0 root wm 0 0 (0/0/0) 0Enter partition id tag[root]:Enter partition permission flags[wm]:Enter new starting cyl[0]:Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]:partition> pCurrent partition table (unnamed):Total disk cylinders available: 254 + 2 (reserved cylinders)Part Tag Flag Cylinders Size Blocks0 unassigned wm 0 0 (0/0/0) 01 swap wu 0 0 (0/0/0) 02 backup wu 0 - 253 1.98GB (254/0/0) 41615363 unassigned wm 0 0 (0/0/0) 04 unassigned wm 0 0 (0/0/0) 05 unassigned wm 0 0 (0/0/0) 06 usr wm 0 - 253 1.98GB (254/0/0) 41615367 unassigned wm 0 0 (0/0/0) 0partition> 6Part Tag Flag Cylinders Size Blocks6 usr wm 0 - 253 1.98GB (254/0/0) 4161536Enter partition id tag[usr]:Enter partition permission flags[wm]:Enter new starting cyl[0]: 3Enter partition size[4112384b, 251c, 253e, 2008.00mb, 1.96gb]:partition> labelReady to label disk, continue? ypartition> pCurrent partition table (unnamed):Total disk cylinders available: 254 + 2 (reserved cylinders)Part Tag Flag Cylinders Size Blocks0 unassigned wm 0 0 (0/0/0) 01 swap wu 0 0 (0/0/0) 02 backup wu 0 - 253 1.98GB (254/0/0) 41615363 unassigned wm 0 0 (0/0/0) 04 unassigned wm 0 0 (0/0/0) 05 unassigned wm 0 0 (0/0/0) 06 usr wm 3 - 253 1.96GB (251/0/0) 41123847 unassigned wm 0 0 (0/0/0) 0partition> quit
顺次将要应用的盘全副格式化分区结束
- 批改磁盘权限
在划分磁盘时若抉择了将空间调配给n号片,对应的盘片就是sn,例如磁盘是c0t600000E00D11000000111430000D0000d0,空间调配到了6号片,最终咱们应用的磁盘文件名就是c0t600000E00D11000000111430000D0000d0s6
chown grid:asmadmin /dev/rdsk/c0t600000E00D11000000111430000D0000d0s6chown grid:asmadmin /dev/rdsk/c0t600000E00D1100000011143000030000d0s6chown grid:asmadmin /dev/rdsk/c0t600000E00D1100000011143000020000d0s6chown grid:asmadmin /dev/rdsk/c0t600000E00D1100000011143000010000d0s6chown grid:asmadmin /dev/rdsk/c0t600000E00D1100000011143000000000d0s6chmod 660 /dev/rdsk/c0t600000E00D11000000111430000D0000d0s6chmod 660 /dev/rdsk/c0t600000E00D1100000011143000030000d0s6chmod 660 /dev/rdsk/c0t600000E00D1100000011143000020000d0s6chmod 660 /dev/rdsk/c0t600000E00D1100000011143000010000d0s6chmod 660 /dev/rdsk/c0t600000E00D1100000011143000000000d0s6
3 装置
3.1 装置crs软件(BXDB1上)
- 以 grid 用户运行安装程序
\# xhost +
\# 解压装置软件
\# su – grid
$ export DISPLAY=客户机ip:0.0
$ ./runInstaller
抉择第一项,next
抉择第二项高级装置,next
增加中文语言
填上SCAN信息,其中Cluster name自定义,SCAN name是hosts文件中配置
增加节点
点击ssh connectivity配置ssh等效性
依据hosts文件的配置抉择网卡用户
抉择将OCR文件放在ASM中
建设ASM磁盘组,增加之前为OCR筹备的裸盘文件,冗余形式抉择external
为ASM帐号设置明码1qaz.oracle,若提醒明码不够平安,点击yes即可
抉择用户组
抉择装置门路
抉择inventory目录,默认即可
开始查看零碎环境是否满足
提醒以下条件不满足,这两个谬误能够疏忽
确认无误开始装置
装置结束按提醒在两个节点别离以root用户执行脚本
装置结束后在测验cluster状态时报错,这是因为咱们没有配置DNS服务器来调配VIP和SCANip,而是通过手动调配,该谬误能够疏忽,至此cluster软件装置结束
3.2 装置database软件(BXDB1上)
- 以 grid 用户运行安装程序
\# xhost +
\# 解压装置软件
\# su – grid
$ export DISPLAY=客户机ip:0.0
$ ./runInstaller
不要抉择接管安全补丁信息,若呈现提醒选yes即可
跳过软件更新
抉择只装置数据库软件
抉择集群模式装置
点击ssh connectivity配置用户等效性
增加中文语言
抉择装置企业版
抉择装置目录,因为根目录属于grid用户,因而在两个节点都手动建好该目录,并将权限和属组赋给oracle用户
mkdir -p /oracle/app/oracle
chown oracle:oinstall /oracle/app/oracle
抉择装置软件组
查看零碎环境是否满足装置要求
以下谬误能够疏忽
查看无误开始装置
装置结束,按提醒以root用户在两个节点执行脚本即可
执行相应脚本实现装置
3.3 创立数据库
- 以 grid 用户建设ASM磁盘组
\# xhost +
\# su – grid
$ export DISPLAY=客户机ip:0.0
$ asmca
依照下图建设磁盘组,其中CRS是在装置CRS软件时曾经建设的
- 以 oracle 用户建设集群数据库
\# xhost +
\# su – oracle
$ export DISPLAY=客户机ip:0.0
$ dbca
抉择集群数据库
抉择建设数据库
抉择自定义数据库
依据理论状况输出数据库名,勾选所有节点
抉择配置EM
为用户配置明码,这里明码全副为1qaz.oracle,若提醒明码不够平安,点击yes即可
抉择数据文件存储形式,抉择ASM,并填入之前建好的磁盘组名,会要求输出ASMSNMP明码,输出1qaz.oracle即可
配置疾速复原区,抉择之前建好的ASM磁盘组,填入大小,这里是900g,勾选激活归档
去除不必要的组件
配置内存大小,勾选主动内存治理,该值能够在建完库后依据理论状况批改
配置块大小和连接数
配置字符集,抉择AL32UTF8
依照默认抉择专有模式即可
配置数据文件,每个节点调配4组,将redo大小改为512M
确认无误开始建库
开始建库
至此数据库装置结束
4 罕用保护命令
4.1 启动和敞开集群
(1) 启动集群件和集群数据库
集群零碎默认是主动启动的,手工启动集群件的命令是:
-bash-3.00# cd /u01/app/11.2.0/grid/bin (root用户)
-bash-3.00# ./crsctl start cluster
也能够以下命令(在11.2版本中不倡议应用),以grid用户执行
-bash-3.00# su - grid
-bash-3.00$ crs_start -all
启动集群数据库
-bash-3.00$ su - oracle
-bash-3.00$ srvctl start database -d racdb (启动全副实例节点)
-bash-3.00$ srvctl start instance -d racdb -n racdb1 (节点1上启动数据库实例)
-bash-3.00$ srvctl start instance -d racdb -n racdb2 (节点2上启动数据库实例)
(2) 敞开RAC集群数据库和集群件
先敞开集群数据库
-bash-3.00$ su - oracle
-bash-3.00$ srvctl stop database -d racdb
再敞开集群件(root用户)
-bash-3.00$ su -
-bash-3.00# cd /u01/app/11.2.0/grid/bin
-bash-3.00# ./crsctl stop cluster
4.2 RAC常用命令
集群零碎的保护次要应用srvctl命令就能够实现,咱们能够应用帮忙命令来查看其应用,在oracle用户下执行 srvctl -help 来查看帮忙信息
-bash-3.00# su - oracle
-bash-3.00$ srvctl -help
Usage: srvctl <command> <object> [<options>]
commands: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
objects: database|instance|service|nodeapps|vip|asm|diskgroup|listener|srvpool|server|scan|scan_listener|oc4j|home|filesystem|gns
For detailed help on each command and object and its options use:
srvctl <command> -h or
srvctl <command> <object> -h
该命令的格局和用法都列出来了,持续查看具体用法就在命令和对象的前面加 -h 参数,这样一层一层的查看帮忙就能够失去全副的应用办法而不必查看其它的材料。
-bash-3.00$ srvctl add -h (给集群增加对象,比拟重要的如:service, srvpool等等)
-bash-3.00$ srvctl remove -h (删除集群的对象)
-bash-3.00$ srvctl modify -h (批改集群的对象)
-bash-3.00$ srvctl config -h (查看集群内对象的配置信息)
-bash-3.00$ srvctl status -h (查看集群内对象的状态信息)
-bash-3.00$ srvctl relocate -h (把集群的对象重定位到其它实例节点,如oc4j, gns只在一个实例节点上无效,应用该命令能够把对象转移到其它实例节点)
-bash-3.00$ srvctl enable -h (把集群内曾经存在的对象置于可用状态)
-bash-3.00$ srvctl disable -h (把集群内曾经存在的对象置于不可用状态)
-bash-3.00$ srvctl start -h (启动集群内曾经存在的对象)
-bash-3.00$ srvctl stop -h (进行集群内曾经存在的对象)
罕用的比方:
◆查看全副装置集群数据库名称
-bash-3.00$ srvctl config database
racdb
◆查看指定的集群数据库的配置信息
-bash-3.00$ srvctl config database -d racdb
Database unique name: racdb
Database name: racdb
Oracle home: /u01/app/oracle/product/11.2.0/dbhome_1
Oracle user: oracle
Spfile: +RACDB_DATA/racdb/spfileracdb.ora
Domain: racnode.com
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: racdb
Database instances: racdb1,racdb2
Disk Groups: RACDB_DATA,FRA
Services: MYRAC
Database is administrator managed
◆显示节点应用程序的配置
-bash-3.00$ srvctl config nodeapps -a -g -s -e
VIP exists.:racnode1
VIP exists.: /192.168.1.201/192.168.1.201/255.255.255.0/e1000g0
VIP exists.:racnode2
VIP exists.: /192.168.1.205/192.168.1.205/255.255.255.0/e1000g0
GSD exists.
ONS daemon exists. Local port 6100, remote port 6200
eONS daemon exists. Multicast port 16717, multicast IP address 234.92.69.133, listening port 2016
◆列出集群中所有运行的实例
-bash-3.00$ sqlplus / as sysdba
SQL> col host format a10
SQL> col db_status format a8
SQL> col inst_name format a8
SQL> SELECT inst_id, instance_number inst_no, instance_name inst_name,
2 parallel, status, database_status db_status, active_state state,
3 host_name host
4 FROM gv$instance
5 Order By inst_id;
INST_ID INST_NO INST_NAM PAR STATUS DB_STATU STATE HOST
1 1 racdb1 YES OPEN ACTIVE NORMAL racnode1
2 2 racdb2 YES OPEN ACTIVE NORMAL racnode2
◆列出所有数据文件、长期数据文件、日志文件、管制文件
SQL> set pagesize 100; (设置sqlplus的显示行数,能够一次显示100行记录)
SQL> set linesize 100; (设置sqlplus的显示总宽度, 默认80,设置成100或者更宽都能够)
SQL> col file_size format a9;
SQL> col file# format 99999; (格式化数值类型的字段)
SQL>
SQL> SELECT 'data_file' as file_type, file#, creation_time, status, name, to_char(bytes/(1024*1024) || 'M') as file_size FROM v$datafile
2 union
3 SELECT 'temp_file' as file_type, file#, creation_time, status, name, to_char(bytes/(1024*1024) || 'M') as file_size FROM v$tempfile
4 union
5 SELECT 'log_file' as file_type, group#, null as creation_time, type, member, null as file_size FROM v$logfile
6 union
7 SELECT 'control_file' as file_type, null as file#, null as creation_time, status, name, null as file_size FROM v$controlfile;
FILE_TYPE FILE# CREATION_ STATUS NAME FILE_SIZE
control_file +FRA/racdb/controlfile/current.256.711918025
control_file +RACDB_DATA/racdb/controlfile/current.260.711918019
data_file 1 20-NOV-09 SYSTEM +RACDB_DATA/racdb/datafile/system.256.711917577 690M
data_file 2 20-NOV-09 ONLINE +RACDB_DATA/racdb/datafile/sysaux.257.711917583 610M
data_file 3 20-NOV-09 ONLINE +RACDB_DATA/racdb/datafile/undotbs1.258.711917585 90M
data_file 4 20-NOV-09 ONLINE +RACDB_DATA/racdb/datafile/users.259.711917585 5M
data_file 5 25-FEB-10 ONLINE +RACDB_DATA/racdb/datafile/example.264.711918155 100M
data_file 6 25-FEB-10 ONLINE +RACDB_DATA/racdb/datafile/undotbs2.265.711919153 50M
data_file 7 04-MAR-10 ONLINE +RACDB_DATA/racdb/datafile/ts_front.269.712715421 300M
log_file 1 ONLINE +FRA/racdb/onlinelog/group_1.257.711918047
log_file 1 ONLINE +RACDB_DATA/racdb/onlinelog/group_1.261.711918033
log_file 2 ONLINE +FRA/racdb/onlinelog/group_2.258.711918069
log_file 2 ONLINE +RACDB_DATA/racdb/onlinelog/group_2.262.711918057
log_file 3 ONLINE +FRA/racdb/onlinelog/group_3.259.711919447
log_file 3 ONLINE +RACDB_DATA/racdb/onlinelog/group_3.266.711919433
log_file 4 ONLINE +FRA/racdb/onlinelog/group_4.260.711919483
log_file 4 ONLINE +RACDB_DATA/racdb/onlinelog/group_4.267.711919461
temp_file 1 25-FEB-10 ONLINE +RACDB_DATA/racdb/tempfile/temp.263.711918123 35M
18 rows selected.
◆查看asm磁盘(v$asm_disk)和asm磁盘组(v$asm_diskgroup)的状况
SQL> SELECT group_number group#, disk_number disk#, state, redundancy, name, failgroup, path, failgroup_type FROM v$asm_disk;
GROUP# DISK# STATE REDUNDA NAME FAILGROUP PATH FAILGRO
1 0 NORMAL UNKNOWN CRS_0000 CRS_0000 /ShareDisk/crs1 REGULAR
3 2 NORMAL UNKNOWN RACDB_DATA_0002 FG1 /ShareDisk/asm1 REGULAR
3 3 NORMAL UNKNOWN RACDB_DATA_0003 FG1 /ShareDisk/asm2 REGULAR
3 0 NORMAL UNKNOWN RACDB_DATA_0000 FG2 /ShareDisk/asm3 REGULAR
3 1 NORMAL UNKNOWN RACDB_DATA_0001 FG2 /ShareDisk/asm4 REGULAR
2 0 NORMAL UNKNOWN FRA_0000 FRA_0000 /ShareDisk/fra1 REGULAR
2 1 NORMAL UNKNOWN FRA_0001 FRA_0001 /ShareDisk/fra2 REGULAR
0 8 NORMAL UNKNOWN /ShareDisk/spfile REGULAR
0 1 NORMAL UNKNOWN /ShareDisk/crs2 REGULAR
SQL> SELECT group_number, name, state, type, total_mb, free_mb FROM v$asm_diskgroup;
GROUP_NUMBER NAME STATE TYPE TOTAL_MB FREE_MB
2 FRA CONNECTED NORMAL 184322 182400
1 CRS MOUNTED EXTERN 2048 1652
3 RACDB_DATA CONNECTED NORMAL 778240 773770
查看试图构造的办法
SQL> desc v$asm_disk;
SQL> desc v$asm_diskgroup;
通过两个试图的联立,能够查问更多的信息。
欢送关注我的微信公众号【超哥的IT私房菜】获取更多技术干货!
有什么吐槽或反馈意见,间接通知我!
我会解决您说的问题,进一步更好的服务您哦!
舒适提醒:如呈现二维码生效也可间接增加微信号:ysc13803862469!