1. 首页 > Oracle教程 > 正文

Oracle教程FG011-Oracle进程管理

本文档风哥主要介绍Oracle数据库进程管理,包括进程类型、后台进程、用户进程、进程管理、进程监控等。由风哥教程参考Oracle官方文档Administration内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 Oracle数据库进程类型

Oracle数据库进程主要分为后台进程、用户进程和服务器进程三大类。后台进程负责数据库的日常维护工作,用户进程是应用程序的连接,服务器进程处理用户请求。更多视频教程www.fgedu.net.cn

Oracle数据库进程类型:后台进程(Background Processes)、用户进程(User Processes)、服务器进程(Server Processes)。

1.2 Oracle数据库后台进程

Oracle数据库主要后台进程:

  • PMON(Process Monitor):进程监控器,清理异常终止的进程,释放资源
  • SMON(System Monitor):系统监控器,负责实例恢复、临时段清理等
  • DBWn(Database Writer):数据库写入进程,将脏缓冲区写入数据文件
  • LGWR(Log Writer):日志写入进程,将重做日志缓冲区写入重做日志文件
  • CKPT(Checkpoint):检查点进程,更新控制文件和数据文件头部
  • ARCH(Archiver):归档进程,将已满的重做日志文件复制到归档位置
  • RECO(Recoverer):恢复进程,处理分布式事务
  • MMON(Manageability Monitor):可管理性监控进程,收集统计信息
  • MMNL(Manageability Monitor Light):轻量级可管理性监控进程
  • LMON(Lock Monitor):锁监控进程(RAC环境)

1.3 Oracle数据库用户进程

用户进程是连接到Oracle数据库的应用程序进程,服务器进程是Oracle为用户请求服务的进程。

  • 专用服务器模式(Dedicated Server):每个用户进程对应一个服务器进程
  • 共享服务器模式(Shared Server):多个用户进程共享一个服务器进程
风哥提示:了解Oracle进程架构是进行进程管理的基础,不同的后台进程承担着不同的职责,共同维护数据库的正常运行。

Part02-生产环境规划与建议

2.1 Oracle数据库进程规划

Oracle数据库进程规划要点:

# PROCESSES参数规划
– 小型系统:100-300个进程
– 中型系统:300-1000个进程
– 大型系统:1000-5000个进程

# SESSIONS参数规划
– 通常是PROCESSES的1.1倍+5
– 例如:PROCESSES=300,SESSIONS=335

# 专用服务器 vs 共享服务器
– OLTP系统:建议使用专用服务器模式
– 大量短连接系统:可以考虑共享服务器模式
– 大型系统:专用服务器模式更稳定

# 后台进程数量
– DBWn:根据系统负载配置1-10个
– ARCH:根据归档速度配置1-10个
– 其他后台进程:通常由Oracle自动管理

2.2 Oracle数据库进程监控规划

Oracle数据库进程监控规划建议:

# 监控指标
– 总进程数:不超过PROCESSES参数的90%
– 后台进程状态:确保关键后台进程正常运行
– 阻塞进程:及时发现和处理阻塞
– 死锁:监控和分析死锁情况
– 长时间运行的进程:监控执行时间过长的进程

# 监控频率
– 关键后台进程:每5分钟检查一次
– 总进程数:每15分钟检查一次
– 阻塞和死锁:每5分钟检查一次
– 详细分析:每天一次

# 告警阈值
– 总进程数超过PROCESSES的80%:警告
– 总进程数超过PROCESSES的90%:严重
– 发现阻塞:警告
– 发现死锁:严重
– 关键后台进程异常:严重

2.3 Oracle数据库进程优化建议

Oracle数据库进程优化建议:

  • 合理配置PROCESSES:根据实际需要配置,不要设置过大
  • 使用连接池:应用层使用连接池,减少进程创建开销
  • 及时释放连接:应用程序及时关闭不需要的连接
  • 定期清理:定期清理僵尸进程和空闲连接
  • 监控告警:配置进程监控和告警,及时发现问题
  • 分析优化:定期分析进程使用情况,优化配置
生产环境建议:进程配置要合理,既不能太小导致连接不够用,也不能太大浪费系统资源。建议先根据业务量估算,再根据实际使用情况调整。

Part03-生产环境项目实施方案

3.1 Oracle数据库进程查看方法

3.1.1 Oracle数据库查看后台进程

# 查看后台进程信息
SQL> select paddr, pid, spid, username, program
from v$bgprocess
order by pid;PADDR PID SPID USERNAME PROGRAM
——– ——- —– ———- ——————–
00 0 PMON
00 1 PSP0
00 2 VKTM
00 3 GEN0
00 4 MMAN
00 5 DIAG
00 6 DBRM
00 7 PMAN
00 8 DBW0
00 9 LGWR
00 10 CKPT
00 11 SMON
00 12 RECO
00 13 MMON
00 14 MMNL

# 查看运行中的后台进程
SQL> select name, description from v$bgprocess where paddr <> ’00’ order by name;NAME DESCRIPTION
—– —————————————————————-
CKPT checkpoint
DBW0 db writer process 0
DIAG diagnosibility process
GEN0 generic0
LGWR Redo etc.
MMAN Memory Manager
MMNL Manageability Monitor Process 2
MMON Manageability Monitor Process
PMAN process manager
PMON process cleanup
PSP0 process spawner 0
RECO distributed recovery
SMON System Monitor Process
VKTM Virtual Keeper of TiMe process

# 使用OS命令查看后台进程
$ ps -ef | grep ora_ | grep -v grep

oracle 12345 1 0 23:00 ? 00:00:00 ora_pmon_fgedudb
oracle 12346 1 0 23:00 ? 00:00:00 ora_psp0_fgedudb
oracle 12347 1 0 23:00 ? 00:00:00 ora_vktm_fgedudb
oracle 12348 1 0 23:00 ? 00:00:00 ora_gen0_fgedudb
oracle 12349 1 0 23:00 ? 00:00:00 ora_mman_fgedudb
oracle 12350 1 0 23:00 ? 00:00:00 ora_diag_fgedudb
oracle 12351 1 0 23:00 ? 00:00:00 ora_dbrm_fgedudb
oracle 12352 1 0 23:00 ? 00:00:00 ora_pman_fgedudb
oracle 12353 1 0 23:00 ? 00:00:00 ora_dbw0_fgedudb
oracle 12354 1 0 23:00 ? 00:00:00 ora_lgwr_fgedudb
oracle 12355 1 0 23:00 ? 00:00:00 ora_ckpt_fgedudb
oracle 12356 1 0 23:00 ? 00:00:00 ora_smon_fgedudb
oracle 12357 1 0 23:00 ? 00:00:00 ora_reco_fgedudb
oracle 12358 1 0 23:00 ? 00:00:00 ora_mmon_fgedudb
oracle 12359 1 0 23:00 ? 00:00:00 ora_mmnl_fgedudb

3.1.2 Oracle数据库查看用户进程

# 查看当前会话信息
SQL> select sid, serial#, username, status, program, machine, osuser
from v$session
where type = ‘USER’
order by sid;SID SERIAL# USERNAME STATUS PROGRAM MACHINE OSUSER
———- ———- ———- ——– —————– ————- ——–
123 45678 FGAPP_USER ACTIVE app.exe server1 appuser
124 45679 FGAPP_USER INACTIVE app.exe server1 appuser
125 45680 SYS ACTIVE sqlplus.exe server2 oracle

# 查看会话对应的服务器进程
SQL> select s.sid, s.serial#, s.username, p.spid, p.program
from v$session s, v$process p
where s.paddr = p.addr
and s.type = ‘USER’
order by s.sid;SID SERIAL# USERNAME SPID PROGRAM
———- ———- ———- —– ——————–
123 45678 FGAPP_USER 23456 oracle@server1 (TNS V1-V3)
124 45679 FGAPP_USER 23457 oracle@server1 (TNS V1-V3)
125 45680 SYS 23458 oracle@server1 (TNS V1-V3)

# 查看进程总数
SQL> select count(*) from v$session;COUNT(*)
———-
200

SQL> select count(*) from v$process;COUNT(*)
———-
210

# 查看进程使用情况
SQL> select
(select count(*) from v$session) as sessions,
(select value from v$parameter where name = ‘sessions’) as max_sessions,
(select count(*) from v$process) as processes,
(select value from v$parameter where name = ‘processes’) as max_processes
from dual;SESSIONS MAX_SESSIONS PROCESSES MAX_PROCESSES
———- ———— ———- ————-
200 472 210 300

3.2 Oracle数据库进程管理操作

3.2.1 Oracle数据库查看阻塞会话

# 查看阻塞会话
SQL> select
blocking_session,
sid,
serial#,
wait_class,
seconds_in_wait
from v$session
where blocking_session is not null;BLOCKING_SESSION SID SERIAL# WAIT_CLASS SECONDS_IN_WAIT
—————- ———- ———- ————— —————
123 124 45679 Application 120

# 查看阻塞树
SQL> select
lpad(‘ ‘, 2*level) || s.sid || ‘,’ || s.serial# as blocking_tree,
s.username,
s.status,
s.sql_id
from v$session s
start with s.blocking_session is null
connect by prior s.sid = s.blocking_session;BLOCKING_TREE USERNAME STATUS SQL_ID
——————— ———- ——– ————-
123,45678 FGAPP_USER ACTIVE abc123def456
124,45679 FGAPP_USER INACTIVE def456abc123
125,45680 FGAPP_USER INACTIVE ghi789jkl012

# 查看锁等待详情
SQL> select
s.sid,
s.serial#,
s.username,
s.osuser,
s.machine,
s.program,
l.type,
l.lmode,
l.request,
l.ctime
from v$session s, v$lock l
where s.sid = l.sid
and l.request > 0
order by l.ctime desc;SID SERIAL# USERNAME OSUSER MACHINE PROGRAM TY LMODE REQUEST CTIME
———- ———- ———- ——— ———- ———— — ———- ———- ———-
124 45679 FGAPP_USER appuser server1 app.exe TM 0 3 120

3.3 Oracle数据库进程终止方法

3.3.1 Oracle数据库终止会话

# 终止指定会话
SQL> alter system kill session ‘124,45679’;System altered.

# 立即终止会话(不等待回滚)
SQL> alter system kill session ‘124,45679’ immediate;System altered.

# 查看会话状态
SQL> select sid, serial#, username, status
from v$session
where sid = 124;SID SERIAL# USERNAME STATUS
———- ———- ———- ——–
124 45679 FGAPP_USER KILLED

# 如果会话状态是KILLED但进程还在,可以使用OS命令终止
$ ps -ef | grep 23457

oracle 23457 1 0 23:00 ? 00:00:05 oraclefgedudb (LOCAL=NO)

$ kill -9 23457

# 验证进程已终止
$ ps -ef | grep 23457 | grep -v grep

3.3.2 Oracle数据库进程监控脚本

#!/bin/bash
# oracle_process_monitor.sh – Oracle进程监控脚本
# from:www.itpux.com.qq113257174.wx:itpux-com
# web `http://www.fgedu.net.cn`

ORACLE_HOME=/oracle/app/oracle/product/19c/db_1
ORACLE_SID=fgedudb
LOG_FILE=/tmp/oracle_process_monitor.log
ALERT_EMAIL=dba@fgedu.net.cn

echo “========================================” > $LOG_FILE
echo “Oracle Process Monitor” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “Database: $ORACLE_SID” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
echo “” >> $LOG_FILE

# 1. 检查关键后台进程
echo “1. Checking critical background processes” >> $LOG_FILE
echo “—————————————-” >> $LOG_FILE

CRITICAL_PROCESSES=”pmon smon lgwr dbw0 ckpt”
for proc in $CRITICAL_PROCESSES; do
if ps -ef | grep -v grep | grep “ora_${proc}_${ORACLE_SID}” > /dev/null; then
echo “OK: ${proc} process is running” >> $LOG_FILE
else
echo “ERROR: ${proc} process is NOT running!” >> $LOG_FILE
echo “Sending alert email…” >> $LOG_FILE
echo “CRITICAL: ${proc} process on ${ORACLE_SID} is not running!” | mail -s “CRITICAL: Oracle process
${proc} down” $ALERT_EMAIL
fi
done
echo “” >> $LOG_FILE

# 2. 检查进程数
echo “2. Checking process count” >> $LOG_FILE
echo “————————–” >> $LOG_FILE

$ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF>> $LOG_FILE
set pagesize 0
set linesize 200
set heading off
set feedback off
select ‘Current sessions: ‘ || count(*) from v\\$session;select ‘Max sessions: ‘ || value from v\\$parameter where name=’sessions’;select ‘Current processes: ‘ || count(*) from v\\$process;select ‘Max processes: ‘ || value from v\\$parameter where name=’processes’;exit;EOF

# 检查进程使用率
PROCESS_USAGE=$($ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF set pagesize 0 set feedback off select round((select count(*) from v\\$process) / (select value from v\\$parameter where name='processes' ) * 100) from dual; exit; EOF ) echo "Process usage: ${PROCESS_USAGE}%">> $LOG_FILE

if [ $PROCESS_USAGE -gt 90 ]; then
echo “WARNING: Process usage is very high (${PROCESS_USAGE}%)!” >> $LOG_FILE
echo “Sending alert email…” >> $LOG_FILE
echo “WARNING: Process usage on ${ORACLE_SID} is ${PROCESS_USAGE}%!” | mail -s “WARNING: High Oracle
process usage” $ALERT_EMAIL
elif [ $PROCESS_USAGE -gt 80 ]; then
echo “NOTICE: Process usage is high (${PROCESS_USAGE}%)” >> $LOG_FILE
fi
echo “” >> $LOG_FILE

# 3. 检查阻塞会话
echo “3. Checking blocking sessions” >> $LOG_FILE
echo “——————————–” >> $LOG_FILE

BLOCKING_COUNT=$($ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF set pagesize 0 set feedback off select count(*) from v\\$session where blocking_session is not null; exit; EOF ) if [ $BLOCKING_COUNT -gt 0 ]; then echo "WARNING: Found ${BLOCKING_COUNT} blocking session(s)!">>
$LOG_FILE
$ORACLE_HOME/bin/sqlplus -s / as sysdba << EOF>> $LOG_FILE
set linesize 200
set pagesize 50
column username format a15
column program format a30
column machine format a20
select sid, serial#, username, program, machine, wait_class, seconds_in_wait
from v\\$session
where blocking_session is not null
order by seconds_in_wait desc;exit;EOF
echo “Sending alert email…” >> $LOG_FILE
else
echo “OK: No blocking sessions found” >> $LOG_FILE
fi
echo “” >> $LOG_FILE

echo “========================================” >> $LOG_FILE
echo “Monitor Completed” >> $LOG_FILE
echo “========================================” >> $LOG_FILE

echo “Process monitor completed”
cat $LOG_FILE

Part04-生产案例与实战讲解

4.1 Oracle数据库进程异常处理

4.1.1 Oracle数据库后台进程异常处理

# 场景:LGWR进程异常终止

# 1. 检查告警日志
$ tail -100 /oracle/app/oracle/diag/rdbms/fgedudb/fgedudb/trace/alert_fgedudb.log

Wed Mar 31 23:00:00 2026
Errors in file /oracle/app/oracle/diag/rdbms/fgedudb/fgedudb/trace/fgedudb_lgwr_12354.trc:
ORA-00471: LGWR process terminated with error
Wed Mar 31 23:00:00 2026
PMON (ospid: 12345): terminating the instance due to error 471
Instance terminated by PMON, pid = 12345

# 2. 检查LGWR跟踪文件
$ cat /oracle/app/oracle/diag/rdbms/fgedudb/fgedudb/trace/fgedudb_lgwr_12354.trc

*** 2026-03-31 23:00:00.000
*** SESSION ID:(10.1) 2026-03-31 23:00:00.000
*** CLIENT ID:() 2026-03-31 23:00:00.000
*** SERVICE NAME:(SYS$BACKGROUND) 2026-03-31 23:00:00.000
*** MODULE NAME:() 2026-03-31 23:00:00.000
*** ACTION NAME:() 2026-03-31 23:00:00.000

ORA-00345: redo log write error block 1234 count 8
ORA-27072: File I/O error
Linux-x86_64 Error: 28: No space left on device
Additional information: 4
Additional information: 1234

# 3. 分析原因:磁盘空间不足
$ df -h /oracle/app/oracle/oradata/fgedudb/Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 100G 0 100% /oracle

# 4. 解决方案:清理磁盘空间
$ cd /oracle/app/oracle/fast_recovery_area/fgedudb/$ find . -name “*.arc” -mtime +7 -delete

$ df -h /oracle/app/oracle/oradata/fgedudb/Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 85G 15G 85% /oracle

# 5. 重启数据库
$ sqlplus / as sysdba

SQL> startup;ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size 8797296 bytes
Variable Size 2516584432 bytes
Database Buffers 1761607680 bytes
Redo Buffers 7977984 bytes
Database mounted.
Database opened.

# 6. 验证后台进程正常运行
$ ps -ef | grep ora_ | grep -v grep

oracle 23456 1 0 23:05 ? 00:00:00 ora_pmon_fgedudb
oracle 23457 1 0 23:05 ? 00:00:00 ora_lgwr_fgedudb

4.2 Oracle数据库进程性能调优

4.2.1 Oracle数据库进程数不足处理

# 场景:应用无法连接数据库,报错ORA-00020

# 1. 查看错误信息
ORA-00020: maximum number of processes (300) exceeded

# 2. 检查当前进程数
SQL> select count(*) from v$process;COUNT(*)
———-
300

# 3. 查看参数设置
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 300

# 4. 查看哪些进程占用了连接
SQL> select username, program, machine, count(*)
from v$session
group by username, program, machine
order by count(*) desc;USERNAME PROGRAM MACHINE COUNT(*)
———- —————– ————- ———-
FGAPP_USER app.exe server1 200
FGAPP_USER app.exe server2 80
SYS sqlplus.exe server3 5

# 5. 分析原因:应用连接没有及时释放
# 检查应用程序的连接池配置

# 6. 临时解决方案:终止一些空闲会话
SQL> select sid, serial#, username, status, last_call_et
from v$session
where status = ‘INACTIVE’
and last_call_et > 3600
order by last_call_et desc;SID SERIAL# USERNAME STATUS LAST_CALL_ET
———- ———- ———- ——– ————-
126 45681 FGAPP_USER INACTIVE 7200
127 45682 FGAPP_USER INACTIVE 6500

SQL> alter system kill session ‘126,45681’;System altered.

SQL> alter system kill session ‘127,45682’;System altered.

# 7. 永久解决方案:增加PROCESSES参数
SQL> alter system set processes = 500 scope=spfile;System altered.

# SESSIONS会自动计算,也可以手动设置
SQL> alter system set sessions = 772 scope=spfile;System altered.

# 8. 重启数据库使参数生效
SQL> shutdown immediate;SQL> startup;# 9. 验证新参数
SQL> show parameter processes;NAME TYPE VALUE
———————————— ———– ——————————
processes integer 500

SQL> show parameter sessions;NAME TYPE VALUE
———————————— ———– ——————————
sessions integer 772

4.3 Oracle数据库进程问题解决方案

4.3.1 Oracle数据库僵尸进程处理

# 场景:数据库中有很多KILLED状态的会话,对应的OS进程还在

# 1. 查看KILLED状态的会话
SQL> select sid, serial#, username, status, paddr
from v$session
where status = ‘KILLED’;SID SERIAL# USERNAME STATUS PADDR
———- ———- ———- ——– ——–
128 45683 FGAPP_USER KILLED 00
129 45684 FGAPP_USER KILLED 00
130 45685 FGAPP_USER KILLED 00

# 2. 查找对应的OS进程
$ ps -ef | grep oraclefgedudb | grep -v grep

oracle 23460 1 0 22:00 ? 00:00:00 oraclefgedudb (LOCAL=NO)
oracle 23461 1 0 22:05 ? 00:00:00 oraclefgedudb (LOCAL=NO)
oracle 23462 1 0 22:10 ? 00:00:00 oraclefgedudb (LOCAL=NO)

# 3. 使用PMON清理(需要等待一段时间)
SQL> exec dbms_system.distrib_debug(‘PMON’, ‘cleanup’);PL/SQL procedure successfully completed.

# 4. 或者手动终止这些进程
$ kill -9 23460 23461 23462

# 5. 验证进程已终止
$ ps -ef | grep 23460 | grep -v grep

# 6. 验证会话已清理
SQL> select sid, serial#, username, status
from v$session
where status = ‘KILLED’;no rows selected

# 7. 配置PMON自动清理(设置更大的清理频率)
SQL> alter system set “_wait_for_sync” = false scope=spfile;System altered.

# 注意:隐藏参数修改需要谨慎,建议先在测试环境验证

Part05-风哥经验总结与分享

5.1 Oracle数据库进程管理最佳实践

  • 合理配置参数:根据实际业务需求配置PROCESSES和SESSIONS参数
  • 使用连接池:应用层使用连接池,减少进程创建开销
  • 监控进程状态:定期监控后台进程和用户进程状态
  • 及时释放连接:应用程序及时关闭不需要的数据库连接
  • 定期清理:定期清理KILLED状态的会话和僵尸进程
  • 配置告警:配置进程监控告警,及时发现异常
  • 分析优化:定期分析进程使用情况,优化配置
  • 备份恢复:确保有完整的备份和恢复策略

5.2 Oracle数据库进程检查清单

检查项
频率
说明

检查关键后台进程
每5分钟
确保PMON、SMON、LGWR、DBW0等正常运行

检查进程总数
每15分钟
不超过PROCESSES的80%

检查阻塞会话
每5分钟
及时发现和处理阻塞

检查死锁
每5分钟
监控和分析死锁情况

检查长时间运行的进程
每小时
监控执行时间过长的进程

检查KILLED状态的会话
每小时
及时清理僵尸会话

检查进程告警
每天
查看告警日志中的进程相关错误

5.3 Oracle数据库进程管理工具推荐

# Oracle自带工具
1. V$视图
– 功能:查看进程和会话信息
– 优点:实时、详细
– 适用:日常监控

2. OS命令
– 功能:ps、top、kill等
– 优点:简单、直接
– 适用:OS级进程管理

3. Enterprise Manager
– 功能:图形化进程管理
– 优点:界面友好、功能强大
– 适用:生产环境管理

4. AWR报告
– 功能:进程使用历史分析
– 优点:全面、历史数据
– 适用:性能分析

# 第三方工具
1. TOAD
– 功能:进程和会话管理
– 优点:功能丰富
– 适用:开发和DBA使用

2. PL/SQL Developer
– 功能:会话管理
– 优点:与开发环境集成
– 适用:开发人员使用

3. OS Watcher
– 功能:系统和进程监控
– 优点:Oracle提供的免费工具
– 适用:性能分析

# 自定义工具
1. Shell/Python脚本
– 功能:自动监控和管理
– 优点:灵活、可定制
– 适用:自动化管理

2. cron/scheduled tasks
– 功能:定期执行监控
– 优点:系统自带、配置简单
– 适用:定期任务

风哥提示:进程管理是Oracle数据库管理的重要组成部分,确保关键后台进程正常运行,合理配置和管理用户进程,对数据库的稳定运行至关重要。学习交流加群风哥微信: itpux-com

生产环境建议:进程配置要留有余量,但不要设置过大。建议先根据业务量估算,然后在实际运行中观察调整,找到最佳配置。

风哥提示:关键后台进程异常通常会导致数据库实例崩溃,要重点监控PMON、SMON、LGWR、DBWn等关键后台进程的状态。更多学习教程公众号风哥教程itpux_com

注意事项:终止进程时要谨慎,先确认是不需要的进程再终止。对于KILLED状态的会话,可以等待PMON自动清理,也可以手动清理。

风哥提示:应用层使用连接池是减少数据库进程压力的有效方法,同时也要确保应用程序及时释放不需要的连接。学习交流加群风哥QQ113257174

持续改进:定期review进程使用情况,根据业务增长调整进程配置,同时也要关注应用程序的连接管理,从源头解决问题。

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息