Oracle GoldenGate主要由如下一些组件组成
● Extract ● Data pump ● Replicat
● Trails or extract files ● Checkpoints ● Manager ● Collector
1、Data Pump是一个次级的Extract Group,如果你的GG环境中不使用Data Pump的话,那么Primary Extract Group必须直接将trail通过网络写到Target系统上.参见后面的示例6:配置Data Pump实现一对多拓扑方案.
2、默认情况下,Replicat是实时复制的,如果因为某种需要需要延迟复制的话,那么可以通过Replicat Group的如下DEFERAPPLYINTERVAL参数来控制,该参数允许delay的最大时间是7天。
按照Oracle GoldenGate的工作原理和体系结构,在每个复制数据源和目标端都需要安装一套GoldenGate软件,同时需要分别启动一个 GoldenGate实例,一个GoldenGate实例就是一个管理进程(Manager process),这个管理进程也是整个GoldenGate实例运行时最主要的控制进程。
GoldenGate操作系统内存的使用是通过操作系统来控制的,而不是通过GoldenGate程序控制的,GoldenGate进程会根据需要从OS那里分配相应的virtual memory.
l GoldenGate GGSCI命令接口工具对于每个GoldenGate实例可以支持并发300个Extract和Replicat进程。
l 每个Extract和Replicat进程需要大约25-55 MB内存,这主要取决于transaction的大小和并发的transaction数量。
所以,根据上面2个条件,GoldenGate对操作系统内存的需求主要取决于Extract和Replicat进程数。
工作目录
每个GoldenGate实例的工作目录(working directories and binaries),大约需要40M的空间,如果你要同一台Server安装多个GoldenGate实例到不同的目录/文件系统下话,那么就需要多倍的 空间分配,在考虑空间分配的时候,也需要考虑这个因数。
辅助空间
这部分空间主要用于存放GoldenGate Trails,它包含了工作数据。这部分空间的消耗取决于Trail,依赖于将要处理的数据量。
根据实际的数据库系统的规模,每天产生的日志量的大小,建议这部分空间从1GB-100G不等,可以保存7-10天的GoldenGate队列文件即可。
对于RAC环境
对于RAC环境,GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩 余的node启动而无须修改任何配置参数.否则如果运行在单个node上的话,需要将剩余node中的归档日志通过一定的技术共享出来并加载到 GoldenGate运行节点.
对于RAC环境,GoldenGate要求所有node必须保持时钟同步,同时必须保持所有RAC node和运行extract进程的node节点保持时钟同步.因为GoldenGate会比较本地的系统时间和commit的时间戳.所以不能忽略这个 设置.否则可能导致数据复制的紊乱.
网络要求
l Configure the system to use TCP/IP services, including DNS
l GoldenGate 使用主机名或者IP地址进行连接,主机名的方式更容易使用 l GoldenGate需要无限制的和自由的TCP/IP端口:
一个port用于两个GoldenGate的Manager process之间通信(比如Source的Manager process和Target的Manager process)本地GoldenGate进程间通信使用的端口范围:缺省的端口范围从7840开始,或者可以定义一个从7840+256的端口
l 建议保存一份分配给GoldenGate的端口使用记录 l 配置防火墙允许接受来自GoldenGate端口的请求
l 如果可能的话,可以设置FTP端口用于GoldenGate传输数据、参数和来自Source和Target的report.否则的话,需要提供其他的传输方法。
GoldenGate for Oracle
1.支持的平台
支持的Oracle Database 版本
在当前的Oracle GoldenGate 10.4版本中,支持如下Oracle Database版本 √Oracle 8i (DML support only)
√Oracle 9.1 and 9.2 (DML and DDL support)
√Oracle 10.1 and 10.2 (DML and DDL support) √Oracle 11g (DML and DDL support)
支持的操作系统平台
几乎所有主流的操作系统,GoldenGate都支持 √Windows 2000, 2003, XP √Linux
√Sun Solaris √HP NonStop √HP-UX √HP TRU64 √IBM AIX √IBM z/OS
2.操作系统需求
内存要求
按 照Oracle GoldenGate的工作原理和体系结构,在每个复制数据源和目标端都需要安装一套GoldenGate软件,同时需要分别启动一个 GoldenGate实例,一个GoldenGate实例就是一个管理进程(Manager process),这个管理进程也是整个GoldenGate实例运行时最主要的控制进程.
? GoldenGate是操作系统内存的使用是通过操作系统来控制的,而不是通过GoldenGate程序控制的,GoldenGate进程会根据需要从OS那里分配相应的virtual memory.
? GoldenGate GGSCI命令接口工具对于每个GoldenGate实例可以支持并发300个Extract和Replicat进程.
? 每个Extract和Replicat进程需要大约25-55 MB内存,这主要取决于transaction的大小和并发的transaction数量.
所以,根据上面2个条件,GoldenGate对操作系统内存的需求主要取决于Extract和Replicat进程数.
DISK空间需求
安装文件
从Oracle 官方网站上download下来的GoldenGate 压缩软件包大约是50M,所以在分配磁盘空间前你需要提高考虑到这些额外的资源开销,当然了,安装完毕后,你就可以把这个压缩软件包删除了.
工作目录
每 个GoldenGate实例的工作目录(working directories and binaries),大约需要40M的空间,如
果你要同一台Server安装多个GoldenGate实例到不同的目录/文件系统下话,那么就需要多倍的 空间分配,在考虑空间分配的时候,也需要考虑这个因数.
辅助空间
这部分空间主要用于存放GoldenGate Trails,它包含了工作数据。这部分空间的消耗取决于Trail,依赖于将要处理的数据量。
根据实际的数据库系统的规模,每天产生的日志量的大小,建议这部分空间从1GB-100G不等,可以保存7-10天的GoldenGate队列文件即可.
对于RAC环境
对于RAC环境,GoldenGate的相关软件和工作目录需要配置在shared disk环境中,从而保证对所有node都是可用的,从任何一个node都可以启动GoldenGate的进程,当其中一个node出现异常时,可以在剩 余的node启动而无须修改任何配置参数.否则如果运行在单个node上的话,需要将剩余node中的归档日志通过一定的技术共享出来并加载到 GoldenGate运行节点。
对 于RAC环境,GoldenGate要求所有node必须保持时钟同步,同时必须保持所有RAC node和运行extract进程的node节点保持时钟同步.因为GoldenGate会比较本地的系统时间和commit的时间戳.所以不能忽略这个 设置,否则可能导致数据复制的紊乱。
网络要求
? Configure the system to use TCP/IP services, including DNS
? GoldenGate 使用主机名或者IP地址进行连接,主机名的方式更容易使用 ? GoldenGate需要无限制的和自由的TCP/IP端口:
一个port用于两个GoldenGate的Manager process之间通信(比如Source的Manager process和Target的Manager process)
本地GoldenGate进程间通信使用的端口范围:缺省的端口范围从7840开始,或者可以定义一个从7840+256的端口
? 建议保存一份分配给GoldenGate的端口使用记录 ? 配置防火墙允许接受来自GoldenGate端口的请求
? 如果可能的话,可以设置FTP端口用于GoldenGate传输数据、参数和来自Source和Target的report.否则的话,需要提供其他的传输方法.
Database user
在数据库中创建一个供GoldenGate使用的专用用户,GoldenGate的所有进程可以使用这个用户连接到数据库中:
⊙Extract (source database) ⊙Replicat (target database)
⊙Manager (source database, if using DDL support) ⊙DEFGEN (source or target database)
从系统安全的角度出发,这个GoldenGate用户建议不给任何其他应用使用,仅供GoldenGate使用。
对于Oracle 10g及以后的版本,如果使用了Automatic Storage Management (ASM),GoldenGate的Extract进程需要一个用户来访问ASM实例,但GoldenGate不支持O/S认证的授权方式,所以你可以使 用sys或任何其他具有sysdba/sysasm权限的用户来连接到ASM实例.
建议保留一份数据库用户的记录
这些用户信息需要在GoldenGate参数文件中使用. USERID 是用户名,PASSWORD是口令
对于ASM user,可以通过TRANLOGOPTIONS (带有ASMUSER 和 ASMPASSWORD选项)参数来配置。
Database Configuration
对于Source Oracle Database要求: ? 数据库处于归档模式下 ? 打开补充日志 ? 打开force logging
GoldenGate的安装非常的简单,我以linux平台下的install为例简单的说一下步骤,详细的说明在对应的document上都有介绍
1. 将软件ftp(二进制模式上传)到目标服务器上的指定目录下 2. 解压缩安装文件到指定目录
gzip -dc 3. 进入到GoldenGate的安装目录. 4. 运行GGSCI 5. In GGSCI, issue the following command to create the GoldenGate working directories. CREATE SUBDIRS 6. Issue the following command to exit GGSCI. EXIT 就这么简单,就装完了 在配置GoldenGate环境时,刚开始的时候,我们总是需要先初始化把Source Database中需要复制的表的数据先load到目标库中,除非Source Database是一个新建的库或需要复制的对象中还没有任何数据。 目标:为了实现oragg1中的study.zrp到oragg2的实时数据同步,在配置OGG实现同步前,先把两个系统中的zrp表中的数据完成初始化同步。 说明:完成这个数据同步的技术很多,我这里仅仅是为了说明如何利用GoldenGate的Direct Load的方法实现数据的同步。 把源端数据库的数据同步到目标数据库 初始环境:利用系统的测试脚本(demo_ora_create.sql、demo_ora_insert.sql)完成源端建表和数据插入,目标端的建表工作。 1、为gate01建立专用的表空间: SQL> create tablespace ggs 2 datafile '/oracle/oradata/hrss2/ggs01.dbf' size 50M, 3 '/oracle/oradata/hrss2/ggs02.dbf' size 50m; Tablespace created. 2、在源数据库上建数据库用户gate01: SQL> create user gate01 identified by gate01 2 default tablespace ggs 3 temporary tablespace TEMP 4 quota unlimited on ggs; User created. SQL> grant connect,resource,dba to gate01; Grant succeeded. 3、在源数据库上建数据库用户gate01的表TCUSTMER、TCUSTORD,并插入记录: >conn gate01/gate01 >@demo_ora_create.sql >@demo_ora_insert.sql 4、为gate02建立专用的表空间: SQL> create tablespace ggs datafile '/oracle/oradata/hrss1/ggs01.dbf' size 50M, '/oracle/oradata/hrss1/ggs02.dbf' size 50m; Tablespace created. 5、在源数据库上建数据库用户gate02: create user gate02 identified by gate02 default tablespace ggs temporary tablespace TEMP quota unlimited on ggs; User created. SQL> grant connect,resource,dba to gate02; Grant succeeded. 6、在目标数据库上建数据库用户gate02的表TCUSTMER、TCUSTORD,不需要插入记录: >conn gate02/gate02 >@ SQL> @/oracle/ggs/demo_ora_create.sql 7、在源数据上配置管理进程MGR: GGSCI (source) 1> edit params mgr port 7809 ~ \"dirprm/mgr.prm\" [New] 2L, 11C written GGSCI (source) 2> start mgr –启动管理进程 Manager started. 8、在目标数据库上配置管理进程MGR: GGSCI (target) 1> edit params mgr port 7809 ~ \"dirprm/mgr.prm\" [New] 1L, 10C written GGSCI (target) 2> start mgr Manager started. 9、在source和target端检查管理进程是否启动: GGSCI (source) 3> info mgr Manager is running (IP port source.7809). GGSCI (target) 3> info mgr Manager is running (IP port target.7809). 10、在源数据库上增加需要传输的用户表: GGSCI (source) 4> dblogin userid gate01,password gate01 Successfully logged into database. GGSCI (source) 5> add trandata gate01.tcustmer Logging of supplemental redo data enabled for table GATE01.TCUSTMER. GGSCI (source) 7> add trandata gate01.tcustord Logging of supplemental redo data enabled for table GATE01.TCUSTORD. GGSCI (source) 9> info trandata gate01.* Logging of supplemental redo log data is enabled for table GATE01.TCUSTMER Logging of supplemental redo log data is enabled for table GATE01.TCUSTORD GGSCI (source) 10> 11、在源数据库上配置extract进程 Eora01: GGSCI (source) 10> add extract eora01,sourceistable EXTRACT added. GGSCI (source) 11> info extract *, tasks EXTRACT EORA01 Initialized 2011-02-22 20:17 Status STOPPED Checkpoint Lag Not Available Log Read Checkpoint Not Available First Record Record 0 Task SOURCEISTABLE GGSCI (source) 12> edit params eora01 extract eora01 userid gate01, password gate01 rmthost 192.168.1.20, mgrport 7809 rmttask replicat, group rora01 table gate01.*; \"dirprm/eora01.prm\" [New] 5L, 127C written 12、在目标数据库上配置replicat进程 Rora01: GGSCI (target) 4> ADD REPLICAT Rora01, SPECIALRUN REPLICAT added. GGSCI (target) 5> INFO REPLICAT *, TASKS REPLICAT RORA01 Initialized 2011-02-22 20:23 Status STOPPED Checkpoint Lag 00:00:00 (updated 00:00:18 ago) Log Read Checkpoint Not Available Task SPECIALRUN GGSCI (target) 6> EDIT PARAMS Rora01 REPLICAT Rora01 ASSUMETARGETDEFS USERID gate02, PASSWORD \"gate02\" DISCARDFILE ./dirrpt/Rora01.dsc, PURGE MAP gate01.*, TARGET gate02.*; ~ \"dirprm/rora01.prm\" [New] 6L, 137C written 13、在源数据库上执行初始化过程: START EXTRACT Eora01 VIEW REPORT EORA01(在源数据上查看是否有报错) GGSCI (source) 6> VIEW REPORT EORA01 2011-02-22 21:12:57 INFO OGG-01017 Wildcard resolution set to IMMEDIATE because SOURCEISTABLE is us ed. *********************************************************************** Oracle GoldenGate Capture for Oracle Version 11.1.1.0.0 Build 078 Linux, x86, 32bit (optimized), Oracle 10 on Jul 28 2010 16:16:35 Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved. Starting at 2011-02-22 21:12:57 *********************************************************************** Operating System Version: Linux Version #1 SMP Fri Jul 25 14:41:56 EDT 2008, Release 2.6.9-78.0.0.0.1.ELsmp Node: source Machine: i686 soft limit hard limit Address Space Size : unlimited unlimited Heap Size : unlimited unlimited File Size : unlimited unlimited CPU Time : unlimited unlimited Process id: 6305 Description: *********************************************************************** ** Running with the following parameters ** *********************************************************************** extract eora01 userid gate01, password ****** rmthost 192.168.1.20, mgrport 7809 rmttask replicat, group rora01 table gate01.*; TABLEWildcard resolved (entry GATE01.*): table GATE01.TCUSTMER; Using the following key columns for source table GATE01.TCUSTMER: CUST_CODE. TABLEWildcard resolved (entry GATE01.*): table GATE01.TCUSTORD; Using the following key columns for source table GATE01.TCUSTORD: CUST_CODE, ORDER_DATE, PRODUCT_CODE, O RDER_ID. CACHEMGR virtual memory values (may have been adjusted) CACHEBUFFERSIZE: 64K CACHESIZE: 2G CACHEBUFFERSIZE (soft max): 4M CACHEPAGEOUTSIZE (normal): 4M PROCESS VM AVAIL FROM OS (min): 2.89G CACHESIZEMAX (strict force to disk): 2.65G Database Version: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for Linux: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production Database Language and Character Set: NLS_LANG environment variable specified has invalid format, default value will be used. NLS_LANG environment variable not set, using default value AMERICAN_AMERICA.US7ASCII. NLS_LANGUAGE = \"AMERICAN\" NLS_TERRITORY = \"AMERICA\" NLS_CHARACTERSET = \"ZHS16GBK\" Warning: your NLS_LANG setting does not match database server language setting. Please refer to user manual for more information. Processing table GATE01.TCUSTMER Processing table GATE01.TCUSTORD *********************************************************************** * ** Run Time Statistics ** * *********************************************************************** Report at 2011-02-22 21:13:10 (activity since 2011-02-22 21:12:57) Output to rora01: From Table GATE01.TCUSTMER: # inserts: 2 # updates: 0 # deletes: 0 # discards: 0 From Table GATE01.TCUSTORD: # inserts: 2 # updates: 0 # deletes: 0 # discards: 0 GGSCI (source) 7> VIEW REPORT RORA01(在目标数据上查看是否有报错) GGSCI (target) 11> VIEW REPORT RORA01 *********************************************************************** Oracle GoldenGate Delivery for Oracle Version 11.1.1.0.0 Build 078 Linux, x86, 32bit (optimized), Oracle 10 on Jul 28 2010 16:38:15 Copyright (C) 1995, 2010, Oracle and/or its affiliates. All rights reserved. Starting at 2011-02-22 21:13:27 *********************************************************************** Operating System Version: Linux Version #1 SMP Fri Jul 25 14:41:56 EDT 2008, Release 2.6.9-78.0.0.0.1.ELsmp Node: target Machine: i686 soft limit hard limit Address Space Size : unlimited unlimited Heap Size : unlimited unlimited File Size : unlimited unlimited CPU Time : unlimited unlimited Process id: 28268 Description: *********************************************************************** ** Running with the following parameters ** *********************************************************************** REPLICAT Rora01 ASSUMETARGETDEFS USERID gate02, PASSWORD \"******\" DISCARDFILE ./dirrpt/Rora01.dsc, PURGE MAP gate01.*, TARGET gate02.*; CACHEMGR virtual memory values (may have been adjusted) CACHEBUFFERSIZE: 64K CACHESIZE: 512M CACHEBUFFERSIZE (soft max): 4M CACHEPAGEOUTSIZE (normal): 4M PROCESS VM AVAIL FROM OS (min): 1G CACHESIZEMAX (strict force to disk): 881M Database Version: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for Linux: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production Database Language and Character Set: NLS_LANG environment variable specified has invalid format, default value will be used. NLS_LANG environment variable not set, using default value AMERICAN_AMERICA.US7ASCII. NLS_LANGUAGE = \"AMERICAN\" NLS_TERRITORY = \"AMERICA\" NLS_CHARACTERSET = \"ZHS16GBK\" Warning: your NLS_LANG setting does not match database server language setting. Please refer to user manual for more information. *********************************************************************** ** Run Time Messages ** *********************************************************************** Wildcard MAP resolved (entry GATE01.*): MAP GATE01.TCUSTMER, TARGET gate02.TCUSTMER; Using following columns in default map by name: CUST_CODE, NAME, CITY, STATE Using the following key columns for target table GATE02.TCUSTMER: CUST_CODE. Wildcard MAP resolved (entry GATE01.*): MAP GATE01.TCUSTORD, TARGET gate02.TCUSTORD; Using following columns in default map by name: CUST_CODE, ORDER_DATE, PRODUCT_CODE, ORDER_ID, PRODUCT_PRICE, PRODUCT_AMOUNT, TRANSACTION_ID Using the following key columns for target table GATE02.TCUSTORD: CUST_CODE, ORDER_DATE, PRODUCT_CODE, O RDER_ID. *********************************************************************** * ** Run Time Statistics ** * *********************************************************************** Report at 2011-02-22 21:13:44 (activity since 2011-02-22 21:13:38) From Table GATE01.TCUSTMER to GATE02.TCUSTMER: # inserts: 2 # updates: 0 # deletes: 0 # discards: 0 From Table GATE01.TCUSTORD to GATE02.TCUSTORD: # inserts: 2 # updates: 0 # deletes: 0 # discards: 0 CACHE OBJECT MANAGER statistics CACHE MANAGER VM USAGE vm current = 0 vm anon queues = 0 vm anon in use = 0 vm file = 0 vm used max = 0 ==> CACHE BALANCED CACHE CONFIGURATION cache size = 512M cache force paging = 881M buffer min = 64K buffer highwater = 4M pageout eligible size = 4M CACHE Transaction Stats trans active = 0 max concurrent = 0 non-zero total = 0 trans total = 0 CACHE File Caching disk current = 0 disk total = 0 disk caching = 0 file cached = 0 file retrieves = 0 CACHE MANAGEMENT buffer links = 0 anon gets = 0 forced unmaps = 0 cnnbl try = 0 cached out = 0 force out = 0 Allocation Request Distribution < 128B: 0 128B: 0 0 | 512B: 0 0 2K: 0 0 | 8K: 0 0 32K: 0 0 | 128K: 0 0 512K: 0 0 | 2M: 0 0 8M: 0 0 | 32M: 0 0 128M: 0 0 | 512M: 0 0 2G: 0 0 | 8G: 0 Cached Transaction Size Distribution 0: 0 < 4K: 0 4K: 0 0 | 16K: 0 0 64K: 0 0 | 256K: 0 0 1M: 0 0 | 4M: 0 0 16M: 0 0 | 64M: 0 0 256M: 0 0 | 1G: 0 0 4G: 0 0 | 16G: 0 0 64G: 0 0 | 256G: 0 0 1T: 0 0 | 4T: 0 0 16T: 0 0 | 64T: 0 0 256T: 0 0 |1024T: 0 0 QUEUE Statistics: num queues = 15 default index = 0 cur len = 0 max len = 0 q vm current = 0 vm max = 0 q hits = 0 q misses = 0 queue size q hits curlen maxlen cannibalized 0 64K 0 0 0 0 1 128K 0 0 0 0 2 256K 0 0 0 0 3 512K 0 0 0 0 4 1M 0 0 0 0 5 2M 0 0 0 0 6 4M 0 0 0 0 7 8M 0 0 0 0 8 16M 0 0 0 0 9 32M 0 0 0 0 10 64M 0 0 0 0 11 128M 0 0 0 0 12 256M 0 0 0 0 13 512M 0 0 0 0 14 1G 0 0 0 0 =============================================================================== CACHE POOL #0 POOL INFO group: rora01 id: p28268_BLOB trans active = 0 trans concurrent (max) = 0 trans total = 0 (0 ) flag = 0x00000000 last error = (0= Allocation Request Distribution < 128B: 0 128B: 0 0 | 512B: 0 0 2K: 0 0 | 8K: 0 0 32K: 0 0 | 128K: 0 0 512K: 0 0 | 2M: 0 0 8M: 0 0 | 32M: 0 0 128M: 0 0 | 512M: 0 0 2G: 0 0 | 8G: 0 QUEUE Statistics: num queues = 15 default index = 0 cur len = 0 max len = 0 q vm current = 0 vm max = 0 q hits = 0 q misses = 0 queue size q hits curlen maxlen cannibalized 0 64K 0 0 0 0 1 128K 0 0 0 0 2 256K 0 0 0 0 3 512K 0 0 0 0 4 1M 0 0 0 0 5 2M 0 0 0 0 6 4M 0 0 0 0 7 8M 0 0 0 0 8 16M 0 0 0 0 9 32M 0 0 0 0 10 64M 0 0 0 0 11 128M 0 0 0 0 12 256M 0 0 0 0 13 512M 0 0 0 0 14 1G 0 0 0 0 =============================================================================== CACHE POOL #0 POOL INFO group: rora01 id: p28268_BLOB trans active = 0 trans concurrent (max) = 0 trans total = 0 (0 ) flag = 0x00000000 last error = (0= Allocation Request Distribution < 128B: 0 128B: 0 0 | 512B: 0 0 2K: 0 0 | 8K: 0 0 32K: 0 0 | 128K: 0 0 512K: 0 0 | 2M: 0 0 8M: 0 0 | 32M: 0 0 128M: 0 0 | 512M: 0 0 2G: 0 0 | 8G: 0 GGSCI (target) 12> SQL> SELECT * FROM TCUSTMER; CUST NAME CITY ST ---- ------------------------------ -------------------- -- WILL BG SOFTWARE CO. SEATTLE WA JANE ROCKY FLYER INC. DENVER CO SQL> SELECT * FROM TCUSTORD; CUST ORDER_DAT PRODUCT_ ORDER_ID PRODUCT_PRICE TRANSACTION_ID ---- --------- -------- ---------- ------------- -------------- -------------- WILL 30-SEP-94 CAR 144 17520 3 100 JANE 11-NOV-95 PLANE 256 133300 1 100 SQL> PRODUCT_AMOUNT 因篇幅问题不能全部显示,请点此查看更多更全内容