热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

升级可能导致数据库不可用[待看]

升级可能导致数据库不可用(一)2010-08-1923:55:00分类:Linux升级过程也是一个危险的过程,操作不当可能造成数据库无法打开,因此在升级之前应该做好备份。描述问题产生的原因。尝试将一个9.2.0.4的数据库手工升级为11.2.0.1。但是升级过程中犯了一

升级可能导致数据库不可用(一) 2010-08-19 23:55:00 分类: Linux 升级过程也是一个危险的过程,操作不当可能造成数据库无法打开,因此在升级之前应该做好备份。 描述问题产生的原因。 尝试将一个9.2.0.4的数据库手工升级为11.2.0.1。但是升级过程中犯了一

升级可能导致数据库不可用(一)2010-08-19 23:55:00

分类: Linux

升级过程也是一个危险的过程,操作不当可能造成数据库无法打开,因此在升级之前应该做好备份。

描述问题产生的原因。

尝试将一个9.2.0.4的数据库手工升级为11.2.0.1。但是升级过程中犯了一个小错误,在升级之前没有执行11.2的ORACLE_HOME/rdbms/admin/utlu112i.sql。

就是这个小错误,导致数据库升级失败。

在执行catupgrd.sql脚本时,出现了ORA-00942: table or view does not exist错误:

SQL> spo upgrade.sql
SQL> @?/rdbms/admin/catupgrd
DOC>#######################################################################
DOC>#######################################################################
DOC>
DOC> The first time this script. is run, there should be no error messages
DOC> generated; all normal upgrade error messages are suppressed.
DOC>
DOC> If this script. is being re-run after correcting some problem, then
DOC> expect the following error which is not automatically suppressed:
DOC>
DOC> ORA-00001: unique constraint () violated
DOC> possibly in conjunction with
DOC> ORA-06512: at "", line NN
DOC>
DOC> These errors will automatically be suppressed by the Database Upgrade
DOC> Assistant (DBUA) when it re-runs an upgrade.
DOC>
DOC>#######################################################################
DOC>#######################################################################
DOC>#
.
.
.

DOC>#######################################################################
DOC>#######################################################################
DOC> The following statement will cause:
DOC> - "ORA-00942: table or view does not exist" ; or
DOC> - "ORA-00904: "TZ_VERSION": invalid identifier"" ; or
DOC> - "ORA-01722: invalid number"
DOC> if the pre-upgrade utility (utlu112i.sql) has not been run to:
DOC> a) create and update registry$database table to include the current
DOC> database timezone file version used in the old release; or
DOC> b) do inserts into sys.props$.
DOC>
DOC> o Action:
DOC> Shutdown ABORT and revert to the original ORACLE_HOME. Then run
DOC> utlu112i.sql to populate registry$database with the database timezone
DOC> file version used by the lower version database and to populate
DOC> sys.props$ with Day Light Saving Time (DST) properties information.
DOC>
DOC> OR
DOC> - An "ORA-01722: invalid number"
DOC> if the old release uses a timezone file version newer than 8 (shipped with
DOC> 11.2) but the new release has not been patched yet.
DOC>
DOC> o Action:
DOC> Shutdown ABORT and patch new ORACLE_HOME to the same timezone file
DOC> version as used in the old ORACLE_HOME.
DOC>
DOC>
DOC>#######################################################################
DOC>#######################################################################
DOC>#
TO_NUMBER(value$) != (SELECT tz_version from registry$database))
*
第 6 行出现错误:
ORA-00942: 表或视图不存在


Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

根据Oracle给出的解决方法,需要设置9.2的ORACLE_HOME,启动数据库执行11.2的ORACLE_HOME/rdbms/admin/utlu112i.sql。但是由于已经设置了COMPATIBLE为11.2.0.1.0,并启动过数据库,导致9i环境已经无法打开数据库,启动将报错:

[oracle@bjtest ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 4月 30 22:05:47 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> shutdown abort
ORACLE
例程已经关闭。
SQL> exit
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

[oracle@bjtest ~]$ export ORACLE_HOME=/opt/oracle/product/9.2
[oracle@bjtest ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@bjtest ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期五 4月 30 22:06:42 2010

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

已连接到空闲例程。

SQL> startup pfile=inittest9.ora
ORA-00401: the value for parameter compatible is not supported by this release

初始化参数的值COMPATIBLE设置为11.2.0.1.0,在9i是无法启动的,但是即使改成9.2.0.1.0,由于已经更改了CONTROL_FILE,因此也是无法启动的。

修改初始化参数后,尝试启动:

SQL> startup pfile=inittest9.ora
ORACLE 例程已经启动。

Total System Global Area 657246184 bytes
Fixed Size 743400 bytes
Variable Size 385875968 bytes
Database Buffers 268435456 bytes
Redo Buffers 2191360 bytes
ORA-00201: ?????? 9.2.0.0.0 ? ORACLE ?? 9.2.0.0.0 ???
ORA-00202: ????: '/data/oradata/test9/control01.dbf'

而且这时在11g的环境下,利用UPGRADE方式启动,也无法调用utlu112i.sql了,调用会报错:

[oracle@bjtest ~]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on 星期五 4月 30 22:11:26 2010

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


连接到:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> shutdown abort
ORACLE
例程已经关闭。
SQL> exit
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production中断开

[oracle@bjtest ~]$ export ORACLE_HOME=/data/oracle/product/11.2
[oracle@bjtest ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@bjtest ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 4月 30 22:12:00 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.

已连接到空闲例程。

将初始化参数改回为11.2.0.1.0,利用UPGRADE启动数据库:

SQL> startup pfile=inittest9.ora upgrade
ORA-32006: BACKGROUND_DUMP_DEST initialization parameter has been deprecated
ORA-32006: USER_DUMP_DEST initialization parameter has been deprecated
ORACLE 例程已经启动。

Total System Global Area 618012672 bytes
Fixed Size 2215784 bytes
Variable Size 343933080 bytes
Database Buffers 268435456 bytes
Redo Buffers 3428352 bytes
数据库装载完毕。
数据库已经打开。
SQL> @?/rdbms/admin/utlu112i.sql
ERROR:
ORA-04023:
无法验证或授权对象 SYS.STANDARD


DECLARE
*
第 1 行出现错误:
ORA-04023: 无法验证或授权对象 SYS.STANDARD


ERROR:
ORA-04023:
无法验证或授权对象 SYS.STANDARD

现在已经陷入了两难的境地,在9i和11g都无法成功的打开数据库。如果在升级操作之前没有备份,就很可能导致数据库的彻底崩溃。


评论:


爱乐2010-08-20 09:40:09

是否可以重安装9i目录,重新定义环境变量。再启动呢?:



yangtingkun2010-08-20 23:57:27

不行,控制文件已经发生变化了



升级可能导致数据库不可用(二)2010-08-20 23:57:00

分类: Linux

升级过程也是一个危险的过程,操作不当可能造成数据库无法打开,因此在升级之前应该做好备份。

尝试解决问题。

升级可能导致数据库不可用(一):http://yangtingkun.itpub.net/post/468/504017

其实这个错误都不是很严重,本来是有办法解决的。但是由于当前的数据库环境必须设置COMPATIBLE,而且11.2升级过程中,也比较确保COMPATIBLE大于10.1,这就导致COMPATIBLE参数不能保持原始值不变,从而导致了严重的后果。

如果升级之前备份了数据库,那么只需要关闭数据库,并利用备份恢复,然后改成错误,重新执行升级过程即可。

在没有备份的情况下,只能采用一些极端的手段进行恢复了。

由于执行catupgrd.sql脚本报错,下面之后修改脚本中检查错误的地方,将catupstr.sql脚本的下列语句注释掉:

DOC
#######################################################################
#######################################################################
The following statement will cause:
- "ORA-00942: table or view does not exist" ; or
- "ORA-00904: "TZ_VERSION": invalid identifier"" ; or
- "ORA-01722: invalid number"
if the pre-upgrade utility (utlu112i.sql) has not been run to:
a) create and update registry$database table to include the current
database timezone file version used in the old release; or
b) do inserts into sys.props$.

o Action:
Shutdown ABORT and revert to the original ORACLE_HOME. Then run
utlu112i.sql to populate registry$database with the database timezone
file version used by the lower version database and to populate
sys.props$ with Day Light Saving Time (DST) properties information.

OR
- An "ORA-01722: invalid number"
if the old release uses a timezone file version newer than 8 (shipped with
11.2) but the new release has not been patched yet.

o Action:
Shutdown ABORT and patch new ORACLE_HOME to the same timezone file
version as used in the old ORACLE_HOME.


#######################################################################
#######################################################################
#

SELECT TO_NUMBER('MUST_BE_SAME_TIMEZONE_FILE_VERSION')
FROM sys.props$
WHERE
(
(name = 'DST_PRIMARY_TT_VERSION' AND
TO_NUMBER(value$) != (SELECT tz_version from registry$database))
AND
((SELECT version from v$timezone_file) !=
(SELECT tz_version from registry$database))
)
OR
(
(name = 'DST_PRIMARY_TT_VERSION' AND TO_NUMBER(value$) > 8)
AND
(0 = (select count(*) from v$timezone_file))
);

由于没有执行utlu112i.sql,导致registry$database表不存在,因此这里执行报错,为了整个语句可以顺利执行,先把这个SQL注释掉。

再次调用catupgrd.sql,升级过程开始。

但是由于缺少表的支持,升级过程必然会出现错误,导致升级到一半,出现了大量的ORA-3113错误:

ORA-00603: ORACLE server session terminated by fatal error
ERROR:
ORA-03114:
脦麓脕卢陆脫碌陆 ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
ERROR:
ORA-03114: 脦麓脕卢陆脫碌陆
ORACLE
.
.
.

升级失败。不过这时在意料之中的,将catupstr.sql中注释的部分去掉,关闭数据库,重启以upgrade方式启动,再次执行catupgrd.sql脚本,重新升级过程。

执行最终仍然出现了上面的错误信息。重复多次升级步骤,问题依旧。

但是虽然升级过程失败,但是数据库可以短暂的打开:

[oracle@bjtest ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 4月 29 23:07:20 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.

已连接到空闲例程。

SQL> startup pfile=inittest9.ora
ORA-32006: BACKGROUND_DUMP_DEST initialization parameter has been deprecated
ORA-32006: USER_DUMP_DEST initialization parameter has been deprecated
ORACLE 例程已经启动。

Total System Global Area 618012672 bytes
Fixed Size 2215784 bytes
Variable Size 343933080 bytes
Database Buffers 268435456 bytes
Redo Buffers 3428352 bytes
数据库装载完毕。
数据库已经打开。
SQL> select instance_name, status from v$instance;

INSTANCE_NAME STATUS
---------------- ------------
test9 OPEN

SQL> select name, open_mode from v$database;

NAME OPEN_MODE
--------- --------------------
TEST9 READ WRITE

SQL> exit
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

[oracle@bjtest ~]$ exp system/test file=full.dp full=y buffer=20480000 log=full.log

Export: Release 11.2.0.1.0 - Production on 星期四 4月 29 23:09:31 2010

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.


连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出整个数据库...
. 正在导出表空间定义

. 正在导出概要文件
. 正在导出用户定义
. 正在导出角色
EXP-00008: 遇到 ORACLE 错误 4045
ORA-04045: 在重新编译/重新验证 SYS.DBMS_DATAPUMP 时出错

ORA-00600: 内部错误代码, 参数: [ktfbbsearch-8], [128], [15], [], [], [], [], [], [], [], [], []
ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_DATAPUMP" 的程序单元

ORA-06512: "SYS.DBMS_LOGREP_EXP", line 3242
ORA-06512: 在
"SYS.DBMS_FILE_GROUP_EXP", line 813
ORA-06512: 在
line 1
EXP-00083: 调用 SYS.DBMS_FILE_GROUP_EXP.grant_sysprivs_exp 时出现前一问题

. 正在导出资源成本
. 正在导出回退段定义
. 正在导出数据库链接
. 正在导出序号
. 正在导出目录别名
. 正在导出上下文名称空间
. 正在导出外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出对象类型定义
. 正在导出系统过程对象和操作
EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body "SYS.DBMS_DATAPUMP" 有错误

ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_DATAPUMP" 的程序单元
ORA-06512: "SYS.DBMS_REPCAT_EXP", line 113
ORA-06512: 在
line 1
EXP-00083: 调用 SYS.DBMS_REPCAT_EXP.system_info_exp 时出现前一问题

. 正在导出 pre-schema 过程对象和操作
EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body "SYS.DBMS_AW_EXP" 有错误

ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_AW_EXP" 的程序单元
ORA-06512: line 1
EXP-00083: 调用 SYS.DBMS_AW_EXP.schema_info_exp 时出现前一问题

EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body "SYS.DBMS_DATAPUMP" 有错误

ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_DATAPUMP" 的程序单元
ORA-06512: "SYS.DBMS_RULE_EXP_UTL", line 50
ORA-06512: 在
"SYS.DBMS_RULE_EXP_RULES", line 147
ORA-06512: 在
line 1
EXP-00083: 调用 SYS.DBMS_RULE_EXP_RULES.schema_info_exp 时出现前一问题

. 正在导出簇定义
. 即将导出 SYSTEM 的表通过常规路径...
. . 正在导出表 DEF$_AQCALL导出了 0 行

. . 正在导出表 DEF$_AQERROR导出了 0 行
. . 正在导出表 DEF$_CALLDEST导出了 0 行
. . 正在导出表 DEF$_DEFAULTDEST导出了 0 行
. . 正在导出表 DEF$_DESTINATION导出了 0 行
.
.
.
. .
正在导出表 REPCAT$_USER_PARM_VALUES导出了 0 行
. . 正在导出表 SQLPLUS_PRODUCT_PROFILE导出了 1 行
. 即将导出 OUTLN 的表通过常规路径...
. . 正在导出表 OL$导出了 0 行

. . 正在导出表 OL$HINTS导出了 0 行
. . 正在导出表 OL$NODES导出了 0 行
. 即将导出 U1 的表通过常规路径...
. . 正在导出表 PLAN_TABLE导出了 0 行

. . 正在导出表 T导出了 0 行
. 正在导出同义词
. 正在导出视图
. 正在导出引用完整性约束条件
. 正在导出存储过程
. 正在导出运算符
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出触发器
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body "SYS.DBMS_AW_EXP" 有错误

ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_AW_EXP" 的程序单元
ORA-06512: line 1
EXP-00083: 调用 SYS.DBMS_AW_EXP.schema_info_exp 时出现前一问题

EXP-00008: 遇到 ORACLE 错误 4063
ORA-04063: package body "SYS.DBMS_DATAPUMP" 有错误

ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_DATAPUMP" 的程序单元
ORA-06512: "SYS.DBMS_RULE_EXP_UTL", line 50
ORA-06512: 在
"SYS.DBMS_RULE_EXP_RULES", line 147
ORA-06512: 在
line 1
EXP-00083: 调用 SYS.DBMS_RULE_EXP_RULES.schema_info_exp 时出现前一问题

. 正在导出用户历史记录表
. 正在导出默认值和系统审计选项
. 正在导出统计信息
导出成功终止, 但出现警告。

打开数据库后,马上利用EXP可以将数据库进行逻辑导出,可以看到,虽然数据库中部分组件仍然存在错误,但是用户数据部分已经导出了。这样就有机会重建数据库了。

数据库虽然可以打开,但是状态并不正常,运行一段时间,数据库自动报错关闭:

[oracle@bjtest ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 4月 30 01:00:19 2010

Copyright (c) 1982, 2009, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 10240
SQL> show parameter compat
ORA-03135:
连接失去联系
进程 ID: 25948
会话 ID: 48 序列号: 65


SQL> EXIT
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

虽然数据库可以导出,但是很可能会导致数据出现不一致或其他的问题,为了避免这种情况的出现,应该在升级之前备份好数据库。

疑问:

自己实施oracle10g数据库升级问题 [草稿]

对compatible参数的理解


对compatible参数的理解
推荐阅读
  • 对于初次购买阿里云服务器的新手用户来说,如何高效地利用服务器资源并成功部署网站是一个重要的课题。本文将详细指导您完成从购买服务器到网站上线的六个关键步骤。 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 本文介绍如何在SQL Server中利用WITH子句和窗口函数ROW_NUMBER()来查询每个类型下的最新数据行。示例包括表结构、数据插入以及最终的查询语句。 ... [详细]
  • 本文探讨了 Boost 库中的 Program Options 组件,这是一个强大的工具,用于解析命令行参数和配置文件。文章介绍了如何正确设置和使用该组件,包括处理复杂选项和负数值的方法。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文介绍了一种在Oracle 19c数据库中恢复被误删除表数据的方法,包括启用行移动功能和使用闪回技术,适用于表结构未被删除但数据丢失的情况。 ... [详细]
  • 本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ... [详细]
  • 数据库环境:SQLSERVER2005  有一个test表,其表结构及数据如下图1。其中,id是主键,mid是当前节点,pid是父节点。要求:查出每个节点的根节点,如图2所示。 ... [详细]
  • 本文介绍了如何在Laravel框架中使用Select方法进行数据库查询,特别是当需要根据传入的分类ID查询相关产品时的正确做法和注意事项。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • MySQL 8.0 新特性详解:免费视频教程上线
    本文介绍了一套在慕课网上发布的免费视频教程,深入解析 MySQL 8.0 的核心新功能,包括增强的安全性、用户管理、新的索引类型、CTE 和窗口函数等。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • SQL 数据恢复技巧:利用快照实现高效恢复
    本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ... [详细]
author-avatar
徐曼曼_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有