Oracle Outline总结
- 从10g以后,oracle连续公布了sql profile和sql baseline来实现SQL运行计划的控制。而且outline这个工具基本已经被Oracle废弃而且不在维护,可是无论怎么说。在10g以及11g版本号都还是能够使用。而且这个特性也一直使用的非常好。
- 10g以后建议使用sql profile或者sql baseline
- 因为眼下outline如今已经非常少使用,此文也尽量介绍有用的一部分
Outline将运行计划的hint集合保存在outline的表中(数据字典)。
当运行SQL解析时。Oracle会与outline中的SQL比較,假设该SQL有保存的outline,则通过保存的hint集合生成指定运行计划。
注意:
- SQL解析时,使用SQL文本却匹配数据字典outline保存的文本。此处匹配的方式为去掉SQL空格,忽略SQL大写和小写差别后。进行的比較。
- 比如,select * from dual 和SELECT * FROM dual这两个语句将使用相同的outline。
- 为避免在升级后某些SQL出现严重性能下降并且在短时间内不能优化的情况,我们能够使用outline的功能将原生产库中的sql运行计划实施在新的数据库上。
- 为避免SQL的运行计划在统计数据不准确的情况(如未能及时收集表或索引的统计信息)下导致变化从而引起的性能减少。
- 为避免easy由于Bind Peeking导致SQL运行计划变差从而引起的性能减少。
- 避免大规模分布实施的应用出现数据库版本号、配置等差别引起的优化器产生不同的运行计划。
- 某些Bug引起优化器生成较差的运行计划。在bug修复前我们能够使用outline来强制SQL的运行计划的正确。
- 早期优化器版本号从rule转换为cbo模式时,过渡期间用来维护业务稳定(运行计划稳定)
- outline存在在outln用户中,Outln用户是一个很重要的系统用户,其重要性跟sys,system一样。在不论什么情况下都不建议用户删除outln。否则会引起数据库错误。
- 优化器通过Outline生成运行计划前提是outline内全部hint都有效的。
- 仅仅有设置use_stored_outlines參数后才干启用outline。
- 使用字面值的sql的共享程度不高(没有使用绑定变量),Outline针对绑定变量的sql较好。
针对使用字面值的sql的情况,须要每条sql都生成outline。
- 创建outline须要create any outline or execute_catelog_role权限 。
- 要注意从CBO的角度来看。数据库表和索引的统计信息是随着数据量的变化而不断改变的。固定的运行计划在某些时段并不一定是最优的运行计划。所以outline的使用是要依据详细情况来决定的。
- 第一次应用Outline (alter system )这个操作是会产生Library cache pin的,需慎重。
- 10.2.0.4 outline bug 6455659
- use_stored_outlines參数重新启动后失效,须要又一次设置
- 当outline依赖的对象被删除时。outline并不会自己主动删除
- 两个基本视图:dba_outlines,dba_outline_hints
- 三个底层表:ol$、ol$hints、ol$nodes
test ;
pagesize
SQL> select name,owner,category,used,sql_text from dba_outlines;
NAME OWNER CATEGORY USED SQL_TEXT
------------------------------ ------------------------------ ------------------------------ ------
OUTLINE_DH_TEST DBMON TEST UNUSED
SQL> select name,hint from dba_outline_hints;
NAME HINT
------------------------------ --------------------------------------------------
OUTLINE_DH_TEST FULL(@"SEL$1" "DH_STAT"@"SEL$1")
OUTLINE_DH_TEST OUTLINE_LEAF(@"SEL$1")
OUTLINE_DH_TEST ALL_ROWS
OUTLINE_DH_TEST OPT_PARAM('_optimizer_use_feedback' 'false')
OUTLINE_DH_TEST OPT_PARAM('_optimizer_adaptive_cursor_sharing' 'fa
OUTLINE_DH_TEST OPT_PARAM('_optimizer_extended_cursor_sharing_rel'
OUTLINE_DH_TEST OPT_PARAM('_bloom_pruning_enabled' 'false')
OUTLINE_DH_TEST OPT_PARAM('_gby_hash_aggregation_enabled' 'false')
OUTLINE_DH_TEST OPT_PARAM('_optimizer_extended_cursor_sharing' 'no
OUTLINE_DH_TEST OPT_PARAM('_bloom_filter_enabled' 'false')
OUTLINE_DH_TEST OPT_PARAM('_optimizer_null_aware_antijoin' 'false'
OUTLINE_DH_TEST OPT_PARAM('_optim_peek_user_binds' 'false')
OUTLINE_DH_TEST DB_VERSION('11.2.0.1')
OUTLINE_DH_TEST OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
OUTLINE_DH_TEST IGNORE_OPTIM_EMBEDDED_HINTS
rows selected.
- 不指定outline类别是,默觉得default,并且此处创建时,不能指定为default类别(会报错)。
- 这种方法不是非常方便。由于必须将整个SQL文本作为语句的一部分,可能导致语句无法共享等问题。因此非常少使用这样的方法
- 这样的方法不能指定outline的详细名字。由系统自己主动生成,能够通过alter outline SYS_OUTLINE_14061114223605901 rename to dh_test2改动
- 不指定类别的话默觉得default,并且此处创建时,不能指定为default类别(会报错)。
- 我们使用outline固定运行计划时,一般都是选用此种方法
- 后面有一个简单演示样例,能够加深理解
只是还好这种方法也很easy。由于outline相关的hint数据都保存在outln用户下的三张表中:ol$、ol$hints、ol$nodes。能够用以下的命令来导入和导出可用的outline
Select HINT_TEXT,USER_TABLE_NAME,JOIN_PRED,cardinality,bytes,cost from OUTLN.OL$HINTS where ol_name = 'OLXXXXX_ORIG' |
SET OL_NAME = DECODE(OL_NAME,
'OLXXXXX_MOD',
'OLXXXXX_ORIG',
'OLXXXXX_ORIG',
'OLXXXXX_MOD')
WHERE OL_NAME IN ('OLXXXXX_MOD', 'OLXXXXX_ORIG');
系统已更改。
,METHOD_OPT=>'FOR
ALL COLUMNS SIZE 1',NO_INVALIDATE);
PL/SQL 过程已成功完毕。
SQL> col name format a15
SQL> col name format a30
SQL> col sql_text format a55
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select sql_text,sql_id,hash_value,child_number from v$sql a where sql_text like '%outlinetest1%' and sql_text not like '%v$sql%';
SQL_TEXT SQL_ID HASH_VALUE CHILD_NUMBER
------------------------------------------------------- ------------- ---------- ------------
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
已选择行。
,child_number ,category=>'TEST');
PL/SQL 过程已成功完毕。
SQL> col category format a10
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061209594622403 TEST UNUSED
能够看到。outline确实已经生成
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061209594622403 TEST UNUSED
此处outline的USED状态没有改变,由于我们没有激活TEST类别的outline,再次申明,outline必须通过use_stored_outlines參数激活后,优化器才会使用outline!
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
已选择行。
以下这一步激活TEST类别的OUTLINE。也能够在系统级激活OUTLINE
SQL> alter session set use_stored_outlines=TEST;
会话已更改。
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061209594622403 TEST USED
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061209594622403" used for this statement
已选择行。
PL/SQL 过程已成功完毕。
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061209594622403 TEST UNUSED
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select sql_text,sql_id,hash_value,child_number from v$sql a where sql_text like '%outlinetest2%' and sql_text not like '%v$sql%';
SQL_TEXT SQL_ID HASH_VALUE CHILD_NUMBER
------------------------------------------------------- ------------- ---------- ------------
h_stat
SQL> alter session set use_stored_outlines=true;
会话已更改。
SQL> select * from table(dbms_xplan.display_cursor('3fcq9c8xu4a92','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
select /* outlinetest2 */ /*+ full(dh_stat) */ * from dh_stat where
id
Plan hash
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS FULL| DH_STAT
| | | ()| 00:00: |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
已选择行。
,child_number ,category=>'TEST');
PL/SQL 过程已成功完毕。
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061210153067004 TEST UNUSED select /* outlinetest2 */ /*+ full(dh_stat) */ * from d
h_stat
SYS_OUTLINE_14061209594622403 TEST UNUSED
能够看到。我们新建的outline。确实已经成功
SQL> alter session set use_stored_outlines=TEST;
会话已更改。
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061210153067004 TEST USED select /* outlinetest2 */ /*+ full(dh_stat) */ * from d
h_stat
SYS_OUTLINE_14061209594622403 TEST USED
能够看到,两个outline都已经标记为已经使用过
SQL> select * from table(dbms_xplan.display_cursor('3fcq9c8xu4a92','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
select /* outlinetest2 */ /*+ full(dh_stat) */ * from dh_stat where
id
Plan hash
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
-----------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS FULL| DH_STAT
| | | ()| 00:00: |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061210153067004" used for this statement
已选择行。
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
....此处为了排版,省略了一个child number 0 的运行计划!........
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061209594622403" used for this statement
已选择行。
SQL> alter session set use_stored_outlines=TRUE;
会话已更改。
SQL> UPDATE OUTLN.OL$HINTS
2 SET OL_NAME = DECODE(OL_NAME,
3 'SYS_OUTLINE_14061210153067004',
4 'SYS_OUTLINE_14061209594622403',
5 'SYS_OUTLINE_14061209594622403',
6 'SYS_OUTLINE_14061210153067004')
7 WHERE OL_NAME IN ('SYS_OUTLINE_14061210153067004', 'SYS_OUTLINE_14061209594622403');
已更新行。
SQL> commit;
提交完毕。
SQL> col hint_text format a50
SQL> select hint#,hint_text from outln.ol$hints a where ol_name='SYS_OUTLINE_14061209594622403';
HINT# HINT_TEXT
---------- --------------------------------------------------
FULL(@"SEL$1" "DH_STAT"@"SEL$1")
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.2.0.1')
OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
IGNORE_OPTIM_EMBEDDED_HINTS
已选择行。
果然和我们预期的一样。outline里面的运行计划已经调换
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061209594622403" used for this statement
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
已选择行。
激活outline
SQL> alter session set use_stored_outlines=TEST;
会话已更改。
SQL> exec dbms_outln.clear_used(name=>'SYS_OUTLINE_14061209594622403');
PL/SQL 过程已成功完毕。
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061210153067004 TEST USED select /* outlinetest2 */ /*+ full(dh_stat) */ * from d
h_stat
SYS_OUTLINE_14061209594622403 TEST UNUSED
;
ID NAME TYPE
---------- ------------------------------ ---------------
APPLY$_CONF_HDLR_COLUMNS_UNQ1 INDEX
SQL> select name,category,used,sql_text from dba_outlines;
NAME CATEGORY USED SQL_TEXT
------------------------------ ---------- ------ -------------------------------------------------------
SYS_OUTLINE_14061210153067004 TEST USED select /* outlinetest2 */ /*+ full(dh_stat) */ * from d
h_stat
SYS_OUTLINE_14061209594622403 TEST USED
SQL> select * from table(dbms_xplan.display_cursor('053nzgm4f6rdr','',''));
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061209594622403" used for this statement
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
SQL_ID
-------------------------------------
Plan hash
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
---------------------------------------------------------------------------------------
| | ()|
|
| | TABLE ACCESS BY INDEX ROWID|
DH_STAT | | | ()| 00:00: |
| | | |
()| 00:00: |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
)
Note
-----
- outline "SYS_OUTLINE_14061209594622403" used for this statement
已选择行。
想要得到我们预期,通过全表扫描来实现,我在測试中是通过以下的方法实现
Oracle Outline总结的更多相关文章
- 【转】Oracle Outline使用方法及注意事项
概要 Oracle Outline是用来保持SQL运行计划(execution plan)的一个工具. 我们能够通过outline工具防止SQL运行计划在数据库环境变更(如统计信息,部分參数等)而引 ...
- Enable_hint_table 使用
KingbaseES enable_hint_table 可以看成类似 oracle outline 工具,可以在不修改SQL 的情况下,通过hint 改变SQL 的执行计划. 一.启用enable_ ...
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇二:基于OneNote难点突破和批量识别
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- Linux 平台静默安装 Oracle客户端
需求:Linux平台,安装完整版Oracle客户端 Tips:如果只是用到sqlldr,sqlplus功能,可以参考<Linux上oracle精简版客户端快速部署>快速部署精简版:如果需要 ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- oracle 关键字
Oracle 关键字(保留字) DBA账户下执行SQL语句:select * from v$reserved_words ; 可得到所有的关键字: 1 ! 1 2 & 1 3 ( 1 4 ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- Oracle Essbase入门系列(一)
1. 开篇序 本文是几年前做Hyperion Planning项目时写的,后来陆陆续续有些补充.本来打算将整个EPM写一系列的教程,但HFM写到1/3就没动力了.不过至少Essbase这部分是完整的. ...
- JRE 1.8.0_65/66 Certified with Oracle E-Business Suite
Java Runtime Environment 1.8.0_65 (a.k.a. JRE 8u65-b17) and JRE 1.8.0_66 (8u66-b17) and later update ...
随机推荐
- 总结: Struts2 + Spring 的线程安全问题
1. 首先Struts2 本身是安全的 其原理大概是:Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面 ...
- 【NOIP 2015 DAY2 T3】 运输计划 (树链剖分-LCA)
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...
- 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系
这张图要注意:右边两个0-15,其中上面的是LDTR, 下面的是选择子. 图下第五个标线,是两个线交叉的,实际上第五个线是指向右边水平的那个线. 没有箭头的两组线分别表示GDT的区间,LDT的区间 ...
- Android 自定义ToggleButton+用SharedPreferences保存用户配置
布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi ...
- BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...
- Nagios Core/Icinga 基于栈的缓冲区溢出漏洞
漏洞名称: Nagios Core/Icinga 基于栈的缓冲区溢出漏洞 CNNVD编号: CNNVD-201402-484 发布时间: 2014-03-03 更新时间: 2014-03-03 危害等 ...
- epub3 in action: epub3文件格式简介
epub3文件就是一个符合epub3标准,以epub为扩展名的zip压缩文件.epub3标准则是基于html5.css3.svg等web标准以及mathML等来展示内容.下图就是一个简单epub3文件 ...
- [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...
- 谈谈分布式事务之三: System.Transactions事务详解[上篇]
在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务..NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集 ...
- [codevs3862]竞赛班的垃圾处理
题目描述 Description 竞赛班的师弟们都很懒,每个人都不喜欢倒垃圾,结果垃圾就会跟师兄的RP一样越堆越多,当然,老师时不时就会叫他们去倒垃圾.由于他们真的很懒,他们只会直接将垃圾桶最上面袋拿 ...