Oracle中如何查找未使用绑定变量的SQL语句?

利用V$SQL 视图的 FORCE_MATCHING_SIGNATURE 字段可以识别可能从绑定变量或 CURSOR_SHARING 获益的 SQL 语句。如果 SQL 已使用绑定变量或者 CURSOR_SHARING ,那么 FORCE_MATCHING_SIGNATURE 在对其进行标识时将给出同样的签名。换句话说,如果两个 SQL 语句除了字面量的值之外都是相同的,它们将拥有相同的 FORCE_MATCHING_SIGNATURE ,这意味着如果为它们提供了绑定变量或者 CURSOR_SHARING ,它们就成了完全相同的语句。所以,使用 FORCE_MATCHING_SIGNATURE 字段可以识别没有使用绑定变来的 SQL 语句。

可以使用如下的SQL 语句来查询:

with force_mathces as(select l.force_matching_signature,max(l.sql_id || l.child_number) max_sql_child,dense_rank() over(order by count(*) desc) ranking,count(*) countsfrom v$sql lwhere l.force_matching_signature <> 0and l.parsing_schema_name <> 'SYS'group by l.force_matching_signaturehaving count(*) > 10)
select v.sql_id,v.sql_text,v.parsing_schema_name,fm.force_matching_signature,fm.ranking,fm.countsfrom force_mathces fm, v$sql vwhere fm.max_sql_child = (v.sql_id || v.child_number)and fm.ranking <= 50order by fm.ranking;SELECT *FROM (SELECT a.PARSING_SCHEMA_NAME,substr(sql_text, 1, 60),count(1) counts,dense_rank() over(order by count(*) desc) rankingFROM v$sql awhere a.PARSING_SCHEMA_NAME <> 'SYS'GROUP BY a.PARSING_SCHEMA_NAME, substr(sql_text, 1, 60)HAVING count(1) > 10)where ranking <= 50;
测试SQL如下所示:
declarev_ename scott.emp.ename%type;v_sal   scott.emp.sal%type;v_sql   clob;
begindbms_output.put_line('*********使用字面量************');for vrt_emp in (select * from scott.emp) loopv_sql := 'select e.ename,e.sal from scott.emp e where e.empno =' ||vrt_emp.empno;execute immediate v_sqlinto v_ename, v_sql;dbms_output.put_line(v_ename || ':' || v_sql);end loop;dbms_output.put_line('');dbms_output.put_line('*********使用绑定变量************');for vrt_emp in (select * from scott.emp) loopv_sql := 'select e.ename,e.sal from scott.emp e where e.empno =:empno';execute immediate v_sqlinto v_ename, v_sqlusing vrt_emp.empno;dbms_output.put_line(v_ename || ':' || v_sql);end loop;end;select v.sql_text, v.sql_id, v.force_matching_signaturefrom v$sql vwhere v.sql_text like'select e.ename,e.sal from scott.emp e where e.empno%';

Oracle在解析SQL语句的时候,如果在共享池中发现匹配的SQL语句,就可以避免掉解析的大部分开销。在共享池中找到匹配的SQL语句所对应的解析被称为软解析(soft parse)。如果没有找到匹配的SQL语句,则必须进行硬解析(hard parse)。

硬解析不仅耗费CPU时间,在有大量会话想要同时缓存SQL语句到共享池时还会造成争用。通过使用绑定变量,可以最小化解析的代价。

1.CURSOR_SHARING参数

该参数转换SQL语句中的字面值到绑定变量。转换值提高了游标共享,且可能会影响SQL语句的执行计划。优化器是基于绑定变量的存在生成执行计划,而不是实际字面量值。

CURSOR_SHARING决定什么类型的SQL语句可以共享相同的游标。CURSOR_SHARING参数有三个值:

FORCE:只要有可能,字面量就会被替换为绑定变量。

SIMILAR:只有当替换不会影响到执行计划时,才会将字面量替换为绑定变量

EXACT:这是默认值。不将字面量替换为绑定变量。

注意:不推荐修改CURSOR_SHARING参数的默认值。如果实在无法修改现有应用的代码,可以通过设置CURSOR_SHARING参数来指示Oracle透明地将字面量替换为绑定变量。

2.识别没有使用绑定变量的SQL语句

利用v$sql视图的FORCE_MATCHING_SIGNATURE字段,可以识别可能从绑定变量或CURSOR_SHARING获益的SQL语句。如果SQL已使用绑定变量或者CURSOR_SHARING,则FORCE_MATCHING_SIGNATURE在对其进行标识时将给出同样的签名。换句话说,如果两个SQL语句除了字面量的值之外都是相同的,它们将拥有相同的FORCE_MATCHING_SIGNATURE,这意味着如果为他们提供了绑定变量或者CURSOR_SHARING,它们就成了完全相同的语句。

使用FORCE_MATCHING_SIGNATURE识别没有使用绑定变来的SQL语句。

with force_mathces as

(select l.force_matching_signature mathces,

max(l.sql_id || l.child_number) max_sql_child,

dense_rank() over(order by count(*) desc) ranking

from v$sql l

where l.force_matching_signature <> 0

and l.parsing_schema_name <> 'SYS'

group by l.force_matching_signature

having count(*) > 10)

select v.sql_id, v.sql_text, v.parsing_schema_name, fm.mathces, fm.ranking

from force_mathces fm, v$sql v

where fm.max_sql_child = (v.sql_id || v.child_number)

and fm.ranking <= 5

order by fm.ranking;

3.通过执行动态SQL语句获取绑定变量的好处

通过执行动态SQL语句,比较字面量和绑定参数对SQL解析的影响。

declare

v_ename emp.ename%type;

v_sal   emp.sal%type;

v_sql   clob;

begin

dbms_output.put_line('*********使用字面量************');

for vrt_emp in (select * from emp) loop

v_sql := 'select e.ename,e.sal from emp e where e.empno =' ||

vrt_emp.empno;

execute immediate v_sql

into v_ename, v_sql;

dbms_output.put_line(v_ename || ':' || v_sql);

end loop;

dbms_output.put_line('');

dbms_output.put_line('*********使用绑定变量************');

for vrt_emp in (select * from emp) loop

v_sql := 'select e.ename,e.sal from emp e where e.empno =:empno';

execute immediate v_sql

into v_ename, v_sql

using vrt_emp.empno;

dbms_output.put_line(v_ename || ':' || v_sql);

end loop;

end;

查询v$sql视图,比较执行结果:

SQL> select v.sql_text, v.sql_id, v.force_matching_signature

2    from v$sql v

3   where v.sql_text like 'select e.ename,e.sal from emp e where e.empno %';

SQL_TEXT                                                      SQL_ID        FORCE_MATCHING_SIGNATURE

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

select e.ename,e.sal from emp e where e.empno =7782         766syjydcn5fh      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7499         6ymy4hcb386vt      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7934         3t96y707p8by7      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7902         f9pyzxf7tnuzw      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7654         fvk1fzmrvjc4j      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7788         gsmatg9f4jd2z      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7566         4q9pzzpvvdpuu      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7369         3xhqmvm5vdqy0      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7698         bjjjw0gzaprzv      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7876         8nd8v8mrzxw4w      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7521         5tnyy066zfk1b      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7844         4kd7jb013g2zz      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =7900         grx9sh4fwrcwx      1.27397653964533E19

select e.ename,e.sal from emp e where e.empno =:empno       20wmyr4cvrr6k      3.49355109645567E18

select e.ename,e.sal from emp e where e.empno =7839         6u2ajyu05gw9s      1.27397653964533E19

在v$sql视图中,发现使用字面量的SQL语句有14条,而使用绑定变量的SQL语句只有一条。其中使用字面量的SQL语句除以了字面量值不同之外,其他部分都是相同。而FORCE_MATCHING_SIGNATURE的值是在假设该SQL语句使用绑定变量或者CURSOR_SHARING得到的,因此通过FORCE_MATCHING_SIGNATURE字段识别没有绑定变量的SQL语句。

从10G开始可以通过如下方式查找未使用绑定变量的语句
select FORCE_MATCHING_SIGNATURE, count(1)
  from v$sql
 where FORCE_MATCHING_SIGNATURE > 0
   and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE
 group by FORCE_MATCHING_SIGNATURE
having count(1) > &a
 order by 2;

10G以上通过如下过程可以查找对未使用绑定变量的语句
create table shsnc.long_sql(sql_text clob, FORCE_MATCHING_SIGNATURE  number,count number)
create or replace procedure query_sql is      
cursor fms is select FORCE_MATCHING_SIGNATURE as fms, count(1) as count
  from v$sql
 where FORCE_MATCHING_SIGNATURE > 0
   and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE
 group by FORCE_MATCHING_SIGNATURE
having count(1) > 100
 order by 2; 
v_fms number;
v_sql01 varchar2(3999);
v_sql02 varchar2(3999);
begin
for i in fms loop
v_sql01:='insert into shsnc.long_sql(FORCE_MATCHING_SIGNATURE,sql_text)  select FORCE_MATCHING_SIGNATURE,sql_fulltext from (select FORCE_MATCHING_SIGNATURE,sql_fulltext from v$sql where FORCE_MATCHING_SIGNATURE='||i.fms||' and FORCE_MATCHING_SIGNATURE not in (select FORCE_MATCHING_SIGNATURE from shsnc.long_sql)) where rownum<2';
v_sql02:='update shsnc.long_sql set count='||i.count ||' where FORCE_MATCHING_SIGNATURE='||i.fms;
execute immediate v_sql01;
commit;
execute immediate v_sql02;
commit;
end loop;
end;
/

10g以后v$SQL动态性能视图增加了FORCE_MATCHING_SIGNATURE列,其官方定义为”The signature used when the CURSOR_SHARING parameter is set to FORCE”,也就是Oracle通过将原SQL_TEXT转换为可能的FORCE模式后计算得到的一个SIGNATURE值。这么说可能不太形象,我们来具体看一下:

SQL> create table YOUYUS (t1 int);
Table created.

SQL> alter system flush shared_pool;
System altered.

SQL>select /*test_matching_a*/ * from YOUYUS where t1=1;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=2;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=3;
no rows selected

SQL> col sql_text format a55;
SQL> select sql_text, FORCE_MATCHING_SIGNATURE, EXACT_MATCHING_SIGNATURE
  2    FROM V$SQL
  3   WHERE sql_text like '%test_matching_a%'
  4     and sql_text not like '%like%';

SQL_TEXT                                                FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
------------------------------------------------------- ------------------------ ------------------------
select /*test_matching_a*/ * from YOUYUS where t1=2          4.59124694481197E18      1.00267830752731E19
select /*test_matching_a*/ * from YOUYUS where t1=3          4.59124694481197E18      1.61270448861426E19
select /*test_matching_a*/ * from YOUYUS where t1=1          4.59124694481197E18      1.36782048270058E18

/*以上将变量硬编码至SQL中的游标,FORCE_MATCHING_SIGNATURE值完全相同,而EXACT_MATCHING_SIGNATURE值各有不同。FORCE_MATCHING_SIGNATURE值相同说明在游标共享FORCE模式下,这些游标满足CURSOR SHARING的条件 */

SQL> alter system flush shared_pool;
System altered.
SQL> alter session set cursor_sharing=FORCE;
Session altered.

SQL>select /*test_matching_a*/ * from YOUYUS where t1=1;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=2;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=3;
no rows selected

SQL> col sql_text for a70
SQL> select sql_text, FORCE_MATCHING_SIGNATURE, EXACT_MATCHING_SIGNATURE
  2    FROM V$SQL
  3   WHERE sql_text like '%test_matching_a%'
  4     and sql_text not like '%like%';

SQL_TEXT                                                               FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
---------------------------------------------------------------------- ------------------------ ------------------------
select /*test_matching_a*/ * from YOUYUS where t1=:"SYS_B_0"                4.59124694481197E18      4.59124694481197E18

/*FORCE模式下将SQL文本中的变量值转换成了:SYS_B形式,EXACT_MATCHING_SIGNATURE也随之等同于FORCE_MATCHING_SIGNATURE了*/

利用FORCE_MATCHING_SIGNATURE捕获非绑定变量SQL
2010/08/19 BY MACLEAN LIU 9条评论
做为一个DBA,你大概习惯了定期要抓取数据库中的非绑定变量SQL,这些SQL经常扮演着一箱苹果中蛀虫的角色。
看到下列SQL你必定觉得眼熟:
SELECT substr(sql_text, 1, 80), count(1)
  FROM v$sql
 GROUP BY substr(sql_text, 1, 80)
HAVING count(1) > 10
 ORDER BY 2
是的,以上这段抓取literal sql的脚本大约从8i时代就开始流行了,在那时它很popular也很休闲,使用它或许还会给你的雇主留下一丝神秘感。不过今天我要告诉你的是,它彻底过时了,落伍了,已经不是fashion master了。
10g以后v$SQL动态性能视图增加了FORCE_MATCHING_SIGNATURE列,其官方定义为”The signature used when the CURSOR_SHARING parameter is set to FORCE”,也就是Oracle通过将原SQL_TEXT转换为可能的FORCE模式后计算得到的一个SIGNATURE值。这么说可能不太形象,我们来具体看一下:
SQL> create table YOUYUS (t1 int);
Table created.

SQL> alter system flush shared_pool;
System altered.

SQL>select /*test_matching_a*/ * from YOUYUS where t1=1;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=2;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=3;
no rows selected

SQL> col sql_text format a55;
SQL> select sql_text, FORCE_MATCHING_SIGNATURE, EXACT_MATCHING_SIGNATURE
  2    FROM V$SQL
  3   WHERE sql_text like '%test_matching_a%'
  4     and sql_text not like '%like%';

SQL_TEXT                                                FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
------------------------------------------------------- ------------------------ ------------------------
select /*test_matching_a*/ * from YOUYUS where t1=2          4.59124694481197E18      1.00267830752731E19
select /*test_matching_a*/ * from YOUYUS where t1=3          4.59124694481197E18      1.61270448861426E19
select /*test_matching_a*/ * from YOUYUS where t1=1          4.59124694481197E18      1.36782048270058E18

/*以上将变量硬编码至SQL中的游标,FORCE_MATCHING_SIGNATURE值完全相同,而EXACT_MATCHING_SIGNATURE值各有不同。FORCE_MATCHING_SIGNATURE值相同说明在游标共享FORCE模式下,这些游标满足CURSOR SHARING的条件 */

SQL> alter system flush shared_pool;
System altered.
SQL> alter session set cursor_sharing=FORCE;
Session altered.

SQL>select /*test_matching_a*/ * from YOUYUS where t1=1;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=2;
no rows selected

SQL>select /*test_matching_a*/ * from YOUYUS where t1=3;
no rows selected

SQL> col sql_text for a70
SQL> select sql_text, FORCE_MATCHING_SIGNATURE, EXACT_MATCHING_SIGNATURE
  2    FROM V$SQL
  3   WHERE sql_text like '%test_matching_a%'
  4     and sql_text not like '%like%';

SQL_TEXT                                                               FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
---------------------------------------------------------------------- ------------------------ ------------------------
select /*test_matching_a*/ * from YOUYUS where t1=:"SYS_B_0"                4.59124694481197E18      4.59124694481197E18

/*FORCE模式下将SQL文本中的变量值转换成了:SYS_B形式,EXACT_MATCHING_SIGNATURE也随之等同于FORCE_MATCHING_SIGNATURE了*/
以上演示说明了FORCE_MATCHING_SIGNATURE列可以帮助我们找出那些潜在可以共享的游标(也包括了因非绑定问题造成的游标无法共享),现在我们利用它来完善捕获非绑定变量SQL的脚本:
SQL> alter system flush shared_pool;
System altered.

SQL> select  /*test_matching_b*/ * from YOUYUS where t1=1;
no rows selected

SQL> select  /*test_matching_b*/ * from YOUYUS where t1='1';            //我有引号,我与众不同!
no rows selected

SQL> col sql_text for a70

SQL> select sql_text, FORCE_MATCHING_SIGNATURE, EXACT_MATCHING_SIGNATURE
  2    FROM V$SQL
  3   WHERE sql_text like '%test_matching_b%'
  4     and sql_text not like '%like%';

SQL_TEXT                                                               FORCE_MATCHING_SIGNATURE EXACT_MATCHING_SIGNATURE
---------------------------------------------------------------------- ------------------------ ------------------------
select  /*test_matching_b*/ * from YOUYUS where t1='1'                      1.43666633406896E19      1.83327833675856E19
select  /*test_matching_b*/ * from YOUYUS where t1=1                       1.43666633406896E19      8.05526057286178E18

/*多余的引号也会导致游标无法共享,此时的FORCE_MATCHING_SIGNATURE 也会是一致的*/

select FORCE_MATCHING_SIGNATURE, count(1)
  from v$sql
 where FORCE_MATCHING_SIGNATURE > 0
   and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE
 group by FORCE_MATCHING_SIGNATURE
having count(1) > &a
 order by 2;

Enter value for a: 10
old   6: having count(1) > &a
new   6: having count(1) > 10

FORCE_MATCHING_SIGNATURE   COUNT(1)
------------------------ ----------
     8.81463386552502E18         12

So We find it!

在这里再推荐一种来自MOS,find Literal SQL的方法:

How to Find Literal SQL in Shared Pool


Applies to:

PL/SQL – Version: 8.1.7 to 10.2
Information in this document applies to any platform.

Goal

There is no direct way to query the dictionary for literal SQL only.

However the following example will try to exclude all SQL statements in the
shared pool that do use bind variables.

There still might be situations, with statements using subqueries, where the
example still will show SQL statements using bind variables.



About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ),注明添加缘由

● 于 2019-09-01 06:00 ~ 2019-09-31 24:00 在西安完成

● 最新修改时间:2019-09-01 06:00 ~ 2019-09-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

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

Oracle中如何查找未使用绑定变量的SQL语句?相关推荐

  1. oracle 等待原因查找,查询引起锁等待的SQL语句

    本帖最后由 bfc99 于 2014-9-22 17:34 编辑 主要通过四个性能视图: 1.v$locked_object  查看当前哪些对象上有锁,及其所属的会话. 2.v$session_blo ...

  2. python查询sqlserver视图_如题:sqlserver连接Oracle数据库,在sql查询分析器中查询oracle中的视图,根据时间字段查询,SQL语句...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. mysql execute immediate_使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL

    一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划. ...

  4. mysql绑定变量的值_关于绑定变量的SQL绑定什么值

    当然这不是判断在哪里建立索引的依据. SELECT * FROM (SELECT A.*, SC.NAME, SC.POSITION AS "绑定变量在SQL语句中的位置", CA ...

  5. Oracle面对“数据倾斜列使用绑定变量”场景的解决方案

    1. 背景知识介绍 我们知道,Oracle在传统的OLTP(在线事务处理)类系统中,强烈推荐使用绑定变量,这样可以有效的减少硬解析从而增加系统的并发处理能力.甚至在有些老旧系统,由于在开始开发阶段缺乏 ...

  6. 如何找出应用程序未使用绑定变量

    SQL开发的过程中,如果不使用绑定变量,会对数据库性能造成非常严重的影响请看如下示例代码: begin   for i in 1..1000 loop   execute immediate 'ins ...

  7. 包含绑定变量的sql进行调优需注意一点

    拿1个sql举个例子,我只贴出了where后面部分 实际环境中有init_date 和direct_no的组合索引IDX_DATE_NO 上诉标红处,:b3=0 和:b3<>0这两种情况o ...

  8. Access中字段类型及修改字段类型的SQL语句

    Access中字段类型及修改字段类型的SQL语句 Access中的数据类型 Access中有10中数据类型:文本.备注.数值.日期/时间.货币.自动编号.是/否.OLE对象.超级链接.查询向导. 1. ...

  9. python写sql语句_python3将变量写入SQL语句的实现方式

    试了一下python操作数据库,准备将前端传回来的用户名和密码写入表中 试了半天不会把变量加在在sql语句里面 网上搜索了一下,要用元组来传递多个参数sql = "insert into u ...

最新文章

  1. 你真的会玩SQL吗?Case的用法(转)
  2. 算法学习:主席树(可持久化线段树)
  3. 14-Providing protection for complex software
  4. CVPR 2019 | 小样本域适应的目标检测
  5. 执行计划oracle中cost,执行计划中cost计算方法
  6. 免费的数据库建模工具
  7. 如何使用iMazing将iPhone的数据迁移到iPad
  8. Nacos整合SpringCloud的自动注册原理
  9. cudnn下载与安装
  10. USB 格式化,提示The volume is too big for FAT32(卷对FAT32来说太大)
  11. matlab hist3 密度图,Matlab中hist3
  12. 计算机三级数据库考试知识点及题库总结(最全)
  13. 电脑插入耳机检测不到没反应怎么办?
  14. XtraReport打印二维码
  15. VS x86 x64 anycpu 编译运行对照表
  16. Python爬虫 抓取大数据岗位招聘信息(51job为例)
  17. 服务器ip导致微信域名红,微信/QQ域名检测-最新腾讯域名检测官方接口
  18. Oracle- imp/impdp导入dmp文件
  19. SpringBoot 配置热部署
  20. pandas一行代码绘制26种美图

热门文章

  1. VS+openCV之深入了解 cv::Mat
  2. 如何把微信中的多个图片转为一个pdf文件?
  3. Java工程师岗位职责有哪些 职业发展前景怎么样
  4. 数据挖掘实战—电商产品评论数据情感分析
  5. iphone联通没有4g信号显示无服务器,为什么全网通的iPhone 7用不了联通4G
  6. dataframe中将第一列放到最后一列
  7. php计算获取抖音签名
  8. HTML5 APP开发与原生态APP比较有什么好处?
  9. obs录制成mp4格式
  10. swift5 Notification