热门标签 | 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参数的理解
推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文介绍了如何使用 PostgreSQL 的 `UPDATE ... FROM` 语法,通过映射表实现对多行记录进行高效的批量更新。这种方法不仅适用于单列更新,还支持多列的同时更新。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
U友50096631
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有