RAC搭建ADG_11gR2

DATAGUARD是通过建立一个PRIMARY和STANDBY组来确立其参照关系。
STANDBY一旦创建,DATAGUARD就会通过将主数据库(PRIMARY)的REDO传递给STANDBY数据库,然后在STANDBY中应用REDO实现数据库的同步。
有两种类型的STANDBY:物理STANDBY和逻辑STANDBY
物理STANDBY提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是直接应用REDO实现同步的。
逻辑STANDBY则不是这样,在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表。
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
对于11g的Dataguard增强至ADG(Active Dataguard),相比10g的DG,它可以应用归档和联机日志,做到real-time apply,备库可以做到打开状态下实时同步,而且不需要在断开主备库之间的连接来进行备库的读。10g只能在mount下recover,如果需要读备库,得先把主库备库之前的日志应用停掉;而且10g里面没有standb redo log这个设置,所以只能应用archivelog,实时性得不到保障。
 
物理DG是指备库和主库完全一致,连DB_NAME也要一致,只有DB_UNIQUE_NAME不一样;块到块的复制,没有数据类型的限制。
逻辑DG是逻辑上相似的数据库,DB_NAME可以不一样;
物理DG可以转换成逻辑DG,但是反过来不行。
逻辑备份有一些不支持的数据类型。DBA_LOGSTDBY_UNSUPPORTED
 
 
环境介绍
主库:
版本:Red Hat 6.5 (cat /etc/redhat-release)
node1:10.205.53.106 BDSEC1
node2:10.205.53.107 BDSEC2
scan ip:10.205.53.115
备库:
版本:Red Hat 6.5 (cat /etc/redhat-release)
IP:10.205.53.123
 
1.备库安装Oracle软件,只装软件
2.确认备库以归档模式运行:archive log list
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 362
Next log sequence to archive 364
Current log sequence 364
3.打开Forced Logging 模式
SQL> select force_logging from v$database;
NO
强制归档
SQL> alter database force logging;
Database altered.
4.主备库添加standby logfile(如果备库只有数据库软件而没有数据库,则待duplicate后再添加standby logfle)
Data Guard在最大保护和最高可用性模式下,Standby数据库必须配置standby redo log,通过下面的实验展示创建的原则和过程。
1.原则
1).standby redo log的文件大小与primary 数据库online redo log 文件大小相同
2).standby redo log日志文件组的个数依照下面的原则进行计算
Standby redo log组数公式>=(每个instance日志组个数+1)*instance个数
例如在我的环境中,只有一个节点,这个节点有三组redo,所以
Standby redo log组数公式>=(3+1)*1 = 4
所以需要创建4组Standby redo log
3).每一日志组为了安全起见,可以包含多个成员文件
2.配置过程,正常情况下仅需要在Standby端进行配置,考虑到主备切换,在primary端亦进行配置。
1)Standby库添加四组Standby redo log,主库为RAC时要添加thread参数
SQL> alter database add standby logfile [thread n] group 4 ('/oracle/u02/ORA10GDG/STANDBYRD01.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile [thread n] group 5 ('/oracle/u02/ORA10GDG/STANDBYRD02.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile [thread n] group 6 ('/oracle/u02/ORA10GDG/STANDBYRD03.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile [thread n] group 7 ('/oracle/u02/ORA10GDG/STANDBYRD04.LOG') size 200M;
Database altered.
2)Primary库添加四组Standby redo log,用于主备切换
SQL> alter database add standby logfile group 4 ('/oracle/u02/ORA10G/STANDBYRD01.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile group 5 ('/oracle/u02/ORA10G/STANDBYRD02.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile group 6 ('/oracle/u02/ORA10G/STANDBYRD03.LOG') size 200M;
Database altered.
SQL> alter database add standby logfile group 7 ('/oracle/u02/ORA10G/STANDBYRD04.LOG') size 200M;
Database altered.
3)Standby redo log删除方法
sys@ora10g> alter database drop standby logfile group 4;
sys@ora10g> alter database drop standby logfile group 5;
sys@ora10g> alter database drop standby logfile group 6;
sys@ora10g> alter database drop standby logfile group 7;
4)通过V$STANDBY_LOG视图验证standby redo log文件组是否成功创建
sys@ora10g> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
7 0 0 YES UNASSIGNED
查看standby log的大小和状态
select a.group#,a.member,b.bytes/1024/1024 "sizeMB", b.thread#,b.sequence#,b.archived,a.status,b.status from v$logfile a ,v$standby_log b where a.group#=b.group#;
5.备库手动添加监听文件
vi listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.205.53.123)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = BDSEC)
(ORACLE_HOME = /opt/app/oracle/product/11g)
(SID_NAME = BDSEC)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
6.主备库修改tnsnames.ora
主库(两个节点都添加):
BDSECDG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.205.53.123)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BDSEC)
)
)
备库:
BDSEC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.205.53.115)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = BDSEC)
)
)
7.主库配置ADG参数
在主库是RAC的情况下,需要使用sid='*'来设置:
SQL> alter system set db_unique_name='BDSEC' scope=both sid='*';
SQL> alter system set log_archive_config='DG_CONFIG=(BDSEC,BDSECDG)' scope = both sid='*';
SQL> alter system set log_archive_dest_1=LOCATION=+DATA_SSD valid_for=(all_logfiles,all_roles) db_unique_name=BDSEC' scope=both sid='*';
SQL> alter system set log_archive_dest_2='SERVICE=BDSECDG lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=BDSECDG' scope=both sid='*';#推荐所有数据库都使用LGWR ASYNC模式传输
先禁用log_archive_dest_2参数,因此此时备库还没启动,搭建完成后打开此参数:
SQL> alter system set log_archive_dest_state_2=defer scope=both sid='*';
SQL> alter system set fal_client='BDSEC' scope=both sid='*';
SQL> alter system set fal_server='BDSECDG' scope=both sid='*';
SQL> alter system set standby_file_management=AUTO scope=both sid='*';
SQL> alter system set log_file_name_convert='+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec' #若不进行主备切换,则主库不必设置db_file_name_convert和log_file_name_convert
SQL> alter system set db_file_name_convert='+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec','+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec'
SQL> alter system set log_archive_format='arch_%r_%t_%s.arc' scope=spfile sid='*'; # 需要重启数据库,如果不能重启库的情况可以不修改
修改好后生成pfile:create pfile from spfile;
primary上配置最大性能模式(推荐):
SQL>alter database set standby database to maximize performance;
8.确保主库两节点的密码文件相同,并将其中一个密码文件拷贝到备库:
scp ..
9.根据主库的pfile,修改后得到备库的pfile:
vi initBDSEC.ora
*.audit_file_dest='/opt/app/oracle/admin/BDSEC/adump'
*.audit_trail='DB_EXTENDED'
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_domain=''
*.db_files=2000
*.db_name='BDSEC'
*.db_unique_name='BDSECDG'
*.diagnostic_dest='/opt/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=BDSECXDB)'
*.enable_goldengate_replication=TRUE
*.fal_client='BDSECDG'
*.fal_server='BDSEC'
*.log_archive_config='DG_CONFIG=(BDSEC,BDSECDG)'
*.log_archive_dest_1='LOCATION=/opt/app/oracle/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=BDSECDG'
*.log_archive_dest_2='SERVICE=BDSEC lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=BDSEC'
*.log_archive_dest_state_2='DEFER'
*.log_archive_format='%t_%s_%r.arc'
*.open_cursors=300
*.pga_aggregate_target=21474836480
*.processes=3000
*.remote_login_passwordfile='exclusive'
*.sessions=3305
*.sga_target=42949672960
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS2'
*.log_file_name_convert='+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec'
*.db_file_name_convert='+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec','+DATA_SSD/bdsec','/opt/app/oracle/oradata/bdsec'
根据参数文件的设置,建立相应文件夹:
mkdir -p /opt/app/oracle/oradata/bdsec/onlinelog
mkdir -p /opt/app/oracle/oradata/bdsec/datafile
mkdir -p /opt/app/oracle/oradata/bdsec/tempfile
mkdir -p /opt/app/oracle/oradata/bdsec/controlfile
mkdir -p /opt/app/oracle/archivelog/
mkdir -p /opt/app/oracle/admin/BDSEC/adump
10.启动备库到nomount状态
SQL>startup nomount
11.在standby库上恢复primary上面的数据
[oracle@n3 dbs]$ rman target sys/oracle@oracle auxiliary sys/oracle@oracledg nocatalog --如果使用的是非catalog,在rman 连接时,加上nocatalog关键字
Recovery Manager: Release 11.2.0.4.0 - Production on Tue Jun 28 16:57:24 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORACLE (DBID=1788360963)
using target database control file instead of recovery catalog
connected to auxiliary database: ORACLE (not mounted)
RMAN> duplicate target database for standby from active database; -- 在执行duplicate的时候,如果源库和目标库目录相同,那么在duplicate 时,需要加上nofilenamecheck
Starting Duplicate Db at 28-JUN-16
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=183 device type=DISK
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworacle' auxiliary format
'/opt/app/oracle/product/11.2.0/dbhome_1/dbs/orapworacledg' ; --用duplicate 创建standby 时会复制口令文件
}
executing Memory Script
Starting backup at 28-JUN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=39 device type=DISK
Finished backup at 28-JUN-16
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/opt/app/oracle/oradata/oracledg/control01.ctl';
restore clone primary controlfile to '/opt/app/oracle/fast_recovery_area/oracledg/control02.ctl' from
'/opt/app/oracle/oradata/oracledg/control01.ctl'; --创建控制文件
}
executing Memory Script
Starting backup at 28-JUN-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_recover.f tag=TAG20160628T165754 RECID=8 STAMP=915728274
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 28-JUN-16
Starting restore at 28-JUN-16
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 28-JUN-16
contents of Memory Script:
{
sql clone 'alter database mount standby database'; --将备库启动到mount standby
}
executing Memory Script
sql statement: alter database mount standby database
contents of Memory Script:
{
set newname for tempfile 1 to
"/opt/app/oracle/oradata/oracledg/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/opt/app/oracle/oradata/oracledg/system01.dbf";
set newname for datafile 2 to
"/opt/app/oracle/oradata/oracledg/sysaux01.dbf";
set newname for datafile 3 to
"/opt/app/oracle/oradata/oracledg/undotbs01.dbf";
set newname for datafile 4 to
"/opt/app/oracle/oradata/oracledg/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/opt/app/oracle/oradata/oracledg/system01.dbf" datafile
2 auxiliary format
"/opt/app/oracle/oradata/oracledg/sysaux01.dbf" datafile
3 auxiliary format
"/opt/app/oracle/oradata/oracledg/undotbs01.dbf" datafile
4 auxiliary format
"/opt/app/oracle/oradata/oracledg/users01.dbf" ;
sql 'alter system archive log current';
--将datafile convert 到其他目录
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to /opt/app/oracle/oradata/oracledg/temp01.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 28-JUN-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/orcl/system01.dbf
output file name=/opt/app/oracle/oradata/oracledg/system01.dbf tag=TAG20160628T165803
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/orcl/sysaux01.dbf
output file name=/opt/app/oracle/oradata/oracledg/sysaux01.dbf tag=TAG20160628T165803
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/orcl/undotbs01.dbf
output file name=/opt/app/oracle/oradata/oracledg/undotbs01.dbf tag=TAG20160628T165803
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/orcl/users01.dbf
output file name=/opt/app/oracle/oradata/oracledg/users01.dbf tag=TAG20160628T165803
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 28-JUN-16
sql statement: alter system archive log current
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
--开始copy datafile,如果数据文件比较大,这个会比较慢
datafile 1 switched to datafile copy
input datafile copy RECID=8 STAMP=915728326 file name=/opt/app/oracle/oradata/oracledg/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=9 STAMP=915728326 file name=/opt/app/oracle/oradata/oracledg/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=10 STAMP=915728326 file name=/opt/app/oracle/oradata/oracledg/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=11 STAMP=915728326 file name=/opt/app/oracle/oradata/oracledg/users01.dbf
Finished Duplicate Db at 28-JUN-16
12、对DG进行验证,并在备库添加standby redo log
12.1、查看数据库角色,查看是物理DG还是逻辑DG
SQL>select database_role from v$database;
physical standby --物理DG
12.2、查看备库状态
SQL>select open_mode from v$database;
mounted
刚复制完,数据库是mount状态,需要手动进行打开,然后进行recover,这样就会起一个mrp进程
 
13、DG搭建之后一些注意事项
13.1、给备库创建spfile
主库是用spfile启动,而备库是手动修改pfile,所以最好用pfile创建一个spfile
SQL> create spfile from pfile;
13.2、只要备库的监听不重启,重启备库后,主库还是能识别的。 如果备库的监听重启了。那么主库也就需要重启(实验证明,备库监听重启了,还是可以同步的)
13.3、复制结束后的Standby 只启动到mount standby 的状态并没有启动MRP的应用归档程序。 所以这个时候查询主备库,归档是不同步的。需要手动的启动MRP进程。
SQL> alter database recover managed standby database disconnect from session;
[oracle@n3 dbs]$ ps -ef |grep mrp
oracle 237565 1 0 17:11 ? 00:00:00 ora_mrp0_oracledg
13.4、备库Standby redo log 问题
在duplicate 结束后,备库没有添加standby redo log file, 但是主库采用的是:lgwr async(异步)传送的日志,当备库的RFS 进程接收到日志后,发现备库没有standby redo log的时候,备库会自动用ARCH将其写入归档文件。
如果主库采用的是lgwr sync(同步)方式,则需要在备库创建standby redo log,而且standby redo log 总大小不能小于主库上redo log的总大小。否则主库的switchover_status 一直会是FAILED DESTINATION
13.5、启用real-time apply,从而实现real-time query
SQL> alter database recover managed standby database cancel; --执行完后,备库变为read only状态,可以读,但是不会将主库的变化同步恢复到备库
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;--执行完后,备库变为read only with apply状态,即表示此时备库处于Read Only状态的同时可以接受主库传过来的日志进行恢复,以便达到备库可以即时查看到主库变化的目的
Database altered.
13.6、验证real-time apply 和real-time query:
Primary:
SQL> create table dave(id number,name varchar2(20));
Table created.
SQL> insert into dave values(1,'tianlesoftware');
1 row created.
SQL> commit;
Commit complete.
Standby:
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
SQL> select * from dave;
ID NAME
---------- ---------------
1 tianlesoftware
13.7 更改主备库角色
查看主库角色:
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------------------------- -------------------- ------------------------------------------------------------
ORACLE PRIMARY TO STANDBY
查看备库角色:
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------------------------- ------------------------------------------------ ------------------------------
ORACLE PHYSICAL STANDBY NOT ALLOWED ---在主库切换之前,备库是not allowed状态
在主库上进行切换:
SQL> alter database commit to switchover to physical standby with session shutdown; --防止有active session情况
Database altered --切换完之后,主库状态是关闭的,需要手动重启
SQL> select name,database_role,open_mode,switchover_status from v$database;
select name,database_role,open_mode,switchover_status from v$database
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 206423
Session ID: 162 Serial number: 153
SQL> startup
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2253664 bytes
Variable Size 989858976 bytes
Database Buffers 587202560 bytes
Redo Buffers 24096768 bytes
Database mounted.
Database opened.
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- -------------------- ------------------------------------------------------------ ------------------------------------------------------------
ORACLE PHYSICAL STANDBY READ ONLY TO PRIMARY
主库切换之后,备库还是备库的状态,需要手动切换:
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- ------------------------------------------------ ------------------------------------------------------------ ------------------------------
ORACLE PHYSICAL STANDBY READ ONLY WITH APPLY SESSIONS ACTIVE
在备库上进行切换到主库:
SQL> alter database commit to switchover to primary with session shutdown;
Database altered.
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- ------------------------------------------------ ------------------------------------------------------------ ------------------------------
ORACLE PRIMARY MOUNTED NOT ALLOWED
将切换之后的主库打开:
SQL> alter database open;
Database altered.
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- ------------------------------------------------ ------------------------------------------------------------ ------------------------------
ORACLE PRIMARY READ WRITE SESSIONS ACTIVE
此时切换之后的备库状态如下:
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- -------------------- ------------------------------------------------------------ ------------------------------------------------------------
ORACLE PHYSICAL STANDBY READ ONLY RECOVERY NEEDED
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Database altered.
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- -------------------- ------------------------------------------------------------ ------------------------------------------------------------
ORACLE PHYSICAL STANDBY READ ONLY WITH APPLY NOT ALLOWED
当备库状态正常后,主库状态也会变成To Standby:
SQL> select name,database_role,open_mode,switchover_status from v$database;
NAME DATABASE_ROLE OPEN_MODE SWITCHOVER_STATUS
--------------------------- ------------------------------------------------ ------------------------------------------------------------ ------------------------------
ORACLE PRIMARY READ WRITE TO STANDBY
这样就完成了主备库之间的切换。
查看主备库之间是否同步有两种方式:
1. 查看主备库归档的最大sequence号,最好用name is not null限制,因为有的name为空,那是之前建DG之前的归档。
SQL> select max(sequence#) from v$archived_log where name is not null;
MAX(SEQUENCE#)
--------------
36
2. 看归档的序列号
主库:
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/fast_recovery_area/
Oldest online log sequence 35
Next log sequence to archive 37
Current log sequence 37
备库:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /opt/app/oracle/fast_recovery_area/
Oldest online log sequence 37
Next log sequence to archive 0
Current log sequence 37
 
 

转载于:https://www.cnblogs.com/zhugablog/p/8491470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值