2010-02-04 Thu
_allow_resetlogs_corruption= TRUE
在初期恢复时出现了ORA-600 4000号错误,这个错误以前写过几个案例,一般没有好的办法,只能通过bbed修复。
不过4000号错误不一定非要用bbed修改坏块,有时候经过反复几次重新启动数据库,就可以暂时规避,尝试将数据导出。
首先出现的是:
Thu Feb 04 13:36:58 2010
Errors in file D:\oracle\admin\orcl\udump\ORA00592.TRC:
ORA-00600: internal error code, arguments: [4000], [3], [], [], [], [], [], []
SMON: disabling cache recovery
Thu Feb 04 13:36:59 2010
ORA-704 signalled during: alter database open resetlogs
多次重启后,出现4194错误:
Thu Feb 04 21:24:41 2010
SMON: enabling cache recovery
SMON: enabling tx recovery
Thu Feb 04 21:24:42 2010
Completed: alter database open
Thu Feb 04 21:24:43 2010
Errors in file D:\oracle\admin\orcl\bdump\orclSMON.TRC:
ORA-00600: internal error code, arguments: [4194], [14], [4], [], [], [], [], []
Thu Feb 04 21:24:44 2010
Recovery of Online Redo Log: Thread 1 Group 2 Seq 2 Reading mem 0
Mem# 0 errs 0: D:\ORACLE\ORADATA\ORCL\REDO02.LOG
Thu Feb 04 21:24:44 2010
Errors in file D:\oracle\admin\orcl\bdump\orclSMON.TRC:
ORA-01595: error freeing extent (7) of rollback segment (2))
ORA-00600: internal error code, arguments: [4194], [14], [4], [], [], [], [], []
但是数据此时可以导出,4194错误出现在回滚段2上,当然也可以解决,这个都是大家所熟悉的了。
-The End-
相关文章|Related Articles
- ORA-07445 cold_qerfxArrayMaxSize 的Bug
- ORA-600 17285 错误 与 PL/SQL Developer
- 使用errorstack跟踪ORA-01438错误
- ORA-01157 - Mount状态下的文件存在性校验
- 使用DATAPUMP导致ORA-00600 17020错误
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2010/02/ora_600_4000_4194.html
有些东西真是很奇怪,当我对民族音乐和戏曲越来越感兴趣的同时,对流行音乐的兴趣则日渐消退,可它们之间并没有什么矛盾,而且我一直不认为传统音乐和流行音乐有什么高低雅俗之分。
我每年都会关注一下格莱美。我对欧美流行音乐是花过一些工夫的,有一年,为了写一些不三不四的乐评,一年内,我大概听了有五百张欧美流行音乐唱片。那个时候,碧昂丝可能还是处女,还只是天命真女的一员,那个时候她的皮肤好象还没现在这样白,后来她单飞了,出了一张《Dangerously in Love》,再后来就和Jay-Z结了婚。
今年,碧昂丝成为了格莱美最大的赢家。最佳流行女歌手,最佳最佳R&B女歌手,年度最佳流行单曲,R&B单曲,都是她的。Jay-Z也有很多斩获。格莱美对这对夫妻而言,基本没什么新鲜感了。用港台乐坛的话说,拿奖拿到手软。碧昂斯的《Single Ladies》是个奇迹,网络上居然有那么多人在模仿她在MV中的舞蹈,而这首歌本身并没有什么特点。我个人感觉《Single Ladies》中的舞蹈比较适合单身白领女性下班后回到家,衣服一脱对着镜子作自娱自乐锻炼身体之用。
格莱美很少看到新面孔。Taylor Swift前年就不再是新人了,当小甜甜不再,她是美国向全世界输出的又一玉女标准。如果我没有记错的话,小甜甜应该生于1981,虚岁居然也有三十了,恐怖啊。
在本届格莱美的榜单上,我还是看到了一张让人觉得有些新鲜的面孔,但是是老面孔,最佳摇滚乐器演奏获得者,摇滚界的殿堂级的人物Jeff Beck。格莱美似乎有这习惯,每年都会弄出一个老家伙来。今年是摇滚乐的,明年或许是爵士类的,后年或许是乡村乐的。Jeff Beck在《A Day In The Life》的表现确实相当了得,吉他玩到他这份上,真可以叫出神入化了。
本届格莱美颁奖现场最让人惊艳的,是Pink杂技般的天女撒尿,虽没什么大的创意,但还是好看。
没有哪个节日能像春节一样,让数亿中国人踏上洋溢着浓情的返乡路程,也没有哪个时刻能像此刻一样,让小小的手机能够如此派上大用场——巧用谷歌手机服务功能,您可以随时随地得到各种各样的帮助。下面,就和大家一起分享一些谷歌手机服务在春节能够“大显身手”的小贴士吧。
旅行小贴士——票务、资讯、路线,谷歌帮您一网打尽
飞机/火车售票点:无论您在哪个城市,只要打开谷歌手机地图,使用“我的位置”功能对当前位置进行定位,再搜索“飞机票”或“火车票”,就能找到离您最近的航空售票处或火车票代售点。手机地图还可以为您提供售票处的联系方式等信息,让您随时致电售票处进行咨询,甚至能够为您规划前往售票点的驾车、公交或步行线路。


城市天气:不知道目的地的天气情况?谷歌帮您搞定!键入“城市名+天气”,您将在搜索结果中看到该城市当天及未来三天的天气预报。此外,如果您已经为自己设定了当前位置,仅输入“天气”就会立即得到本地的天气情况。


春运资讯:在谷歌资讯(Google News)中键入“城市名+ 春运”或者高速公路名称,例如“沈大高速”或者“惠莞高速”就能得到目的地春运相关的最新资讯,了解某条高速公路的通行状况,根据实时情况,您可以随时调整行车路线,一切都变得简单!


路线规划:只需为您的手机安装免费的谷歌地图,您就能随时随地地轻松规划走亲访友或自驾游的出行线路。


实时路况:开车在路上,最担心的莫过于堵车了吧? 不用再忐忑不安了,谷歌手机地图全面支持北京、上海、南京、深圳、广州、成都、重庆的实时路况信息,轻松辨别哪里畅通,哪里拥堵, 拥有谷歌手机地图,从此出行一路畅通!

卫星地图:返乡途中您是否会想象一下这一年来家乡的变化呢?不用等到抵达目的地,现在就使用谷歌手机地图的“卫星视图”先睹为快、一饱眼福吧!


娱乐贴士——吃喝玩乐,谷歌帮您轻松搞定
拜年短信:春节临近,通过谷歌手机搜索“祝福短信”,各式各样的祝福短信被一网打尽,快去挑选一段独特又喜庆的祝福短信送给您的亲朋好友们吧!选好了吗? 那就直接免费发送到自己的手机吧, 连打字的功夫都省了噢!

餐馆信息:春节长假,约上家人或者三五好友,找个餐馆小聚一番,试试新口味。通过谷歌手机地图,输入餐馆名称,您可以直接搜索餐厅位置和到达路线;或者使用“生活信息-餐馆”功能,查找您周边或特定地点周边的餐馆信息。点击餐馆名称,您就能直接致电订餐啦。之外,您还能够查看人均消费价格、其他食客的推荐菜等信息!


影讯:春节贺岁片谁最火?哪个影院最抢手?使用谷歌手机地图“生活信息-影讯”功能,只需几秒钟,您便可以随时随地查看距离自己最近的影院信息和电影放映时间,赶快试一试吧!


即便没有安装手机地图, 也可以方便的通过登录手机版谷歌搜索来查询电影信息及上映时间噢! 搜索“城市名+电影”, 或者设定当前位置后直接搜索“电影”或影片、影院的名称, 火热大片相关信息立即尽收眼底!


养眼大图:春节来临万象更新,您也许想在过年前换个发型,或者动手插花制造节日气氛,或者在出游前提前欣赏目的地风光,谷歌最新的图片搜索技术可以让搜索结果自适应您的手机屏幕,这样您可以查看每一处细节,获得更多信息,得到更好的浏览体验。

译者注: 本文翻译自Jonathan Lewis的文章Faking Stored Outlines in Oracle 9, 可以从此处下载原文的word版本: Stored Outlines in Oracle 9.
本文与前一篇Oracle 8i/9i中的执行计划稳定性是Jonathan Lewis先生写的关于stored outline具体使用以及其中可能涉及到的风险系列文章,也是我所见到的关于stored outline介绍的最详细的文档了. 关于stored outline还有以下相关资料可以对照阅读下:
Oracle Outlines - aka Plan Stability By Kerry Osborne
Plan stability in 10g - using existing cursors to create Stored Outlines and SQL profiles By Randolf Geist
Stored Outlines and Plan Stability By Tim Hall
Tuning Third-party Vendor Oracle Systems :Tuning when you can’t touch the code By Mark Ault
在Oracle 9中伪造存储概要
在前面的文章中,我讨论到存储概要,并且描述了一种通过滥用系统来生成你所需要存储概要的方法.我同时也指出,在Oracle 9中使用这种方法存在一些风险,因为存储在数据库中的细节信息已经变得非常复杂.在接下来的文章中,我将介绍一种合法的操作存储概要的方法,这种方法可以应用在Oracle 8与Oracle 9中.这篇文章的细节都是基于实验得出的,实验环境是Oracle 8.1.7.0与Oracle 9.2.0.1的默认安装环境.
回顾
当你知道如何通过给一段DML语句添加提示就可以让它运行的快很多,但是你却没有访问源代码并将提示放到适当位置的途径, 你会怎么做?
在上一篇文章中,我展示了你可以如何用存储概要(也被称为执行计划稳定性)来驱使数据库引擎为你做这种工作.
一个存储概要由两个组件组成(宽泛地讲)-一个你希望控制的SQL语句,一组每当Oracle发现这条SQL被优化都将在它上面应用的提示.这两个组件都被保存在一个被称为outln的数据库schema中.
我们可以使用一组如图-1中类似的查询语句来检查保存在其中的SQL语句,以及附着在这条SQL语句上的提示.
select name, used, sql_text
from user_outlines
where category = 'DEFAULT'
;
select stage, node, hint
from user_outline_hints
where name = '{one of the names}'
;
Figure 1 Examining stored outlines.
在前面的文章中,我介绍了这样一种想法来欺骗系统, 使用合法的方法创建一个存储概要, 接着,使用一个文本相似的但已经添加过提示的语句来创建一个存储概要,最后,使用一组SQL语句来交换这两个存储概要的实际结果来修复存储概要.
当时,我曾提到这种方法对Oracle 8来讲或许是安全的,但是由于在新版本中引入的变化, 在Oracle 9中可能会导致问题.
这篇文章将对这些变化进行考查, 介绍一种合法的方法来得到你想要的一组存储到outln中的提示,用来解决你的那些问题语句.
相关变化
如果你登录到outln schema(在Oracle 9中它默认是锁住的)查看可用的表清单,你将发现Oracle 9比Oracle 8多出来一张表. 这些表为:
| ol$ | SQL语句 |
| ol$hints | 提示表 |
| ol$nodes | 查询块 |
第三张表是一张新表,被用来将提示列表与这条SQL语句(一份内部重写的版本)的多个不同查询块.你还将发现,提示列表(ol$hints)也被加强了,其中还包括文本长度与偏移量的细节信息.
图2为这三张表的详细描述,用星号标注了Oracle 9中出现的新字段.
ol$ OL_NAME VARCHAR2(30) SQL_TEXT LONG TEXTLEN NUMBER SIGNATURE RAW(16) HASH_VALUE NUMBER HASH_VALUE2 NUMBER *** CATEGORY VARCHAR2(30) VERSION VARCHAR2(64) CREATOR VARCHAR2(30) TIMESTAMP DATE FLAGS NUMBER HINTCOUNT NUMBER SPARE1 NUMBER *** SPARE2 VARCHAR2(1000) *** Ol$hints OL_NAME VARCHAR2(30) HINT# NUMBER CATEGORY VARCHAR2(30) HINT_TYPE NUMBER HINT_TEXT VARCHAR2(512) STAGE# NUMBER NODE# NUMBER TABLE_NAME VARCHAR2(30) TABLE_TIN NUMBER TABLE_POS NUMBER REF_ID NUMBER *** USER_TABLE_NAME VARCHAR2(64) *** COST FLOAT(126) *** CARDINALITY FLOAT(126) *** BYTES FLOAT(126) *** HINT_TEXTOFF NUMBER *** HINT_TEXTLEN NUMBER *** JOIN_PRED VARCHAR2(2000) *** SPARE1 NUMBER *** SPARE2 NUMBER *** ol$nodes (completely new in 9) OL_NAME VARCHAR2(30) CATEGORY VARCHAR2(30) NODE_ID NUMBER PARENT_ID NUMBER NODE_TYPE NUMBER NODE_TEXTLEN NUMBER NODE_TEXTOFF NUMBER
Figure 2 The outln tables.
你可能很快会注意到多处细节-有大量信息被基于这些表的视图排除在外了.视图user_outline_hints的视图定义完全没有改变,尽管表ol$hints上新增加了10个字段.实际上,这个视图在Oracle 8的时候就极度不足,因为它遗漏了相当有用的hint#字段.
你还会注意到,Oracle 9现在有两个hash_value字段.如果你在Oracle 8与Oracle 9中对同样的SQL语句创建存储概要,你将发现它们拥有同样的hash_value,但是Oracle 9中对应的hash_value可能完全不同.
你可以也会发现,Oracle 9中的signature(签名)字段的值与Oracle 8中的值是不同的. 这是由于Oracle这两个版本之间策略上的最主要的调整就是为了提高存储概要的重复利用.在Oracle 8中,只有在你的SQL语句与存储的SQL语句完全匹配(包含空格符/大小写以及换行符)的时候才可以使用.到Oracle 9之后,这个限制放宽了,只要在去除掉重复的”空字符”并且将文本都转换成同样的大小写之后SQL语句能够匹配就可以使用存储概要了.例如,下面的两条SQL语句将使用同一个存储概要.
select * from t1 where id = 5; SELECT * FROM T1 WHERE ID = 5;
策略上的这个调整导致了第一次创建这个执行计划的SQL语句的签名的调整;如果你的数据库从Oracle 8升级到Oracle 9,就必须更新存储概要或者必须确认它们不再被使用.(事实上,别名为dbms_outln包outln_pkg包含一个特别的存储过程update_signatures来处理这个问题.
不过,关于Oracle 9中这些表的最意义重大的事情却是对查询语句中涉及到的文本与对象的极度详细描述.创建图-3中显示的例子,并在继续阅读之前详细查看ol$hints表中的内容.
drop table t1;
create table t1
nologging
as
select
rownum id,
rownum n1,
object_name,
rpad('x',500) padding
from
all_objects
where
rownum <= 100
;
alter table t1
add constraint t1_pk primary key (id);
create index t1_i1 on t1(n1);
analyze table t1 compute statistics;
create or replace outline demo_1 on
select * from t1
where id = 5
and n1 = 10
;
Figure 3 Sample code.
这个例子立足于一个简单的小表,包含两组相近的列,其中一个列为逐渐(从而也创建了索引),另外包含一个简单的非唯一索引.我们为一个典型的查询创建一个存储概要来查看我们可以如何对待它.
如果针对由这个例子创建的存储概要demo_1运行图-1中的示例查询,我们将发现这个查询将附带6个提示.
STAGE NODE HINT 3 1 NO_EXPAND 3 1 ORDERED 3 1 NO_FACT(T1) 3 1 INDEX(T1 T1_PK) 2 1 NOREWRITE 1 1 NOREWRITE
不出意外,其中的第四行显示我们将使用主键索引来访问这张表.如果我们实际上想要Oracle使用这个非唯一索引T1_I1访问表,我们该对存储概要做什么呢?理论上讲,我们可以调整这个存储概要以使得
3 1 INDEX(T1 T1_PK)
变成
3 1 INDEX(T1 T1_I1)
新特性
我们可以做的第一件事是查看包dbms_outln_edit.这个包在Oracle 9中引入,正如它的名字提示的那样,它的目标是编辑存储概要,这看上去令人充满希望.
然而,查看包的方法列表,检查文档手册,我们发现这个包只包含如下几个”编辑相关”的方法.
CREATE_EDIT_TABLES DROP_EDIT_TABLES CHANGE_JOIN_POS
前两个方法允许我们创建或删除outln用户拥有的表的本地拷贝.第三个方法允许我们交换一个存储概要计划中的表连接顺序. 哪怕仅仅是帮助我们修改一个简单的提示的方法也是没有的.目前,这个包看上去实际上一无是处-但是它们注定会越来越完善.
当然B方案就是去侵入它了!如果我们登录到outln用户,并自己诊察ol$hints表(也就是支撑视图user_outline_hints的表)的内容,我们可以尝试下面的这个更新操作:
update ol$hints set hint_text = 'INDEX(T1 T1_I1)' where ol_name = 'demo_1' and hint# = 4 ;
登录回到我们的测试Schema,清空共享池,并且打开存储概要:
connect test_user/test alter system flush shared_pool; alter session set use_stored_outlines = true;
实际上,我们将发现侵入的存储概要确实如你所愿了.但是这是一个让人不爽的解决方案,
因为我们一直会给一个关于”更改数据字典表”的严厉的警告.
旧方法(1)
接着,我们的目标就是寻找一种迂回但又看似无害的方法来改变存储概要表的内容,并且不需要直接的侵入存储概要表.
从前(在Oracle 9以前),我们有多种实现办法,它们都是基于这样一个事实,存储概要的效果仅仅取决于进来的SQL语句的文本,而完全不关心对对象类型或者对象的所有者.
将表替换成添加过提示的视图是一种有效的方法.(我相信,这种方法最初是由Tom Kyte在它的《Expert One on One: Oracle》这本书中介绍的).
连接到另外一个拥有表T1的访问权限的Schema,按照下面的定义创建一个添加过提示的视图,视图与表的名称保持一致.
Create or replace view t1 as Select /*+ index(t1,t1_i1) */ * from test_user.t1;
一旦视图创建完成,就在这个schema下使用下面的这个命令”重编译”这个已存在的存储概要.
alter outline demo_1 rebuild;
注意:必须拥有权限alter any outline才可以执行这个命令.
如果登录回到原来的schema,清空缓存(flush shared pool),并且启用存储概要,我们将会发现原来的查询语句现在如愿以偿的使用上了索引T1_I1.
3 1 INDEX(T1 T1_I1)
这样为什么可行?因为存储概要并不属于任何一个schema. 当我们在另外一个schema中重编译这个称为demo_1的存储概要的时候,名称T1应用到了一个本地的包含提示的视图上了,因此Oracle将这个提示包装进了真实的执行计划中,从而也进入了这个存储概要.通过查看视图user_outline_hints,将会发现关键的那一行已经变成了
3 1 INDEX(T1 T1_I1)
很不幸,我们还将注意到它现在包含3行如下形式的提示:
2 1 NOREWRITE 1 2 NOREWRITE 1 1 NOREWRITE
而原来我们只有两行:
2 1 NOREWRITE 1 1 NOREWRITE
我们引入了一个新的提示,也就是”Stage 1,Node 2″.我不敢说我确切的知道这是什么意思,但是它一定与这样一个事实有关,为了在另外一个Schema解析优化这个查询,Oracle执行了一个额外的步骤来将视图引用转换成基础表的引用.
虽然目前这不会导致存储概要无法正确使用(或者如同它在这个简单的例子中这样),谁又能说Oracle在将来的版本又会有多挑剔呢.
旧方法(2)
因为视图引入了一个可能在将来版本变成错误的异常,我们不得不更加挑剔. 让我们试试下面的这种方法:
Create a new schema. Create table T1 in that schema. Create ONLY the index T1_I1. Rebuild the outline in that schema
如果比较存储概要重建前后user_outline_hints的详细内容(必须重新登录到原来的Schema来做这件事),我们将发现除了我们想要改变的那一行,它们是完全一样的.重新登录回原来的Schema,通过清空共享池以及打开存储概要做一个常规检查,我们将会发现修改后的存储概要已经被使用了.
然而,还有一个潜在的威胁,不过这一次更加隐蔽.再回去看图-2中出现在Oracle 9中的新字段的定义-你认为字段user_table_name中保存的值将会是什么啊?它应该是有限制的表名称,例如:
{User_name}.{table_name}
在我们的例子中,这将告诉Oracle表T1实际上是一个属于新的Schema的表,而不是原来的Schema下面的表.即使Oracle确实在使用这个存储概要,这个表里的信息也充分说明Oracle是在错误的对象上面应用这个存储概要.
另外,它现在现在有效,但是为什么有这个信息在这儿呢-可能是为了将来的版本增强做准备呢.
可靠的赌注
看来,要生成存储概要,而又不面临将来的风险就只有一种方法了,那就是尽可能的真实.
在这个示例中,你需要删除主键索引,生成执行计划,然后替换掉主键.
当然,你可能不想在生产环境做这件事,即使你在生产环境做了,存储概要也有可能选择走全表扫描(而不是走你想要的那个索引).
底线是你必须至少在另一个数据库中有一个这个Schema的空闲拷贝,接着需要非常小心的操作这个拷贝以得到需要的存储概要.一旦得到这个存储概要,你就可以从一个数据库导出它并将其导入另外一个数据库.
例如:在这个空闲的数据库上,删除主键以避免PK唯一扫描就是可行的.如果Oracle并没有自动的采用另外一个索引,你可以对系统说各种谎言,诸如:
- 将optimizer_mode改成first_rows_1
- 构造数据使得列N1上的数据是唯一的.(不过,不要将其改成唯一索引,这样生成出来的存储概要将是unique scan而不是range scan了).
- 使用dbms_stats来使这个索引获得一个难以置信的clustering_factor.
- 调整参数optimiser_index_caching来告诉系统,这个索引已经完全被缓存.
- 调整optimiser_index_cost_adj来告诉系统,多块读要比单块读要慢100倍.
- 使用dbms_stats修改aux_stats$表来达到上一条同样的宣称效果,并且添加这样一个事实,一次多块读的典型大小为2个块.
- 重建这个索引以包含where从句中的所有字段.
给定存储概要表中的内容,假使表的所有者不变,对象类型不变以及不改变索引的唯一度,几乎任何事情都可以做. 如果你可以构造一个数据集与环境来生成一份与生产系统没有内部不一致的存储概要,那么你就可以以任何方式来欺骗系统.
结论
相对于Oracle 8来讲,在Oracle 9中进入存储概要的信息变更更加精细了.之前可以非常容易也很明显无风险的”调整”存储概要的方法,现在还仍然可以工作,但是Oracle 9中收集的巨量的附加信息表明,之前的那种方法现在可能会给将来留下隐患.
虽然Oracle 9中引入了一个编辑存储概要的包,但它当前还只是局限在交换表的连接顺序.除了使用第二套系统来调整索引(通过改变环境参数以及人造的统计信息)外, 看似不存在安全的干预存储概要的方法.
参考文献
Oracle 9i Release 2: Database Performance Tuning Guide and Reference - Chapter 7.
Oracle 9I Release 2: Supplied PL/SQL Packages and Types Reference - Chapters 41 - 42
一直以来, DataReport都是用表格方式显示多行数据, 当我们查询少量字段数很多的记录时, 就不希望以表格方式显示记录, 而希望以Form格式显示, 如下面显示的员工表的信息.
EMPNO 7782 ENAME CLARK JOB MANAGER MGR 7839 HIREDATE 1981-06-09 00:00:00.0 SAL 2450 COMM DEPTNO 10
EMPNO 7839 ENAME KING JOB PRESIDENT MGR HIREDATE 1981-11-17 00:00:00.0 SAL 5000 COMM DEPTNO 10
实现这个功能, 并没有修改任何一行代码, 只是改了一下控制显示格式的XSL文件, 然后在报表定义文件中加入一行.
WEBCHART.XMLATTR=form="yes"
WEBCHART.QUERY_1=SELECT * FROM EMP WHERE DEPTNO=10
想要更丰富的格式, 只需要再改进一下XSL文件即可, 不需要修改Java代码, 不过这需要你对XML和XSLT比较熟悉.
Relative Posts:
原文:Request Visitors' Permission before installing software
转载自:谷歌中文网站管理员博客
发表时间:2010年2月3日
站长级别:全部
合法的网站可能需要他们的访问者安装软件。这些网站通常会提供给他们的用户标准的网站浏览器之外的功能,比如说查看某种特定类型的文件。请注意,如果你的网站需要用户安装特定的软件,这种软件的安装的过程是非常重要的。错误的安装过程可能会让你的网站看起来像是在安装恶意软件,从而触发我们的恶意软件检测过滤器,导致你的网站在我们的搜索结果里面被加上了“Google恶意软件提示标签”。
如果浏览你的网站需要安装某种特定的软件,你首先需要告诉你的用户为什么他们需要安装这种软件。这里有关于如何处理这种轻的两个错误做法的例子和一个正确做法的例子。
错误的做法:在没有给用户选择是否安装该软件的情况下就自行安装了软件。
错误的做法:弹出一个确认对话框提示用户同意安装该软件,这时并没有给用户足够的可以选择的信息。(这里包括标准的ActiveX 控制安装对话框, 因为它并没有提供足够有用的信息让用户在知情的情况下做出自己的选择。)
正确的做法:将该访问者重定向到一个提供了完整的信息的页面,该页面上应该对为什么这个特定的软件应该被安装给出详细的解释。 从这个页面上,访问者可以继续这个软件的安装过程如果他们觉得这个软件有用的话。
你的网站是否因为给访问者安装软件方法不当而被加上过恶意软件的标签?解决的方法很简单,更新软件的安装过程从而保证每一个访问者都知道这种软件的安装对于他们而言是非常必要的,同时给他们选择退出安装的权利。如果你按照这种方法更新了你网站上软件的安装过程,你就可以到网站站长工具中申请重新评估恶意软件,从而更快删除你的网站在搜索结果中的恶意软件标签。














