手动回滚Symantec AntiVirus服务器病毒定义文件

本文提供了解决Symantec服务器端服务无法启动且出现CC001000错误的方法。包括停止相关服务、调整病毒定义文件夹设置等步骤。

Symantec 服务器端服务无法启动,事件日志提示CC001000错误:

http://service1.symantec.com/SUPPORT/ent-security.nsf/ppfdocs/2001121416223748?Open&dtype=corp&src=&seg=&om=1&om_out=prod

原文地址:

http://www.symantec.com/business/support/index?page=content&id=TECH100019&locale=en_US

To stop all Symantec services that use virus definitions

  1. 停止以下Symantec服务:DefwatchSymantec AntiVirus核心服务。
  2. /Program Files/Common Files/Symantec Shared/VirusDefs找到”Usage.dat”文件。
  3. 打开Usage.dat文件,如果存在类似于”Qsadmin”字样,请停止Symantec Central Quarantine, Symantec Quarantine Agent, and Symantec Quarantine Scanner服务。

To remove the most recent virus definition folder

  1. 打开/Program Files/Common Files/Symantec Shared/VirusDefs目录。
  2. 确认包含以下目录结构,如果以下目录结构不存在,请联系Symantec:
    • Incoming (folder)
    • BinHub (folder)
    • TextHub (folder)
    • Definfo.dat (file)
    • Usage.dat (file)
    • 至少两个以上的,以发布日期命名的病毒定义文件夹。
  3. 打开”Definfo.dat”文件,此文件应该包含以下内容:
    [DefDates]
    CurDefs=20021016.002
    LastDefs=20021010.002
  4. 更改CurDefs值与LastDefs保持一致,如下样例,然后保存:
    [DefDates]
    CurDefs=20021010.002
    LastDefs=20021010.002
  5. 移除Definfo.datUsage.dat中未引用到的病毒定义文件夹。
  6. 打开”Usage.dat”文件,确认里面[ ]中的内容与刚才Definfo.dat里的"CurDefs"相匹配,样例如下,修改后保存Usage.dat文件:
    [20021016.002]
    DEFWATCH_10=1
    NAVCORP_70=1
  7. (非标准步骤,可跳过)删除/Program Files/SAV/I2_LDVP.VDB目录里面所有内容。
  8. (非标准步骤)删除/Program Files/SAV/目录里所有*.tmp*.VDB*.XDB文件。
  9. (非标准步骤)删除/All Users/Application Data/Symantec/LiveUpdate/Downloads里所有文件
  10. 重新启动所有之前停止的Symantec服务。
### DSTransactional 手动回滚的实现方式与问题解决 在使用 DSTransactional 时,如果需要手动回滚事务,可以借助 Spring 提供的 `TransactionAspectSupport` 类完成操作。以下是具体实现方式和相关问题的解决方案。 #### 手动回滚的实现 当方法中捕获异常后,`@DSTransactional` 注解默认不会触发回滚逻辑[^3]。此时可以通过调用 `TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()` 方法显式标记当前事务为回滚状态。 ```java @DSTransactional public void manualRollbackOperation() { try { // 数据库操作代码 if (someCondition) { throw new CustomException("An error occurred during the operation."); } } catch (CustomException e) { // 手动标记事务为回滚状态 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); log.error("Manual rollback triggered due to exception: {}", e.getMessage()); } } ``` 上述代码中,`TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()` 的调用确保了即使异常被捕获,事务仍会被正确回滚。 #### 解决事务不回滚的问题 1. **未抛出异常**:如果异常被捕获且未重新抛出,则 Spring 框架无法感知异常的发生,从而不会触发回滚逻辑[^4]。确保在必要时将异常重新抛出。 ```java @DSTransactional public void rethrowExceptionOperation() throws CustomException { try { // 数据库操作代码 if (someCondition) { throw new CustomException("An error occurred during the operation."); } } catch (CustomException e) { log.error("Error occurred: {}", e.getMessage()); throw e; // 重新抛出异常以触发回滚 } } ``` 2. **未正确配置回滚规则**:默认情况下,Spring 的事务管理器只会在 `RuntimeException` 或 `Error` 抛出时触发回滚。如果希望捕获其他类型的异常(如普通 `Exception`),需要明确指定 `rollbackFor` 属性[^4]。 ```java @DSTransactional(rollbackFor = Exception.class) public void configureRollbackRuleOperation() { // 数据库操作代码 if (someCondition) { throw new CustomException("An error occurred during the operation."); } } ``` 3. **嵌套事务传播问题**:在某些场景下,可能需要使用嵌套事务来确保部分操作的独立性。通过设置 `propagation = Propagation.REQUIRES_NEW`,可以创建一个新的独立事务[^3]。 ```java @DSTransactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public void nestedTransactionOperation() { // 独立的数据库操作 } ``` #### 示例代码:结合手动回滚与异常处理 以下是一个完整的示例,展示了如何结合手动回滚与异常处理: ```java @DSTransactional public void complexDatabaseOperation() { try { // 数据库操作代码 if (someCondition) { throw new CustomException("An error occurred during the operation."); } } catch (CustomException e) { // 手动标记事务为回滚状态 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); log.error("Manual rollback triggered due to exception: {}", e.getMessage()); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值