Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5439299
  • 博文数量: 348
  • 博客积分: 2173
  • 博客等级: 上尉
  • 技术积分: 7900
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-24 17:26
个人简介

雄关漫道真如铁,而今迈步从头越。

文章存档

2022年(4)

2020年(6)

2019年(2)

2018年(2)

2017年(34)

2016年(49)

2015年(53)

2014年(47)

2013年(72)

2012年(79)

分类: AIX

2013-09-20 08:50:48

本文介绍了在生产环境下如何对一张大约存储了5亿条数据的24小时表进行清理的详细实施步骤和方法论。
一、在线全备CCBUABCD数据,争取最大化对外运营时间
db2 "export to CCBUABCD.del of del select * from CCBUABCD  with ur"
二、通知应用工程师去掉程序可执行权限(申请对外停止业务10分钟)
三、数据清理与表结构变更
1、在线备份保留CCBUABCD数据
db2 "export to CCBUABCD.del of del select * from CCBUABCD where substr(cmevh_key,1,8) > '201309' with ur"
2、备份表结构
db2look -d cbusdb -e -t CCBUABCD -o CCBUABCD.sql
3、创建备表
db2 -tvf createtb.sql
createtb.sql内容:

点击(此处)折叠或打开

  1. CREATE TABLE "DB2INST1"."CCBUABCD_BAK" (
  2.                   "CMEVH_LL" SMALLINT NOT NULL WITH DEFAULT 0 ,
  3.                   "CMEVH_KEY" CHAR(27) NOT NULL WITH DEFAULT ' ' ,
  4.                   "CMEVH_DB_TIMESTAMP" DECIMAL(15,0) NOT NULL WITH DEFAULT 0 ,
  5.                   "CM_PROC_TLR_NO" CHAR(12) NOT NULL WITH DEFAULT ' ' ,
  6.                   "CM_CHANNEL_FLAG" CHAR(2) NOT NULL WITH DEFAULT ' ' ,
  7.                   "CM_TX_TYP" CHAR(1) NOT NULL WITH DEFAULT ' ' ,
  8.                   "CM_EC_FLG" CHAR(1) NOT NULL WITH DEFAULT ' ' ,
  9.                   "CM_EC_LOG_NO" CHAR(19) NOT NULL WITH DEFAULT ' ' ,
  10.                   "CM_AR_LOG_NO" CHAR(19) NOT NULL WITH DEFAULT ' ' ,
  11.                   "CM_TX_ID" CHAR(9) NOT NULL WITH DEFAULT ' ' ,
  12.                   "CM_DRAWEE_NAME" CHAR(60) NOT NULL WITH DEFAULT ' ' ,
  13.                   "CM_DRAWEE_ACCT_NO" CHAR(28) NOT NULL WITH DEFAULT ' ' ,
  14.                   "CM_DRAWEE_ACCT_TYP" CHAR(1) NOT NULL WITH DEFAULT ' ' ,
  15.                   "CM_DRAWEE_BK_NO" CHAR(12) NOT NULL WITH DEFAULT ' ' ,
  16.                   "CM_PAYEE_NAME" CHAR(60) NOT NULL WITH DEFAULT ' ' ,
  17.                   "CM_PAYEE_ACCT_NO" CHAR(28) NOT NULL WITH DEFAULT ' ' ,
  18.                   "CM_PAYEE_ACCT_TYP" CHAR(1) NOT NULL WITH DEFAULT ' ' ,
  19.                   "CM_PAYEE_BK_NO" CHAR(12) NOT NULL WITH DEFAULT ' ' ,
  20.                   "CM_TX_AMT1" DECIMAL(15,2) NOT NULL WITH DEFAULT 0 ,
  21.                   "CM_SVC" DECIMAL(15,2) NOT NULL WITH DEFAULT 0 ,
  22.                   "CM_PSTG_EXP" DECIMAL(15,2) NOT NULL WITH DEFAULT 0 ,
  23.                   "CM_TERM_LOG_NO" CHAR(19) NOT NULL WITH DEFAULT ' ' ,
  24.                   "CM_PRINT_CNT" CHAR(2) NOT NULL WITH DEFAULT ' ' ,
  25.                   "CM_PROC_TM" CHAR(6) NOT NULL WITH DEFAULT ' ' ,
  26.                   "CM_REQ_DT" CHAR(8) NOT NULL WITH DEFAULT ' ' ,
  27.                   "CM_PRINT_DT" CHAR(8) NOT NULL WITH DEFAULT ' ' ,
  28.                   "CM_PRINT_TM" CHAR(6) NOT NULL WITH DEFAULT ' ' ,
  29.                   "CM_OPR_ID" CHAR(12) NOT NULL WITH DEFAULT ' ' ,
  30.                   "CM_SPV_ID" CHAR(12) NOT NULL WITH DEFAULT ' ' ,
  31.                   "CM_DSCRP" CHAR(120) NOT NULL WITH DEFAULT ' ' ,
  32.                   "CM_FILLER" CHAR(30) NOT NULL WITH DEFAULT ' ' ,
  33.                   "BCMEVHY1X" CHAR(39) GENERATED ALWAYS AS (CM_CHANNEL_FLAG||CM_DRAWEE_ACCT_TYP||SUBSTR(CM_DRAWEE_BK_NO,1,9)||CMEVH_KEY) ,
  34.                   "BCMEVHY2X" CHAR(39) GENERATED ALWAYS AS (CM_CHANNEL_FLAG||CM_PAYEE_ACCT_TYP||SUBSTR(CM_PAYEE_BK_NO,1,9)||CMEVH_KEY) ,
  35.                   "BCMEVHY3X" CHAR(57) GENERATED ALWAYS AS (CM_CHANNEL_FLAG||CM_DRAWEE_ACCT_NO||CMEVH_KEY) ,
  36.                   "BCMEVHY4X" CHAR(57) GENERATED ALWAYS AS (CM_CHANNEL_FLAG||CM_PAYEE_ACCT_NO||CMEVH_KEY) ,
  37.                   "BCMEVHY5X" CHAR(27) GENERATED ALWAYS AS (SUBSTR(CMEVH_KEY,1,8)||CM_TERM_LOG_NO) ,
  38.                   "BCMEVHY6X" CHAR(27) GENERATED ALWAYS AS (CM_TERM_LOG_NO||CM_REQ_DT) )
  39.                  COMPRESS YES
  40.                  INDEX IN "CBODX01" PARTITION BY RANGE("CM_PROC_TLR_NO")
  41.                  (PART "100" STARTING('100') ENDING('200') EXCLUSIVE IN "CBOD_P_100",
  42.                  PART "200" STARTING('200') ENDING('300') EXCLUSIVE IN "CBOD_P_200",
  43.                  PART "300" STARTING('300') ENDING('400') EXCLUSIVE IN "CBOD_P_300",
  44.                  PART "500" STARTING('500') ENDING('600') EXCLUSIVE IN "CBOD_P_500",
  45.                  PART "600" STARTING('600') ENDING('700') EXCLUSIVE IN "CBOD_P_60",
  46.                  PART "800" STARTING('800') ENDING('801') EXCLUSIVE IN "CBOD_P1_800",
  47.                  PART "801" STARTING('801') ENDING('802') EXCLUSIVE IN "CBOD_P1_801",
  48.                  PART "802" STARTING('802') ENDING('803') EXCLUSIVE IN "CBOD_P1_802",
  49.                  PART "803" STARTING('803') ENDING('804') EXCLUSIVE IN "CBOD_P1_803",
  50.                  PART "806" STARTING('806') ENDING('807') EXCLUSIVE IN "CBOD_P_806",
  51.                  PART "808" STARTING('808') ENDING('809') EXCLUSIVE IN "CBOD_P_808",
  52.                  PART "809" STARTING('809') ENDING('810') EXCLUSIVE IN "CBOD_P_809",
  53.                  PART "810" STARTING('810') ENDING('811') EXCLUSIVE IN "CBOD_P_810",
  54.                  PART "811" STARTING('811') ENDING('812') EXCLUSIVE IN "CBOD_P_811",
  55.                  PART "812" STARTING('812') ENDING('813') EXCLUSIVE IN "CBOD_P_812",
  56.                  PART "815" STARTING('815') ENDING('816') EXCLUSIVE IN "CBOD_P_815",
  57.                  PART "816" STARTING('816') ENDING('817') EXCLUSIVE IN "CBOD_P_816",
  58.                  PART "817" STARTING('817') ENDING('818') EXCLUSIVE IN "CBOD_P_817",
  59.                  PART "818" STARTING('818') ENDING('819') EXCLUSIVE IN "CBOD_P_818",
  60.                  PART "820" STARTING('820') ENDING('821') EXCLUSIVE IN "CBOD_P_820");
  61. ALTER TABLE "DB2INST1"."CCBUABCD_BAK" VOLATILE CARDINALITY;
  62. COMMIT WORK;
  63. CONNECT RESET;
  64. TERMINATE;
4、将保留数据备份到备表
db2 -tvf restore.sql
restore.sql内容如下所示:

点击(此处)折叠或打开

  1. insert into CCBUABCD_bak (
  2. CMEVH_LL,
  3. CMEVH_KEY,
  4. CMEVH_DB_TIMESTAMP,
  5. CM_PROC_TLR_NO,
  6. CM_CHANNEL_FLAG,
  7. CM_TX_TYP,
  8. CM_EC_FLG,
  9. CM_EC_LOG_NO,
  10. CM_AR_LOG_NO,
  11. CM_TX_ID,
  12. CM_DRAWEE_NAME,
  13. CM_DRAWEE_ACCT_NO,
  14. CM_DRAWEE_ACCT_TYP,
  15. CM_DRAWEE_BK_NO,
  16. CM_PAYEE_NAME,
  17. CM_PAYEE_ACCT_NO,
  18. CM_PAYEE_ACCT_TYP,
  19. CM_PAYEE_BK_NO,
  20. CM_TX_AMT1,
  21. CM_SVC,
  22. CM_PSTG_EXP,
  23. CM_TERM_LOG_NO,
  24. CM_PRINT_CNT,
  25. CM_PROC_TM,
  26. CM_REQ_DT,
  27. CM_PRINT_DT,
  28. CM_PRINT_TM,
  29. CM_OPR_ID,
  30. CM_SPV_ID,
  31. CM_DSCRP,
  32. CM_FILLER
  33. ) select
  34. CMEVH_LL,
  35. CMEVH_KEY,
  36. CMEVH_DB_TIMESTAMP,
  37. CM_PROC_TLR_NO,
  38. CM_CHANNEL_FLAG,
  39. CM_TX_TYP,
  40. CM_EC_FLG,
  41. CM_EC_LOG_NO,
  42. CM_AR_LOG_NO,
  43. CM_TX_ID,
  44. CM_DRAWEE_NAME,
  45. CM_DRAWEE_ACCT_NO,
  46. CM_DRAWEE_ACCT_TYP,
  47. CM_DRAWEE_BK_NO,
  48. CM_PAYEE_NAME,
  49. CM_PAYEE_ACCT_NO,
  50. CM_PAYEE_ACCT_TYP,
  51. CM_PAYEE_BK_NO,
  52. CM_TX_AMT1,
  53. CM_SVC,
  54. CM_PSTG_EXP,
  55. CM_TERM_LOG_NO,
  56. CM_PRINT_CNT,
  57. CM_PROC_TM,
  58. CM_REQ_DT,
  59. CM_PRINT_DT,
  60. CM_PRINT_TM,
  61. CM_OPR_ID,
  62. CM_SPV_ID,
  63. CM_DSCRP,
  64. CM_FILLER
  65.  from CCBUABCD where substr(cmevh_key,1,8) > '201309';
5、验证备表数据与原表中需要保留的数据的数量是否一致
db2 "select count(*) from CCBUABCD_bak"
db2 "select count(*) from CCBUABCD where substr(cmevh_key,1,8) > '201309'
6、删除原表
db2 "drop table CCBUABCD"
7、新建CCBUABCD表
   db2 -stvf newtab.sql
   newtab.sql内容如下所示:
 

点击(此处)折叠或打开

  1. CREATE TABLE DB2INST1.CCBUABCD
  2. (
  3.   CMEVH_LL smallint not null default 0,
  4.   CMEVH_KEY char(27) not null default ' ',
  5.   CMEVH_DB_TIMESTAMP decimal(15) not null default 0,
  6.   CM_PROC_TLR_NO char(12) not null default ' ',
  7.   CM_CHANNEL_FLAG char(2) not null default ' ',
  8.   CM_TX_TYP char(1) not null default ' ',
  9.   CM_EC_FLG char(1) not null default ' ',
  10.   CM_EC_LOG_NO char(19) not null default ' ',
  11.   CM_AR_LOG_NO char(19) not null default ' ',
  12.   CM_TX_ID char(9) not null default ' ',
  13.   CM_DRAWEE_NAME char(60) not null default ' ',
  14.   CM_DRAWEE_ACCT_NO char(28) not null default ' ',
  15.   CM_DRAWEE_ACCT_TYP char(1) not null default ' ',
  16.   CM_DRAWEE_BK_NO char(12) not null default ' ',
  17.   CM_PAYEE_NAME char(60) not null default ' ',
  18.   CM_PAYEE_ACCT_NO char(28) not null default ' ',
  19.   CM_PAYEE_ACCT_TYP char(1) not null default ' ',
  20.   CM_PAYEE_BK_NO char(12) not null default ' ',
  21.   CM_TX_AMT1 decimal(15,2) not null default 0,
  22.   CM_SVC decimal(15,2) not null default 0,
  23.   CM_PSTG_EXP decimal(15,2) not null default 0,
  24.   CM_TERM_LOG_NO char(19) not null default ' ',
  25.   CM_PRINT_CNT char(2) not null default ' ',
  26.   CM_PROC_TM char(6) not null default ' ',
  27.   CM_REQ_DT char(8) not null default ' ',
  28.   CM_PRINT_DT char(8) not null default ' ',
  29.   CM_PRINT_TM char(6) not null default ' ',
  30.   CM_OPR_ID char(12) not null default ' ',
  31.   CM_SPV_ID char(12) not null default ' ',
  32.   CM_DSCRP char(120) not null default ' ',
  33.   CM_TX_MODE char(1) not null default ' ',
  34.   CM_EXTER_SYS_DT char(8) not null default ' ',
  35.   CM_EXTER_SYS_ID char(4) not null default ' ',
  36.   CM_EXTER_SUB_SYS_ID char(4) not null default ' ',
  37.   CM_FILLER char(30) not null default ' ',
  38.   BCMEVHY1X CHAR(45) generated always as (CM_CHANNEL_FLAG||CM_DRAWEE_ACCT_TYP||SUBSTR(CM_DRAWEE_BK_NO,1,9)||SUBSTR(CMEVH_KEY,1,8)||CM_PROC_TM||SUBSTR(CMEVH_KEY,9,19)),
  39.   BCMEVHY2X CHAR(45) generated always as (CM_CHANNEL_FLAG||CM_PAYEE_ACCT_TYP||SUBSTR(CM_PAYEE_BK_NO,1,9)||SUBSTR(CMEVH_KEY,1,8)||CM_PROC_TM||SUBSTR(CMEVH_KEY,9,19)),
  40.   BCMEVHY3X CHAR(63) generated always as (CM_CHANNEL_FLAG||CM_DRAWEE_ACCT_NO||SUBSTR(CMEVH_KEY,1,8)||CM_PROC_TM||SUBSTR(CMEVH_KEY,9,19)),
  41.   BCMEVHY4X CHAR(63) generated always as (CM_CHANNEL_FLAG||CM_PAYEE_ACCT_NO||SUBSTR(CMEVH_KEY,1,8)||CM_PROC_TM||SUBSTR(CMEVH_KEY,9,19)),
  42.   BCMEVHY5X CHAR(27) generated always as (SUBSTR(CMEVH_KEY,1,8)||CM_TERM_LOG_NO),
  43.   BCMEVHY6X CHAR(27) generated always as (CM_TERM_LOG_NO||CM_REQ_DT),
  44.   BCMEVHY7X CHAR(43) generated always as (CM_EXTER_SYS_ID||CM_EXTER_SUB_SYS_ID||CM_EXTER_SYS_DT||CMEVH_KEY),
  45.   BCMEVHY8X CHAR(39) generated always as (CM_EXTER_SYS_ID||CM_EXTER_SYS_DT||CMEVH_KEY),
  46.   BCMEVHY9X CHAR(37) generated always as (CM_CHANNEL_FLAG||CM_EXTER_SYS_DT||CMEVH_KEY),
  47.   BCMEVHYAX CHAR(35) generated always as (CM_EXTER_SYS_ID||CM_EXTER_SUB_SYS_ID||CMEVH_KEY),
  48.   BCMEVHYBX CHAR(29) generated always as (CM_CHANNEL_FLAG||CMEVH_KEY),
  49.   BCMEVHYCX CHAR(27) generated always as (CM_EXTER_SYS_DT||CM_TERM_LOG_NO),
  50.   BCMEVHYDX CHAR(45) generated always as (CM_EXTER_SYS_ID||CM_EXTER_SUB_SYS_ID||CM_CHANNEL_FLAG||CM_EXTER_SYS_DT||CMEVH_KEY)
  51. ) compress yes INDEX IN "CBODPX01" PARTITION BY RANGE("CM_PROC_TLR_NO")
  52.                (PART "100" STARTING('100') ENDING('200') EXCLUSIVE IN "CBOD_P_100",
  53.                  PART "200" STARTING('200') ENDING('300') EXCLUSIVE IN "CBOD_P_200",
  54.                  PART "300" STARTING('300') ENDING('400') EXCLUSIVE IN "CBOD_P_300",
  55.                  PART "500" STARTING('500') ENDING('600') EXCLUSIVE IN "CBOD_P_500",
  56.                  PART "600" STARTING('600') ENDING('700') EXCLUSIVE IN "CBOD_P_60",
  57.                  PART "800" STARTING('800') ENDING('801') EXCLUSIVE IN "CBOD_P1_800",
  58.                  PART "801" STARTING('801') ENDING('802') EXCLUSIVE IN "CBOD_P1_801",
  59.                  PART "802" STARTING('802') ENDING('803') EXCLUSIVE IN "CBOD_P1_802",
  60.                  PART "803" STARTING('803') ENDING('804') EXCLUSIVE IN "CBOD_P1_803",
  61.                  PART "806" STARTING('806') ENDING('807') EXCLUSIVE IN "CBOD_P_806",
  62.                  PART "808" STARTING('808') ENDING('809') EXCLUSIVE IN "CBOD_P_808",
  63.                  PART "809" STARTING('809') ENDING('810') EXCLUSIVE IN "CBOD_P_809",
  64.                  PART "810" STARTING('810') ENDING('811') EXCLUSIVE IN "CBOD_P_810",
  65.                  PART "811" STARTING('811') ENDING('812') EXCLUSIVE IN "CBOD_P_811",
  66.                  PART "812" STARTING('812') ENDING('813') EXCLUSIVE IN "CBOD_P_812",
  67.                  PART "815" STARTING('815') ENDING('816') EXCLUSIVE IN "CBOD_P_815",
  68.                  PART "816" STARTING('816') ENDING('817') EXCLUSIVE IN "CBOD_P_816",
  69.                  PART "817" STARTING('817') ENDING('818') EXCLUSIVE IN "CBOD_P_817",
  70.                  PART "818" STARTING('818') ENDING('819') EXCLUSIVE IN "CBOD_P_818",
  71.                  PART "820" STARTING('820') ENDING('821') EXCLUSIVE IN "CBOD_P_820");
8、导入数据
db2 -tvf restorenew.sql
restorenew.sql内容:

点击(此处)折叠或打开

  1. insert into CCBUABCD (
  2. CMEVH_LL,
  3. CMEVH_KEY,
  4. CMEVH_DB_TIMESTAMP,
  5. CM_PROC_TLR_NO,
  6. CM_CHANNEL_FLAG,
  7. CM_TX_TYP,
  8. CM_EC_FLG,
  9. CM_EC_LOG_NO,
  10. CM_AR_LOG_NO,
  11. CM_TX_ID,
  12. CM_DRAWEE_NAME,
  13. CM_DRAWEE_ACCT_NO,
  14. CM_DRAWEE_ACCT_TYP,
  15. CM_DRAWEE_BK_NO,
  16. CM_PAYEE_NAME,
  17. CM_PAYEE_ACCT_NO,
  18. CM_PAYEE_ACCT_TYP,
  19. CM_PAYEE_BK_NO,
  20. CM_TX_AMT1,
  21. CM_SVC,
  22. CM_PSTG_EXP,
  23. CM_TERM_LOG_NO,
  24. CM_PRINT_CNT,
  25. CM_PROC_TM,
  26. CM_REQ_DT,
  27. CM_PRINT_DT,
  28. CM_PRINT_TM,
  29. CM_OPR_ID,
  30. CM_SPV_ID,
  31. CM_DSCRP,
  32. CM_FILLER
  33. ) select
  34. CMEVH_LL,
  35. CMEVH_KEY,
  36. CMEVH_DB_TIMESTAMP,
  37. CM_PROC_TLR_NO,
  38. CM_CHANNEL_FLAG,
  39. CM_TX_TYP,
  40. CM_EC_FLG,
  41. CM_EC_LOG_NO,
  42. CM_AR_LOG_NO,
  43. CM_TX_ID,
  44. CM_DRAWEE_NAME,
  45. CM_DRAWEE_ACCT_NO,
  46. CM_DRAWEE_ACCT_TYP,
  47. CM_DRAWEE_BK_NO,
  48. CM_PAYEE_NAME,
  49. CM_PAYEE_ACCT_NO,
  50. CM_PAYEE_ACCT_TYP,
  51. CM_PAYEE_BK_NO,
  52. CM_TX_AMT1,
  53. CM_SVC,
  54. CM_PSTG_EXP,
  55. CM_TERM_LOG_NO,
  56. CM_PRINT_CNT,
  57. CM_PROC_TM,
  58. CM_REQ_DT,
  59. CM_PRINT_DT,
  60. CM_PRINT_TM,
  61. CM_OPR_ID,
  62. CM_SPV_ID,
  63. CM_DSCRP,
  64. CM_FILLER
  65.  from CCBUABCD_BAK;
  66. 9、添加索引、主键等
  67. db2 -tvf createidx.idx
  68. createidx.idx内容如下:
  69. ALTER TABLE DB2INST1.CCBUABCD VOLATILE CARDINALITY;
  70. alter table DB2INST1.CCBUABCD
  71.    add primary key (CMEVH_KEY);
  72. CREATE INDEX DB2INST1.BCMEVHY1
  73.       ON DB2INST1.CCBUABCD(BCMEVHY1X);
  74. CREATE INDEX DB2INST1.BCMEVHY2
  75.       ON DB2INST1.CCBUABCD(BCMEVHY2X);
  76. CREATE INDEX DB2INST1.BCMEVHY3
  77.       ON DB2INST1.CCBUABCD(BCMEVHY3X);
  78. CREATE INDEX DB2INST1.BCMEVHY4
  79.       ON DB2INST1.CCBUABCD(BCMEVHY4X);
  80. CREATE INDEX DB2INST1.BCMEVHY5
  81.       ON DB2INST1.CCBUABCD(BCMEVHY5X);
  82. CREATE INDEX DB2INST1.BCMEVHY6
  83.       ON DB2INST1.CCBUABCD(BCMEVHY6X);
  84. CREATE INDEX DB2INST1.BCMEVHY7
  85.       ON DB2INST1.CCBUABCD(BCMEVHY7X);
  86. CREATE INDEX DB2INST1.BCMEVHY8
  87.       ON DB2INST1.CCBUABCD(BCMEVHY8X);
  88. CREATE INDEX DB2INST1.BCMEVHY9
  89.       ON DB2INST1.CCBUABCD(BCMEVHY9X);
  90. CREATE INDEX DB2INST1.BCMEVHYA
  91.       ON DB2INST1.CCBUABCD(BCMEVHYAX);
  92. CREATE INDEX DB2INST1.BCMEVHYB
  93.       ON DB2INST1.CCBUABCD(BCMEVHYBX);
  94. CREATE INDEX DB2INST1.BCMEVHYC
  95.       ON DB2INST1.CCBUABCD(BCMEVHYCX);
  96. CREATE INDEX DB2INST1.BCMEVHYD
  97.       ON DB2INST1.CCBUABCD(BCMEVHYDX);
10、授权
db2 "grant select on CCBUABCD to user db2look"
db2 "grant select,insert,update,delete on CCBUABCD to user db2upt"
11、重组优化
db2 "reorg table DB2INST1.CCBUABCD use cbodtmp resetdictionary"
db2 "runstats on table DB2INST1.CCBUABCD with distribution and detailed indexes all"
13、备份到带库
dsmc archive /dbtmp/crj/20130925/ -subdir=yes
三、通知应用工程师执行如下操作:
1、恢复程序执行权限
2、程序绑定


阅读(4971) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~