【19C】logmnr参考
97 DBMS_LOGMNR
DBMS_LOGMNR包是LogMiner包的一组,它包含用于初始化LogMiner工具以及开始和结束LogMiner会话的子程序。
LogMiner包的CONTINUOUS_MINE功能已经过时了。它在Oracle数据库12c发行版2(12.2)中被弃用。没有替代功能。
This chapter contains the following topics:
Overview
Security Model
Constants
Views
Operational Notes
Summary of DBMS_LOGMNR Subprograms
See Also:
Oracle Database Utilities for information regarding LogMiner.
97.1 DBMS_LOGMNR Overview
Pinpointing when a logical corruption to a database, such as errors made at the application level, may have begun
Determining what actions you would have to take to perform fine-grained recovery at the transaction level.
Performance tuning and capacity planning through trend analysis.
Track any data manipulation language (DML) and data definition language (DDL) statements executed on the database, the order in which they were executed, and who executed them.
See Also:
DBMS_LOGMNR_D for information on the package subprograms that extract a LogMiner dictionary and re-create LogMiner tables in alternate tablespaces
97.2 DBMS_LOGMNR Security Model
必须具有EXECUTE_CATALOG_ROLE角色才能使用DBMS_LOGMNR包。
97.3 DBMS_LOGMNR Constants
DBMS_LOGMNR包定义了几个枚举常量来指定参数值。枚举常量必须以包名作为前缀,例如DBMS_LOGMNR.NEW。
dbms_logmnr的continuous_mine选项。start_logmnr包被移植到Oracle数据库19c(19.1)中,不再可用。
下表描述了DBMS_LOGMNR包中ADD_LOGFILE选项标志的常量。
Table 97-1 Constants for ADD_LOGFILE Options Flag
Constant | Description |
---|---|
|
隐式调用DBMS_LOGMNR。END_LOGMNR过程结束当前LogMiner会话,然后创建一个新会话。新的会话启动一个新的要分析的重做日志文件列表,从您指定的重做日志文件开始。 |
|
将指定的重做日志文件添加到要分析的重做日志文件列表中。添加重复文件的任何尝试都会引发异常(ORA-01289)。如果没有指定选项标志,这是默认值。 |
Table 97-2 describes the constants for the START_LOGMNR
options flag in the DBMS_LOGMNR
package.
Table 97-2 Constants for START_LOGMNR Options Flag
Constant | Description |
---|---|
|
如果设置,则返回与提交事务对应的DML语句。与提交事务对应的DML语句被分组在一起。事务按其提交顺序返回。被回滚或正在进行的事务被过滤掉,内部重做记录(与索引操作、管理等相关的记录)也是如此。 如果没有设置此选项,则按照在重做日志中找到的顺序(按照SCN值的顺序)返回所有事务(已提交、回滚和正在进行的)的所有行。 |
|
指示V$LOGMNR_CONTENTS视图上的选择操作,以跳过正在分析的重做日志文件中的任何错误,并继续处理。此选项仅在重做日志文件中的一个块(而不是重做日志文件的头)损坏时才有效。您应该检查V$LOGMNR_CONTENTS视图中的INFO列,以确定LogMiner跳过的损坏块。当跳过重做日志文件中的损坏时,操作列包含值腐蚀ted_blocks,而状态列包含值1343 |
|
如果使用的LogMiner字典是平面文件或在重做日志文件中,LogMiner会在DDL事件发生时更新它的内部字典。这可以确保为在构建LogMiner内部字典之后修改的对象维护正确的SQL_REDO和SQL_UNDO信息。LogMiner所连接的数据库必须是打开的。 这个选项不能与DICT_FROM_ONLINE_CATALOG选项一起使用,而且当使用的LogMiner字典是在Oracle9i之前提取到平面文件的字典时,这个选项不能使用。 |
|
指示LogMiner使用当前的在线数据库字典,而不是包含在平面文件或正在分析的重做日志文件中的LogMiner字典。 此选项不能与DDL_DICT_TRACKING选项一起使用。LogMiner所连接的数据库必须与生成重做日志文件的数据库相同。 如果数据库中的表定义与重做日志文件中的表定义不匹配,则在V$LOGMNR_CONTENTS视图的状态列中预期会看到值为2。 |
|
如果设置,LogMiner期望在指定的重做日志文件中找到LogMiner字典。重做日志文件使用DBMS_LOGMNR指定。ADD_LOGFILE过程或DBMS_LOGMNR。START_LOGMNR过程。 |
|
如果设置,则不会将SQL分隔符(分号)放在重新构建的SQL语句的末尾。这对于打开游标然后执行重构语句的应用程序很有帮助。 |
|
如果设置,ROWID子句就不会包含在重新构建的SQL语句中。如果启用了补充日志记录,那么重做日志文件可能已经包含了修改行的逻辑唯一标识符。 在使用此选项时,您必须确保在源数据库的适当级别上启用了补充日志记录,并且感兴趣的表中不存在重复的行。LogMiner不保证逻辑行标识符的唯一性。 |
|
如果设置,LogMiner将格式化重新构建的SQL语句,以便阅读。这些重新构建的SQL语句是不可执行的。 |
|
如果设置,SQL_REDO和SQL_UNDO将对数字、日期时间和间隔列类型使用文字。 |
CopyEXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -DBMS_LOGMNR.DDL_DICT_TRACKING + DBMS_LOGMNR.DICT_FROM_REDO_LOGS);
97.4 DBMS_LOGMNR Views
DBMS_LOGMNR包使用下面列出的视图访问Oracle数据库实用程序视图中的Logminer操作信息。
97.5 DBMS_LOGMNR Operational Notes
97.6 Summary of DBMS_LOGMNR Subprograms
该表列出了DBMS_LOGMNR子程序并简要描述了它们。
在多租户容器数据库(CDB)中,必须从根调用一些子程序。可能还有其他不同之处。有关详细信息,请参阅各个子程序描述。
Table 97-3 DBMS_LOGMNR Package Subprograms
Subprogram | Description |
---|---|
ADD_LOGFILE Procedure |
将重做日志文件添加到现有的或新创建的重做日志文件列表中,以便LogMiner处理,这样,如果创建了新的列表,就标志着LogMiner会话的开始 |
COLUMN_PRESENT Function |
对于从V$LOGMNR_CONTENTS视图返回的任何行调用此函数,以确定对于该函数的column_name输入参数指定的列,是否存在撤销或重做列值 |
END_LOGMNR Procedure |
完成一个LogMiner会话 |
MINE_VALUE Function |
对于从V$LOGMNR_CONTENTS视图返回的任何行调用此函数,以检索由该函数的column_name输入参数指定的列的undo或redo列值 |
REMOVE_LOGFILE Procedure |
从重做日志文件列表中删除一个重做日志文件,以便LogMiner处理 |
START_LOGMNR Procedure |
初始化LogMiner实用程序并启动LogMiner(除非已经通过调用DBMS_LOGMNR.ADD_LOGFILE启动了会话) |
CopyDBMS_LOGMNR.ADD_LOGFILE ( LogFileName IN VARCHAR2,options IN BINARY_INTEGER default ADDFILE );
Table 97-4 ADD_LOGFILE Procedure Parameters
Parameter | Description |
---|---|
|
指定要添加到此会话期间要分析的重做日志文件列表中的重做日志文件的名称。 |
|
Does one of the following:
See Table 97-1. |
Table 97-5 ADD_LOGFILE Procedure Exceptions
Exception | Description |
---|---|
|
Specified file cannot be opened. |
|
Specified file is from a different database incarnation. |
|
Specified file has already been added to the list. Duplicate redo log files cannot be added. |
|
Specified file is not in the current list and therefore cannot be removed from the list. |
|
Specified file cannot be added to the list because there is a DB_ID mismatch. |
Before querying the
V$LOGMNR_CONTENTS
view, you must make a successful call to theDBMS_LOGMNR.START_LOGMNR
procedure (within the current LogMiner session).The LogMiner session must be set up with a list of redo log files to be analyzed. Use the
ADD_LOGFILE
procedure to specify the list of redo log files to analyze.If you want to analyze more than one redo log file, you must call the
ADD_LOGFILE
procedure separately for each redo log file. The redo log files do not need to be registered in any particular order.Both archived and online redo log files can be mined.
After you have added the first redo log file to the list, each additional redo log file that you add to the list must be associated with the same database and database
RESETLOGS
SCN
as the first redo log file. (The databaseRESETLOGS
SCN
uniquely identifies each execution of anALTER
DATABASE
OPEN
RESETLOGS
statement. When the online redo logs are reset, Oracle creates a new and unique incarnation of the database.)To analyze the redo log files from a different database (or a database incarnation with a different database
RESETLOGS SCN
) than that with which the current list of redo log files is associated, use theEND_LOGMNR
procedure to end the current LogMiner session, and then build a new list using theADD_LOGFILE
procedure.LogMiner matches redo log files by the log sequence number. Thus, two redo log files with different names but with the same log sequence number will return the ORA-01289 exception. For instance, the online counterpart of an archived redo log file has a different name from the archived redo log file, but attempting to register it with LogMiner after registering the archived counterpart will result in the ORA-01289 exception being returned.
97.6.2 COLUMN_PRESENT Function
这个函数被设计为与MINE_VALUE函数一起使用。
如果MINE_VALUE函数返回一个空值,它可以表示:
数据的重做或撤消部分中不存在指定的列。
指定的列已经存在,并且有一个空值。
要区分这两种情况,请使用COLUMN_PRESENT函数,如果该列出现在数据的重做或撤销部分,该函数将返回1。否则,它返回0。
Syntax
CopyDBMS_LOGMNR.COLUMN_PRESENT (sql_redo_undo IN RAW,column_name IN VARCHAR2 default '') RETURN NUMBER;
Parameters
Table 97-6 COLUMN_PRESENT Function Parameters
Parameter | Description |
---|---|
|
Specifies either the |
|
Specifies the fully qualified name ( In a CDB, the column name is specified as follows:
|
Return Values
Table 97-7 describes the return values for the COLUMN_PRESENT
function. The COLUMN_PRESENT
function returns 1 if the self-describing record (the first parameter) contains the column specified in the second parameter. This can be used to determine the meaning of NULL
values returned by the DBMS_LOGMNR.MINE_VALUE
function.
Table 97-7 Return Values for COLUMN_PRESENT Function
Return | Description |
---|---|
|
Specified column is not present in this row of |
|
Column is present in this row of |
Exceptions
Table 97-8 COLUMN_PRESENT Function Exceptions
Exception | Description |
---|---|
|
Currently, a LogMiner dictionary is not associated with the LogMiner session. You must specify a LogMiner dictionary for the LogMiner session. |
|
Value specified for the |
Usage Notes
To use the
COLUMN_PRESENT
function, you must have successfully started LogMiner.The
COLUMN_PRESENT
function must be invoked in the context of a select operation on theV$LOGMNR_CONTENTS
view.The
COLUMN_PRESENT
function does not supportLONG
, LOB,ADT
, orCOLLECTION
datatypes.The value for the
sql_redo_undo
parameter depends on the operation performed and the data of interest:If an update operation was performed and you want to know what the value was prior to the update operation, specify
UNDO_VALUE
.If an update operation was performed and you want to know what the value is after the update operation, specify
REDO_VALUE
.If an insert operation was performed, typically you would specify
REDO_VALUE
(because the value of a column prior to an insert operation will always beNULL
).If a delete operation was performed, typically you would specify
UNDO_VALUE
(because the value of a column after a delete operation will always beNULL
).
97.6.3 END_LOGMNR Procedure
此过程完成一个LogMiner会话。由于此过程执行其他方式无法完成的清理操作,因此必须使用它来正确结束LogMiner会话。当您注销数据库会话或调用DBMS_LOGMNR时,将自动调用此过程。ADD_LOGFILE并指定新选项。
Syntax
CopyDBMS_LOGMNR.END_LOGMNR;
Exceptions
Table 97-9 END_LOGMNR Procedure Exception
Exception | Description |
---|---|
|
No LogMiner session is currently active. The |
97.6.4 MINE_VALUE Function
此函数简化了基于列数据值的查询。
这个函数接受两个参数。第一个指定是挖掘数据的重做(REDO_VALUE)部分还是撤销(UNDO_VALUE)部分。第二个参数是一个字符串,它指定要挖掘的列的完全限定名。MINE_VALUE函数总是返回一个可以转换回原始数据类型的字符串。
Syntax
CopyDBMS_LOGMNR.MINE_VALUE (sql_redo_undo IN RAW,column_name IN VARCHAR2 default '') RETURN VARCHAR2;
Parameters
Table 97-10 MINE_VALUE Function Parameters
Parameter | Description |
---|---|
|
Specifies either the |
|
Specifies the fully qualified name ( In a CDB, the column name is specified as follows:
|
Return Values
Table 97-11 Return Values for MINE_VALUE Function
Return | Description |
---|---|
|
The column is not contained within the self-describing record, or the column value is |
|
The column is contained within the self-describing record; the value is returned in string format. |
Exceptions
Table 97-12 MINE_VALUE Function Exceptions
Exception | Description |
---|---|
|
Invalid state. Currently, a LogMiner dictionary is not associated with the LogMiner session. You must specify a LogMiner dictionary for the LogMiner session. |
|
Invalid identifier. The value specified for the |
Usage Notes
To use the
MINE_VALUE
function, you must have successfully started LogMiner.The
MINE_VALUE
function must be invoked in the context of a select operation from theV$LOGMNR_CONTENTS
view.The
MINE_VALUE
function does not supportLONG
, LOB,ADT
, orCOLLECTION
datatypes.The value for the
sql_redo_undo
parameter depends on the operation performed and the data of interest:If an update operation was performed and you want to know what the value was prior to the update operation, specify
UNDO_VALUE
.If an update operation was performed and you want to know what the value is after the update operation, specify
REDO_VALUE
.If an insert operation was performed, typically you would specify
REDO_VALUE
(because the value of a column prior to an insert operation will always be null).If a delete operation was performed, typically you would specify
UNDO_VALUE
(because the value of a column after a delete operation will always be null).
If the
DBMS_LOGMNR.MINE_VALUE
function is used to get anNCHAR
value that includes characters not found in the database character set, then those characters are returned as the replacement character (for example, an inverted question mark) of the database character set.
97.6.5 REMOVE_LOGFILE Procedure
这个过程从现有的重做日志文件列表中删除重做日志文件,以便LogMiner处理。
在CDB中,必须从根数据库调用REMOVE_LOGFILE过程。必须具有日志挖掘管理权限才能使用此过程。
CopyDBMS_LOGMNR.REMOVE_LOGFILE ( LogFileName IN VARCHAR2);
Table 97-13 REMOVE_LOGFILE Procedure Parameters
Parameter | Description |
---|---|
|
Specifies the name of the redo log file to be removed from the list of redo log files to be analyzed during this session. |
Table 97-14 REMOVE_LOGFILE Procedure Exception
Exception | Description |
---|---|
|
Cannot remove unlisted log file |
Before querying the
V$LOGMNR_CONTENTS
view, you must make a successful call to theDBMS_LOGMNR.START_LOGMNR
procedure (within the current LogMiner session).You can use this procedure to remove a redo log file from the list of redo log files for LogMiner to process if you know that redo log file does not contain any data of interest.
Multiple redo log files can be removed by calling this procedure repeatedly.
The redo log files do not need to be removed in any particular order.
To start a new list of redo log files for analysis, use the
END_LOGMNR
procedure to end the current LogMiner session, and then build a new list using theADD_LOGFILE
procedure.Even if you remove all redo log files from the list, any subsequent calls you make to the
ADD_LOGFILE
procedure must match the database ID andRESETLOGS
SCN
of the removed redo log files. Therefore, to analyze the redo log files from a different database (or a database incarnation with a different databaseRESETLOGS
SCN
) than that with which the current list of redo log files is associated, use theEND_LOGMNR
procedure to end the current LogMiner session, and then build a new list using theADD_LOGFILE
procedure.
这个过程通过加载LogMiner用来将内部模式对象标识符转换为名称的字典来启动LogMiner。
在CDB中,必须从根数据库调用START_LOGMNR过程。必须具有日志挖掘管理权限才能使用此过程。
CopyDBMS_LOGMNR.START_LOGMNR ( startScn IN NUMBER default 0,endScn IN NUMBER default 0,startTime IN DATE default '01-jan-1988',endTime IN DATE default '31-dec-2110',DictFileName IN VARCHAR2 default '',Options IN BINARY_INTEGER default 0 );
Table 97-15 START_LOGMNR Procedure Parameters
Parameter | Description |
---|---|
|
Directs LogMiner to return only redo records with an SCN greater than or equal to the |
|
Directs LogMiner to return only redo records with an SCN less than or equal to the |
|
Directs LogMiner to return only redo records with a timestamp greater than or equal to the This parameter is ignored if |
|
Directs LogMiner to return only redo records with a timestamp less than or equal to the This parameter is ignored if |
|
Specifies the flat file that contains the LogMiner dictionary. It is used to reconstruct You need to specify this parameter only if neither |
|
See Table 97-2. |
Table 97-16 START_LOGMNR Procedure Exceptions
Exception | Description |
---|---|
|
Internal error encountered. |
|
|
|
value for the |
|
Options parameter specified is invalid. |
|
LogMiner dictionary file specified in the |
|
Error reading specified file. |
|
Redo log files that are needed to satisfy the user's requested SCN or time range are missing. |
|
No log file has been specified for the current LogMiner session. |
|
Mounted database required for specified LogMiner options. |
|
Error occurred while processing information in the specified dictionary file, possible corruption. |
|
Specified LogMiner dictionary does not correspond to the database that produced the log files being analyzed. |
|
Character set mismatch between specified LogMiner dictionary and log files. |
|
Redo version mismatch between LogMiner dictionary and log files. |
|
Specified LogMiner dictionary corresponds to a different database incarnation. |
|
Writable database required for specified LogMiner options. |
LogMiner can use a dictionary that you previously extracted to the redo log files or to a flat file, or you can specify that LogMiner use the online catalog if LogMiner is mining data from the source system.
After executing the
START_LOGMNR
procedure, you can query the following views:V$LOGMNR_CONTENTS
- contains history of information in redo log filesV$LOGMNR_DICTIONARY
- contains current information about the LogMiner dictionary file extracted to a flat fileV$LOGMNR_PARAMETERS
- contains information about the LogMiner session
(You can query the
V$LOGMNR_LOGS
view after a redo log file list has been added to the list of files that LogMiner is to mine.)Parameters and options are not persistent across calls to
DBMS_LOGMNR.START_LOGMNR
. You must specify all desired parameters and options (including SCN and time ranges) each time you callDBMS_LOGMNR.START_LOGMNR
Be aware that specifying redo log files using a timestamp is not precise.
Keep the following in mind regarding starting and ending times or SCN ranges:
If you specify neither a
startTime
nor astartScn
parameter, LogMiner will set thestartScn
parameter to use the lowest SCN value from the redo log file that contains the oldest changes.If you specify both time and SCN values, LogMiner uses the SCN value or values and ignores the time values.
If you specify starting and ending time or SCN values and they are found in the LogMiner redo log file list, then LogMiner mines the logs indicated by those values.
If you specify starting and ending times or SCN values that are not in the LogMiner redo log file list, and you specify
DBMS_LOGMNR.START_LOGMNR
, and you specify:0
for thestartTime
orstartScn
value, then the lowest SCN in the LogMiner redo log file list will be used as thestartScn
A nonzero number for the
startTime
orstartScn
value, then an error is returned0
or a nonzero number for theendTime
orendScn
value, then the highest SCN in the LogMiner redo log file list will be used as theendScn
If you specify starting and ending times or SCN values and they are not found in the LogMiner redo log file list, and you specify
DBMS_LOGMNR.START_LOGMNR
, and you specify:0
for thestartTime
orstartScn
value, then an error is returned.A
startTime
orstartScn
value that is greater than any value in the database's archived redo log files, then LogMiner starts mining in the online redo log file. LogMiner will continue to process the online redo log file until it finds a change at, or beyond, the requested starting point before it returns rows from theV$LOGMNR_CONTENTS
view.An
endTime
orendScn
parameter value that indicates a time or SCN in the future, then LogMiner includes the online redo log files when it mines. When you query theV$LOGMNR_CONTENTS
view, rows will be returned from this view as changes are made to the database, and will not stop until LogMiner sees a change beyond the requested ending point.0
for theendTime
orendScn
parameter value, then LogMiner includes the online redo log files when it mines. When you query theV$LOGMNR_CONTENTS
view, rows will be returned from this view as changes are made to the database, and will not stop until you enter CTL+C or you terminate the PL/SQL cursor.
- Previous
- Next
【19C】logmnr参考相关推荐
- 404 找不到页面_找不到404页面设计,如何创建较大的错误页面
404 找不到页面 What's an error page for you? A reason for feeling confused and annoyed? A bit of a bother ...
- 插画惯用风格_2020年最佳插画家的10种鼓舞人心的插画风格
插画惯用风格 重点 (Top highlight) I have to confess- I'm an illustration junkie. Hours disappear when I'm sw ...
- 我的docker随笔31:oracle数据库再次部署
本文涉及一种在容器中部署 oracle 数据库的方法.经验证,可达到预期目标,并能应用在实际工作中. 引言 去年曾经部署过 oracle,当时使用阿里云仓库上的镜像,版本为 11.2, 但一直解决不了 ...
- 安装nginx,php8,nfs,oralce19c客户端
目录 一.安装nginx 二.安装php 1.安装php8插件 2.安装下载php8 三.安装nfs 四.安装19C客户端 a.安装oracle19c客户端 b. php连接oracle 19c数据库 ...
- 12c集群日志位置_Oracle 19C RAC 集群日志位置变化
作者 | JiekeXu 来源 | JiekeXu之路(ID: JiekeXu_IT) 转载请联系授权 | (微信ID:xxq1426321293) 大家好,我是 JiekeXu,很高兴又和大家见面了 ...
- 脚本升级_手把手教你升级到Database 19c(3)| 终章教程
点击▲关注 "ITPUB" 给公众号标星置顶 更多精彩 第一时间直达 前文回顾: 手把手教你升级到 Oracle 19c(1)| 教程来了手把手教你升级到 Oracle 1 ...
- linuxoracle静默安装应答文件修改_Oracle 19c的examples静默安装
Oracle 11g的examples示例schema安装,在这篇文章<Oracle 11g的examples静默安装>介绍过了,Oracle 19c的examples示例schema安装 ...
- 资源放送丨《Oracle 19c x86下移经验分享》PPT视频
点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请数据库资深专家 皇甫晓飞 老师分享了<Oracle 19c x86下移经验分享>,在这里我们将课件PPT和 ...
- 资源放送丨《Oracle 12C~19C统计信息的最佳实践》PPT视频
前段时间,墨天轮邀请到云和恩墨解决方案专家 黄廷忠 分享了直播<Oracle 12C~19C统计信息的最佳实践>,在这里我们共享一下PPT和视频,供大家参考学习. 优化器是Oracle数据 ...
最新文章
- 怎么安装python3-python3怎么安装
- 【BZOJ4069】【APIO2015】巴厘岛的雕塑 [贪心][DP]
- ACCV2020国际细粒度网络图像识别冠军方案解读、经验总结
- cc、gcc、g++ 的区别和联系
- Unable to update index for central http://repo1.maven.org/maven2/
- centos5.8安装mysql_Centos5.8上面用Shell脚本一键安装mysql5.5.25源码包
- 面向.NET开发人员的Dapr——可观察性
- SpringBoot使用Mina框架进行服务端与客户端数据通信
- 准确实用,7个优秀的开源中文分词库推荐
- 计算机毕设分词,毕业设计(论文)+计算机科学与技术+中文分词方法研究与实现论文全文.doc...
- CodeLite+TDM-GCC调试C++程序,断点无效问题
- 死磕 18 个 Java 8 的日期处理,工作必用!
- [深度学习] loss不下降的解决方法
- 例2.11 FatMouse' Trade - 九度教程第21题(贪心算法)
- java 切面 不执行,Spring AOP 切面没有执行
- 小说阅读,原生小说APP源码出售,可二次开发 四端互通:android端,ios端,h5端,公众号端
- libpcap简介及网络监测系统
- map的基本使用-go篇
- LeetCode[765]情侣牵手
- 使用css做一个简单的车轮滚滚效果
热门文章
- OA项目实战学习(3)——实现岗位管理增删改查
- 鞍点Saddle Point Locator
- 微信小程序自定义picker多列选择器
- SettingWithCopyWarning:A value is trying to be set on a copy of a slice from a DataFrame(Pandas库)
- 计算机第二课堂教学计划,小学第二课堂教学计划
- python实现汇率转换
- java ascii码大小写转换_使用「ASCII」转换大小写
- windows计算机搜索记录,win7清除文件搜索记录及电脑数据恢复教程
- 微信小游戏---猜拳游戏
- 2020年8月4日王者服务器维修,2020年8月4日小鸡正确的答案