rebuild index partition online和非online的区别

这里并不介绍rebuild index online和非online的区别,有需要了解请参考其它文档,这是我们实际生产环境出现的一次故障,上线之前我们测试环境直接rebuild,而生产环境我们使用了rebuild online,而触发这次故障的原因还有一个条件是我们的表的统计信息是锁定的,所以如果您有类似的操作(rebuild online一个统计信息锁定表的local索引),千万小心索引的统计信息会丢失,而我们之所以锁定表统计信息因为我们不希望改变这个表的统计信息。

下面是我们故障后分析问题的实验:


step1:创建测试分区表和索引:

  CREATE TABLE cuichenglei001.test_partition_tab1

   ( "ASSIGNED_TASK_ID" NUMBER(20,0) CONSTRAINT "NN_ASSIGNEDTASK_TASKID" NOT NULL DISABLE,

         "UM_ID" VARCHAR2(100),

         "ASSIGNED_ORG_ID" VARCHAR2(10),

         "TASK_STATUS_CODE" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_TASKSC" NOT NULL DISABLE,

         "TASK_TYPE_CODE" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_TASKTPC" NOT NULL DISABLE,

         "TASK_PRIORITY_CODE" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_PRIOC" NOT NULL DISABLE,

         "DELIVERY_STATUS_CODE" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_DELIVERSC" NOT NULL DISABLE,

         "TASK_REASSIGN_STATUS_CODE" VARCHAR2(2),

         "TASK_APPOINT_TIME" DATE CONSTRAINT "NN_ASSIGNEDTASK_APPOINT" NOT NULL DISABLE,

         "TASK_APPOINT_COMMENTS" VARCHAR2(500),

         "BATCH_ID" VARCHAR2(20) CONSTRAINT "NN_ASSIGNEDTASK_BATCH" NOT NULL DISABLE,

         "TASK_ASSIGNED_TIME" DATE,

         "TASK_FIRST_DIAL_TIME" DATE,

         "LAST_CONTACT_TIME" DATE,

         "TELESALE_PRIRESULT_CODE" VARCHAR2(2),

         "LATEST_TELRESULT_CONTACTHIS_ID" VARCHAR2(20),

         "IS_EMPHASIS_REMIND" VARCHAR2(1) CONSTRAINT "NN_ASSIGNEDTASK_ISEMPH" NOT NULL DISABLE,

         "LATEST_TASK_CONTACT_HISTORY_ID" VARCHAR2(20),

         "LATEST_TASK_SYSTEM_HISTORY_ID" VARCHAR2(20),

         "RECLAIM_STATUS" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_RECSTAT" NOT NULL DISABLE,

         "RECLAIM_PRIORITY_CODE" VARCHAR2(2) CONSTRAINT "NN_ASSIGNEDTASK_RECPRI" NOT NULL DISABLE,

         "IS_CONTACTED" VARCHAR2(1) CONSTRAINT "NN_ASSIGNEDTASK_ISCONTACT" NOT NULL DISABLE,

         "IS_FOLLOWED_UP" VARCHAR2(1),

         "STATUS_CHANGED_TIME" DATE,

         "ONLINE_SUBMITTED_BY" VARCHAR2(100),

         "ONLINE_SUBMITTED_DATE" DATE,

         "RECLAIMED_TIME" DATE,

         "CREATED_BY" VARCHAR2(100) CONSTRAINT "NN_ASSIGNEDTASK_CREATEDBY" NOT NULL DISABLE,

         "CREATED_DATE" DATE CONSTRAINT "NN_ASSIGNEDTASK_CREATEDT" NOT NULL DISABLE,

         "UPDATED_BY" VARCHAR2(100) CONSTRAINT "NN_ASSIGNEDTASK_UPDATEBY" NOT NULL DISABLE,

         "UPDATED_DATE" DATE CONSTRAINT "NN_ASSIGNEDTASK_UPDATEDT" NOT NULL DISABLE,

         "SHIELD_FLAG" VARCHAR2(1),

         "TASK_FIRST_DIALED_BY" VARCHAR2(100),

          CONSTRAINT "PK_ASSIGNED_TASK_ID" PRIMARY KEY ("ASSIGNED_TASK_ID")  USING INDEX  TABLESPACE "PAUSERS"  ENABLE)

  TABLESPACE "TMRLIFEDATA"

  PARTITION BY LIST ("RECLAIM_STATUS")

 (PARTITION "PT_ASSITASK_RECSTAT_ACTIVE"  VALUES ('01')

  PCTFREE 20 PCTUSED 40 INITRANS 1 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "PAUSERS" NOCOMPRESS ,

 PARTITION "PT_ASSITASK_RECSTAT_RECLAIM"  VALUES (DEFAULT)

  PCTFREE 20 PCTUSED 40 INITRANS 1 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "PAUSERS" NOCOMPRESS )  ENABLE ROW MOVEMENT;

 

  CREATE INDEX cuichenglei001."IX_ASSIGNED_TASK_BATCHID" ON cuichenglei001.test_partition_tab1("BATCH_ID")

  PCTFREE 10 INITRANS 2 MAXTRANS 255

  STORAGE(

  BUFFER_POOL DEFAULT) LOCAL

 (PARTITION "PT_ASSITASK_RECSTAT_ACTIVE"

  PCTFREE 10 INITRANS 2 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "PAUSERS" ,

 PARTITION "PT_ASSITASK_RECSTAT_RECLAIM"

  PCTFREE 10 INITRANS 2 MAXTRANS 255

  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

  TABLESPACE "PAUSERS" );

 

 

 

SQL> select owner,index_name,table_name, num_rows,LAST_ANALYZED,PARTITIONED,status,global_stats from dba_indexes where index_name='IX_ASSIGNED_TASK_BATCHID'  ;

OWNER           INDEX_NAME                     TABLE_NAME                       NUM_ROWS LAST_ANALYZED PARTITIONED STATUS   GLOBAL_STATS

--------------- ------------------------------ ------------------------------ ---------- ------------- ----------- -------- ------------

CUICHENGLEI001  IX_ASSIGNED_TASK_BATCHID       TEST_PARTITION_TAB1                                     YES         N/A      NO

TMRLIFEDATA     IX_ASSIGNED_TASK_BATCHID       NTL_ASSIGNED_TASK                63282319 2011-2-24 0:2 YES         N/A      YES

 

SQL> select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

 

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------- ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                            NO

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE                            NO

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                            YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:2 YES

 

 

exec dbms_stats.gather_table_stats(ownname => 'CUICHENGLEI001',tabname => 'TEST_PARTITION_TAB1',cascade => TRUE,force => true)

 

check again:

SQL>  select owner,index_name,table_name, num_rows,LAST_ANALYZED,PARTITIONED,status,global_stats from dba_indexes where index_name='IX_ASSIGNED_TASK_BATCHID'  ;

 

OWNER           INDEX_NAME                     TABLE_NAME                       NUM_ROWS LAST_ANALYZED PARTITIONED STATUS   GLOBAL_STATS

--------------- ------------------------------ ------------------------------ ---------- ------------- ----------- -------- ------------

CUICHENGLEI001  IX_ASSIGNED_TASK_BATCHID       TEST_PARTITION_TAB1                     0 2011-3-3 15:4 YES         N/A      YES

TMRLIFEDATA     IX_ASSIGNED_TASK_BATCHID       NTL_ASSIGNED_TASK                63282319 2011-2-24 0:2 YES         N/A      YES

 

SQL>

SQL> select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

 

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------- ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE            0 2011-3-3 15:4 YES

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE            0 2011-3-3 15:4 YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                            YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:2 YES

 

 

收集完统计信息,global_stats became to yes from no

 

step2:下面测试表明在tableindex在统计信息未被locked情况下,rebuild rebuild online的结果相同,都自动重新收集了index partition的统计信息:

SQL>  exec dbms_stats.gather_table_stats(ownname => 'CUICHENGLEI001',tabname => 'TEST_PARTITION_TAB1',cascade => TRUE)

 

SQL>  alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_ACTIVE;

Index altered

 

SQL>  alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_RECLAIM;

Index altered

 

 

SQL> select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------------------------ ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE           99 2011-3-3 16:06:28              YES

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE            0 2011-3-3 16:06:38              YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                                             YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:27:01              YES

 

SQL> alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_ACTIVE online;

Index altered

 

SQL>  alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_RECLAIM online;

Index altered

 

SQL>  select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------------------------ ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE           99 2011-3-3 16:09:06              YES

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE            0 2011-3-3 16:09:14              YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                                             YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:27:01              YES

 

 

 

lock table and index stats:

SQL> exec dbms_stats.lock_table_stats('CUICHENGLEI001','TEST_PARTITION_TAB1');

PL/SQL procedure successfully completed

 

 

SQL> select owner,table_name,index_name,PARTITION_NAME,NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,STATTYPE_LOCKED from dba_ind_statistics where index_name='IX_ASSIGNED_TASK_BATCHID' ORDER BY owner;

OWNER           TABLE_NAME                     INDEX_NAME                     PARTITION_NAME                   NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS STATTYPE_LOCKED

--------------- ------------------------------ ------------------------------ ------------------------------ ---------- ------------------------------ ------------ ---------------

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID                                              99 2011-3-3 16:16:03              YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE             99 2011-3-3 16:16:03              YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM             0 2011-3-3 16:16:03              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE                                               YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM      46658539 2011-2-24 0:27:01              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID                                        63282319 2011-2-24 0:27:01              YES          ALL

6 rows selected

 

SQL> exec dbms_stats.gather_table_stats(ownname => 'CUICHENGLEI001',tabname => 'TEST_PARTITION_TAB1',cascade => TRUE,force => true)

PL/SQL procedure successfully completed

 

 

step3:下面测试表明在tableindex在统计信息被locked情况下,rebuild rebuild online的结果不同,后者把index partition的统计信息清空了:

SQL> exec dbms_stats.gather_table_stats(ownname => 'CUICHENGLEI001',tabname => 'TEST_PARTITION_TAB1',cascade => TRUE)

begin dbms_stats.gather_table_stats(ownname => 'CUICHENGLEI001',tabname => 'TEST_PARTITION_TAB1',cascade => TRUE); end;

ORA-20005: object statistics are locked (stattype = ALL)

ORA-06512: at "SYS.DBMS_STATS", line 13437

ORA-06512: at "SYS.DBMS_STATS", line 13457

ORA-06512: at line 1

 

SQL>

SQL> alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_ACTIVE;

Index altered

 

SQL> alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_RECLAIM;

Index altered

 

check:

SQL> select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------------------------ ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE           99 2011-3-3 16:24:30              YES

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE            0 2011-3-3 16:24:30              YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                                             YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:27:01              YES

 

SQL>  select owner,table_name,index_name,PARTITION_NAME,NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,STATTYPE_LOCKED from dba_ind_statistics where index_name='IX_ASSIGNED_TASK_BATCHID' ORDER BY owner;

OWNER           TABLE_NAME                     INDEX_NAME                     PARTITION_NAME                   NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS STATTYPE_LOCKED

--------------- ------------------------------ ------------------------------ ------------------------------ ---------- ------------------------------ ------------ ---------------

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID                                              99 2011-3-3 16:24:30              YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE             99 2011-3-3 16:24:30              YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM             0 2011-3-3 16:24:30              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE                                               YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM      46658539 2011-2-24 0:27:01              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID                                        63282319 2011-2-24 0:27:01              YES          ALL

6 rows selected

 

 

SQL> alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_ACTIVE online;

Index altered

 

SQL>  alter index IX_ASSIGNED_TASK_BATCHID rebuild partition PT_ASSITASK_RECSTAT_RECLAIM online;

Index altered

 

SQL> select index_owner,index_name,PARTITION_NAME,STATUS,NUM_ROWS,LAST_ANALYZED,global_stats from dba_ind_partitions where index_name='IX_ASSIGNED_TASK_BATCHID';

INDEX_OWNER                    INDEX_NAME                     PARTITION_NAME                 STATUS     NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS

------------------------------ ------------------------------ ------------------------------ -------- ---------- ------------------------------ ------------

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                                             YES

CUICHENGLEI001                 IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE                                             YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE     USABLE                                             YES

TMRLIFEDATA                    IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM    USABLE     46658539 2011-2-24 0:27:01              YES

 

SQL>

SQL> select owner,table_name,index_name,PARTITION_NAME,NUM_ROWS,LAST_ANALYZED,GLOBAL_STATS,STATTYPE_LOCKED from dba_ind_statistics where index_name='IX_ASSIGNED_TASK_BATCHID' ORDER BY owner;

 

OWNER           TABLE_NAME                     INDEX_NAME                     PARTITION_NAME                   NUM_ROWS LAST_ANALYZED                  GLOBAL_STATS STATTYPE_LOCKED

--------------- ------------------------------ ------------------------------ ------------------------------ ---------- ------------------------------ ------------ ---------------

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID                                              99 2011-3-3 16:24:30              YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE                                               YES          ALL

CUICHENGLEI001  TEST_PARTITION_TAB1            IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM                                              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_ACTIVE                                               YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID       PT_ASSITASK_RECSTAT_RECLAIM      46658539 2011-2-24 0:27:01              YES          ALL

TMRLIFEDATA     NTL_ASSIGNED_TASK              IX_ASSIGNED_TASK_BATCHID                                        63282319 2011-2-24 0:27:01              YES          ALL

6 rows selected

 

 

因此需要在rebuild index(online)操作后增加一个检查确认:相关table/index partition的统计信息状态是否合理。

最后得出如下表格:

 rebuild index lcok tab stat ? statitics values  summary
 rebuild locked  keep current statitics 
分区索引统计信息被清掉因为表的统计信息被锁,同时做了rebuild online的操作,统计信息被锁非online 方式不会清空统计信息  rebuild online  locked  statitics change to null(the same to create new index)    rebuild   unlocked  after rebuild auto gather statitics    rebuild online  unlocked   after rebuild auto gather statitics  

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

转载于:http://blog.itpub.net/15779287/viewspace-690019/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值