oracle实验记录 (oracle 10G dataguard(4)redo传输&进程)

redo传输&进程

一.arcn传送redo数据
primary这样的设置:
*.log_archive_dest_1='location=G:\archivelog valid_for=(all_logfiles,all_roles) db_unique_name=xh'
*.log_archive_dest_2='service=standby1 valid_for=(online_logfiles,primary_role) db_unique_name=standby1'

这是一种默认设置表示使用arcn进程来归档日志文件并传输到standby(只支持最大性能模式)


SQL> select PROTECTION_MODE from v$database;

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE

具体使用arcn 进程的过程为:
1.primary 事务产生redo  写在log buffer里,由lgwr写入 online log file
2.primary的 arc0进程在发生归档时,将归档数据写到log_archive_dest_1这个本地归档位置
3.primary的 arc1进程同时将归档数据写到log_archive_dest_2这个远程归档位置
4.standby rfs进程将redo写到 standby redo logfile中
6.standby的 arch进程将standby redo logfile中 数据归档
7.standby的 mrp(重做应用) or lsp(sql应用)进程应用这些归档中那个redo到 standby database


SQL> select program from v$process where program like '%ARC%';(primary)

PROGRAM
----------------------------------------------------------------
ORACLE.EXE (ARC0)
ORACLE.EXE (ARC1)

SQL>  select process,client_process from v$managed_standby;(standby)

PROCESS   CLIENT_P
--------- --------
ARCH      ARCH
ARCH      ARCH
MRP0      N/A~*********************负责应用redo的进程
RFS       UNKNOWN~~~~~~~~~~负责接收primary arc1进程传输数据的进程


rfs对应的 client_process  为unknown表示用的arch (log_archive_dest_n='service=xx arch) lgwr,表示用的LGRW

 

二.lgwr来传送redo数据
primary中设*.log_archive_dest_2='service=standby1 lgwr valid_for=(online_logfiles,primary_role) db_unique_name=standby1'
LGWR中又分sync(默认),async

lgwr sync情况过程:
1.primary 事务产生redo lgwr将log buffer中数据 写入online log file 然后由primary arcn归档到log_archive_dest_1,另外lgwr写 online log file同时 将redo数据发给primary 中LNSN进程(LGWR Network Server process)
2.lnsn通过oracle net 将redo传给 standby 的rfs进程,rfs进程 将redo 写入  standby redo log files
3.primary 中事务会一直处于未提交状态直到standby全部接收完毕
4.primary switch logfile,将触发standby  log file切换(启动 standby arcn 进程)
5.此时允许实时应用,LSP(SQL应用)或mrp(重做应用)去执行.

 

lgwr async情况过程
1.primary 事务产生redo lgwr将log buffer中数据 写入online log file 然后由primary arcn归档到log_archive_dest_1
2.当primary online log file 收到redo后 lnsn进程启动
3.lnsn通过oracle net 将redo传给 standby 的rfs进程,rfs进程 将redo 写入    standby redo log files
4.primary 中事务会一直处于未提交状态直到standby全部接收完毕
5.primary switch logfile,将触发standby  log file切换(启动 standby   arcn 进程)
6.此时允许实时应用,LSP(SQL应用)或mrp(重做应用)去执行.

 

 

 

关于日志传输中断

自动解决:
当由于网络问题,造成日志传不到standby,不用手动干涉,oracle primary database会每分钟都检查standby 查看archive log 是否有中断(通过sequence#判断),若发现有中断oracle使用 FAL(fetch archive log)来解决这个问题
处理机制
1.fal自动检查并获取在primary生成的archive log
2.当standby接受archive log有问题时候,fal 能解决当standby还没应用时,但存在standby的archive log被删除,standby 存archive log的disk不能用,standby 收到的archive log被替换

 

SQL> select count(*) from v$archived_log;(primary)

  COUNT(*)
----------
        77

SQL> select count(*) from v$archived_log;(standby)

  COUNT(*)
----------
        37

 

SQL> shutdown immediate; (standby)
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> alter system switch logfile;(primary)

系统已更改。

SQL> /                      (primary)

系统已更改。

SQL> select count(*) from v$archived_log;(primary)

  COUNT(*)
----------
        79


SQL> startup  (standby)
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
数据库已经打开。

SQL> /    (primary) 过一会primary自动有产生了archived log

  COUNT(*)
----------
        84

SQL> /  (standby)的fal机制自动都补上了

  COUNT(*)
----------
        42

 

standby archive log 物理丢失

SQL> alter database recover managed standby database cancel;

数据库已更改。
SQL> select name,applied from v$archived_log;
E:\STANDBY\ARCHIVE\ARC00045_0701872237.001                   YES
E:\STANDBY\ARCHIVE\ARC00046_0701872237.001                   YES

已选择46行。 (standby的情况   都应用了)

SQL> select * from t1;(primary)

         A
----------
         1
         2
         3
      9999
      6666
      8888
      5555
      7777

已选择8行。

SQL> select current_scn from v$database;(primary)

CURRENT_SCN
-----------
     962213

SQL> insert into t1 values(4444);(primary)

已创建 1 行。

SQL> commit;(primary)

提交完成。
SQL> alter system switch logfile;(primary)

系统已更改。

SQL> select name from v$archived_log where 962213 between FIRST_CHANGE# and NEXT (primary)
_CHANGE# ;

NAME
--------------------------------------------------------------------------------

G:\ARCHIVELOG\ARC00047_0701872237.001
standby1


SQL> select current_scn from v$database; (primary)
 
CURRENT_SCN
-----------
     962324

SQL> insert into t1 values(123456); (primary)

已创建 1 行。

SQL> commit; (primary)

提交完成。

SQL> alter system switch logfile; (primary)

系统已更改。

SQL> select name from v$archived_log where 962324 between FIRST_CHANGE# and NEXT (primary)
_CHANGE# ;

NAME
--------------------------------------------------------------------------------

G:\ARCHIVELOG\ARC00048_0701872237.001
standby1


可以看到insert 4444在  ARC00047_0701872237.001  ,123456在ARC00048_0701872237.001

SQL> select name,applied from v$archived_log;  (standby)
E:\STANDBY\ARCHIVE\ARC00047_0701872237.001                   NO
E:\STANDBY\ARCHIVE\ARC00048_0701872237.001                   NO

已选择48行。
SQL> host del E:\STANDBY\ARCHIVE\ARC00047_0701872237.001 (standby)

SQL>
SQL> alter database recover managed standby database disconnect from session; (standby)

数据库已更改。

SQL> select name,applied from v$archived_log;  (standby)
E:\STANDBY\ARCHIVE\ARC00047_0701872237.001                   NO
E:\STANDBY\ARCHIVE\ARC00048_0701872237.001                   YES
E:\STANDBY\ARCHIVE2\ARC00047_0701872237.001                  YES*****重新复制了一个 损坏的archive log

已选择49行。

看下standby 的archive log信息  (standby)

Media Recovery Log E:\STANDBY\ARCHIVE\ARC00047_0701872237.001
Error opening E:\STANDBY\ARCHIVE\ARC00047_0701872237.001
Attempting refetch
Media Recovery Waiting for thread 1 sequence 47
Fetching gap sequence in thread 1, gap sequence 47-47

可以看到standby 的fal机制,对这个损坏的archived log进行 media recovery

 


SQL>
SQL> show parameter standby_archive_ (standby)

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------------
standby_archive_dest                 string      e:\standby\archive2


SQL> alter database recover managed standby database cancel; (standby)

数据库已更改。

SQL> alter database open; (standby)

数据库已更改。

SQL> select * from t1;(standby)

         A
----------
         1
         2
         3
      9999
      6666
      8888
      5555
      7777
      4444
    123456 *********************

已选择10行。

 

另外 采用alter database open (standby) 此时oracle判断是physical standby read only
standby alert.log中 出现大量

ksvcreate: Process(m000) creation failed
Fri Nov 06 11:39:04 2009
ksvcreate: Process(m000) creation failed
Fri Nov 06 11:40:07 2009
ksvcreate: Process(m000) creation failed
Fri Nov 06 11:41:10 2009
ksvcreate: Process(m000) creation failed
Fri Nov 06 11:42:13 2009
ksvcreate: Process(m000) creation failed
Fri Nov 06 11:43:16 2009
ksvcreate: Process(m000) creation failed
Fri Nov 06 11:44:19 2009
ksvcreate: Process(m000) creation failed

查询是一个Bug 5583049

Doc ID:  418553.1
Applies to:
Oracle Server - Enterprise Edition - Version: 10.2 to 10.2
This problem can occur on any platform.

Symptoms
Switching a Physical Standby Database multiple to READ ONLY Mode will report the following Errors in the ALERT.LOG:

ksvcreate: Process(m000) creation failed


Changes
Switch Physical Standby from READ ONLY to apply and back to READ ONLY.
Cause
The Cause of this Problem has been identified in Bug 5583049.
Solution
There are two Workarounds available:

Restart the Instance..
or

 Disable ADDM - Should be re-enabled if Standby takes up the Primary Role
          * Set SGA_TARGET=0 and set shared_pool_size, db_cache_size, etc if using
            Automatic SGA Memory Management (ASMM)

          * Set STATISTICS_LEVEL=BASIC to disable statistics gathering

References
Bug 5583049 - 'KSVCREATE: PROCESS(M000) CREATION FAILED' AFTER STANDBY OPEN RO MULTIPLE TIMES

Keywords
READ-ONLY; STANDBY~DATABASE; PHYSICAL~STANDBY;
--------------------------------------------------------------------------------

Help us improve our service. Please email us your comments for this document. .

 

 

 

 

手动中断解决

SELECT * FROM V$ARCHIVE_GAP;(standby)
standby上进行查询 返回的话表示 存在中断

SQL> desc v$archive_gap;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- -------------------------

 THREAD#                                            NUMBER
 LOW_SEQUENCE#                                      NUMBER
 HIGH_SEQUENCE#                                     NUMBER

根据信息在primary v$archived_log中确定中断 的archived log
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=XX AND DEST_ID=XXX
2> AND SEQUENCE# BETWEEN XX AND XXX;

手动复制到standby achived log dest
 
ALTER DATABASE REGISTER LOGFILE 'xxxxxxxxx'进行手工注册

 

 

确定日志是否传送到standby


primary执行
  1  SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
  2   (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1)
  3   LOCAL WHERE
  4   LOCAL.SEQUENCE# NOT IN
  5   (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND
  6*  THREAD# = LOCAL.THREAD#)
SQL> /

未选定行

以上可以查到 dest_1位置存在的归档 不再dest_2位置的,既 没有传送到standby的

SQL> col dest_name format a30
SQL> select dest_id ,dest_name,db_unique_name from v$archive_dest;(primary)

   DEST_ID DEST_NAME                      DB_UNIQUE_NAME
---------- ------------------------------ ------------------------------
         1 LOG_ARCHIVE_DEST_1             xh
         2 LOG_ARCHIVE_DEST_2             standby1
         3 LOG_ARCHIVE_DEST_3             NONE
         4 LOG_ARCHIVE_DEST_4             NONE
         5 LOG_ARCHIVE_DEST_5             NONE
         6 LOG_ARCHIVE_DEST_6             NONE
         7 LOG_ARCHIVE_DEST_7             NONE
         8 LOG_ARCHIVE_DEST_8             NONE
         9 LOG_ARCHIVE_DEST_9             NONE
        10 LOG_ARCHIVE_DEST_10            NONE

已选择10行。

 


SQL> SELECT MAX(SEQUENCE#), THREAD# FROM V$ARCHIVED_LOG GROUP BY  (primary)
  2  THREAD#;

MAX(SEQUENCE#)    THREAD#
-------------- ----------
            48          1

在 primary确定最新的 archived_log

 


***********************
standby archive log


设置一个归档延迟应用

log_archive_dest_n 中delay属性
SQL> show parameter log_archive_dest_2(primary)

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2                   string      service=standby1 valid_for=(on
                                                 line_logfiles,primary_role) db
                                                 _unique_name=standby1
SQL> select status,database_mode,recovery_mode from v$archive_dest_status;(standby)

STATUS    DATABASE_MODE   RECOVERY_MODE
--------- --------------- -----------------------
VALID     MOUNTED-STANDBY IDLE~~~~~~~~~~~~~~~~~~~~~~~~~可以看到 standby 目前为idle 未启动恢复
VALID     MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
INACTIVE  MOUNTED-STANDBY IDLE
VALID     MOUNTED-STANDBY IDLE

已选择11行。

SQL> alter database recover managed standby database disconnect from session;(standby 开启恢复模式 收到archive log后就 马上应用)

SQL> select status,database_mode,recovery_mode from v$archive_dest_status;;(standby)

STATUS    DATABASE_MODE   RECOVERY_MODE
--------- --------------- -----------------------
VALID     MOUNTED-STANDBY MANAGED~~~~~~~~~~~~~变为管理状态
VALID     MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
INACTIVE  MOUNTED-STANDBY MANAGED
VALID     MOUNTED-STANDBY MANAGED

已选择11行。

SQL> insert into t1  values(9999);(primary)

已创建 1 行。

SQL> commit;(primary)

提交完成。

SQL> alter system switch logfile ;(primary)

系统已更改。

SQL> alter system checkpoint;(primary)

系统已更改。
SQL> select applied from v$archived_log;(standby)

YES
YES
YES
YES
YES~~~~~~~~~~~~~~~~~~~~~~~~应用了

已选择29行。


SQL> alter database recover managed standby database cancel;(standby)

数据库已更改。

SQL> alter database open(standby)
  2  ;

数据库已更改。

 

OPEN_MODE
----------
READ ONLY~~~~~从这可以看出来 虽然 未使用alter database open read only,oracle自动判断是个physiacl standby只能read only打开

SQL> select * from t1;(standby)

         A
----------
         1
         2
         3
      9999******************

可以看到standby现在收到archive log 就应用 这是由于primary log_archive_dest_2中 service=standby1 默认是nodelay属性

SQL> alter system set log_archive_dest_2='service=standby1 delay valid_for=(on   (primary设置了delay默认 30分钟)
ne_logfiles,primary_role) db_unique_name=standby1';

系统已更改。
SQL> insert into t1  values(6666);(primary)

已创建 1 行。

SQL> commit;(primary)

提交完成。

SQL> alter system switch logfile;(primary)

系统已更改。


SQL> alter database recover managed standby database disconnect from session;(standby)

数据库已更改。

SQL> select applied from v$archived_log;(standby)
YES
YES
YES
NO~~~~~没有应用这个最新的

已选择30行。


查看standby alert.log
Wed Nov 04 17:06:15 2009
idle dispatcher 'D000' terminated, pid = (13, 1)~~~~DBWN进程空闲的,没执行
SQL> alter database recover managed standby database disconnect from session nod   (standby)
elay;
alter database recover managed standby database disconnect from session nodelay
*
第 1 行出现错误:
ORA-01153: 激活了不兼容的介质恢复


SQL> alter database recover managed standby database cancel;~~~要先推一下恢复模式

数据库已更改。

SQL> alter database recover managed standby database disconnect from session nod   (standby 加nodelay进入)
elay;

数据库已更改。

SQL> select applied from v$archived_log;

YES
YES
YES
YES
YES
YES~~~~~~~~~~~~~~~~~~~~~`应用最新的archive log了

已选择30行。
SQL> alter database recover managed standby database cancel;

数据库已更改。
SQL> alter database open;

数据库已更改。

SQL> select * from t1;

         A
----------
         1
         2
         3
      9999
      6666~~~~~~~~~~~~~~~~~~~~~~OK了

 

**********************************
关于standby上archived 生成存储问题

现在standby上 改下所有路径

SQL> show parameter log_archive_dest_1

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=e:\standby\archive va
                                                 lid_for=(all_logfiles,all_role
                                                 s) db_unique_name=standby1

SQL> show parameter standby_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_archive_dest                 string      e:\standby\archive
SQL> show parameter db_rec

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      e:\standby\archive

SQL> host mkdir e:\standby\archive2

SQL> host mkdir e:\standby\archive3

SQL> alter system set standby_archive_dest='e:\standby\archive2';

系统已更改。

 

SQL> alter system set db_recovery_file_dest='e:\standby\archive3';

系统已更改。

SQL> select * from v$standby_log;(standby 上 没有 standby log file)

未选定行


SQL> select count(*) from v$archived_log;(standby ,现在有 33个归档)

  COUNT(*)
----------
        33
已选择33行。


SQL> alter system switch logfile;(primary)

系统已更改。

SQL> select name,creator,applied from v$archived_log;(standby)

NAME                                                         CREATOR APP
------------------------------------------------------------ ------- ---
E:\STANDBY\ARCHIVE2\ARC00035_0701872237.001                  ARCH    NO

已选择34行。

可以看到最新的这个归档使用的是 standby_archive_dest的位置

SQL> alter system set standby_archive_dest='';

系统已更改。
SQL> alter system switch logfile;

系统已更改。

SQL> select name,creator,applied from v$archived_log;(standby)
NAME                                                         CREATOR APP
------------------------------------------------------------ ------- ---
E:\STANDBY\ARCHIVE2\ARC00035_0701872237.001                  ARCH    NO

已选择34行。

看下standby 的alter
Errors in file e:\standby\udump\standby1_rfs_2412.trc:
ORA-16032: parameter STANDBY_ARCHIVE_DEST destination string cannot be translated

过了几分钟再查询
/

E:\STANDBY\ARCHIVE\ARC00036_0701872237.001                   ARCH    NO   收到最新的archive log了,位置在 standby 的 log_archive_dest_1  

已选择35行。


看下standby alert.log

Using STANDBY_ARCHIVE_DEST parameter default value as e:\standby\archive
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[2]: Assigned to RFS process 780
RFS[2]: Identified database type as 'physical standby'
RFS[2]: Archived Log: 'E:\STANDBY\ARCHIVE\ARC00036_0701872237.001

从上面可以看 到 oracle自己尝试将standby_archive_dest目录 改为log_archive_dest_1中目录

 

SQL> alter system set log_archive_dest_1='' scope=spfile;(standby)

系统已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              79692480 bytes
Database Buffers          201326592 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。
数据库已经打开。

 

SQL> alter system switch logfile;(primary)

系统已更改。
             
SQL> select name,creator,applied from v$archived_log;(standby)
E:\STANDBY\ARCHIVE3\STANDBY1\ARCHIVELOG\2009_11_05\O1_MF_1_3 ARCH    NO
7_5H4JCJDP_.ARC


已选择36行。
可以发现建立在 闪回恢复区位置了

从standby  alert.log看下oracle自己的操作过程

Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST
Redo Shipping Client Connected as PUBLIC
-- Connected User is Valid
RFS[1]: Assigned to RFS process 2680
RFS[1]: Identified database type as 'physical standby'
Thu Nov 05 11:04:02 2009
RFS LogMiner: Client disabled from further notification
Thu Nov 05 11:07:28 2009
RFS[1]: No standby redo logfiles created
RFS[1]: Archived Log: 'E:\STANDBY\ARCHIVE3\STANDBY1\ARCHIVELOG\2009_11_05\O1_MF_1_37_5H4JCJDP_.ARC'

 

简单总结no standby redo logfile时 archive log存standby_file_dest如果没有 则尝试存log_file_archive_dest_n,如果没有则尝试存db_recover_file_dest

 

有standby redo logfile时情况

SQL> alter system set standby_archive_dest= 'e:\standby\archive2'; (standby)

系统已更改。

SQL> alter system set log_archive_dest_1='location=e:\standby\archive valid_for=   (standby)
(all_logfiles,all_roles) db_unique_name=standby1' scope=spfile;

系统已更改。


SQL> alter database add standby logfile group 4 'e:\standby\datafile\redo04.log'  (standby)
size 10m;

数据库已更改。

SQL> col member format a30
SQL> select group#,member from v$logfile; (standby)

    GROUP# MEMBER
---------- ------------------------------
         3 E:\STANDBY\DATAFILE\REDO03.LOG
         2 E:\STANDBY\DATAFILE\REDO02.LOG
         1 E:\STANDBY\DATAFILE\REDO01.LOG
         4 E:\STANDBY\DATAFILE\REDO04.LOG

SQL> select group#,status from v$log;(standby)

    GROUP# STATUS
---------- ----------------
         1 CLEARING
         2 CLEARING_CURRENT
         3 CLEARING

 

SQL> select group#,dbid,thread#,status from v$standby_log; (standby)

    GROUP# DBID                                        THREAD# STATUS
---------- ---------------------------------------- ---------- ----------
         4 UNASSIGNED                                        0 UNASSIGNED

shutdown immediate;(standby)
startup ;(standby)

 

SQL> alter system switch logfile;(primary)

系统已更改。
SQL> select name,creator,applied from v$archived_log;(standby)
E:\STANDBY\ARCHIVE\ARC00038_0701872237.001                  ARCH    NO

已选择37行。

 


添加standby log file后 归档位置为 standby 的 log_archive_dest_1,表示到了本地归档位置, 表示STANDBY的 RFS进程将redo(来自primary)写入standby log file,再有standby 的arcn进程 归档到本地位置
,如果没有standby logfile那么将 RFS进程 直接写入standby_archive_dest

从standby的alert.log可以看到上面的过程
standby 的alert.log信息

Fri Nov 06 10:50:17 2009
RFS[1]: Allowing overwrite of partial archivelog for thread 1 sequence 42
RFS[1]: Archived Log: 'E:\STANDBY\ARCHIVE2\ARC00042_0701872237.001'~~~~~~~~没有standby log file时候

...................................
Sun Nov 08 13:01:12 2009
RFS[1]: Successfully opened standby log 4: 'E:\STANDBY\DATAFILE\REDO04.LOG'~~~~~有standby log file时

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12020513/viewspace-619713/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12020513/viewspace-619713/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值