oracle稳定执行计划

这篇具有很好参考价值的文章主要介绍了oracle稳定执行计划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二、稳定执行计划
(一)sql profile的好处
稳定执行计划
在不能修改目标sql的sql文本的情况下使目标sql语句按照指定的执行计划运行。
1、automatic类型的sql profile
本质是针对目标sql的一些额外的调整信息,这些额外的调整信息需要与原目标sql的相关统计信息等内容一起作用才能得到新的执行计划,即原始sql的统计信息等内容一旦发生变化,即使原有的automatic类型的sql profile并没有改变,该sql的执行计划也可能发生变化。
SQL> exec dbms_sqltune.accept_sql_profile(task_name =>'my_sql_tuning_task_4',task_owner =>'SCOTT',replace => TRUE,force_match=>true);
说明:
force_match=>true 相当于绑定变量


(1)t1表原本有索引idx_t1,使用hint让它不走索引
SQL> grant select on v_$session to scott;
SQL> grant select on v_$sql_plan_statistics_all to scott;
SQL> grant select on v_$sql_plan to scott;
SQL> connect scott/tiger; 
SQL> create table t1(n number);
SQL> declare
  2  begin
  3  for i in 1 .. 10000
  4  loop
  5  insert into t1 values(i);
  6  commit;
  7  end loop;
  8  end;
  9  /
SQL> select count(*) from t1;
  COUNT(*)
----------
     10000
SQL> create index idx_t1 on t1(n);
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T1',method_opt=>'for all columns size 1',CASCADE=>true);
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=1
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

该执行计划会走全表扫描

(2)建立一个自动调整任务(my_sql_tuning_task_4)
SQL> declare
  2  my_task_name VARCHAR2(30);
  3  my_sqltext CLOB;
  4  begin
  5  my_sqltext := 'select /*+ no_index(t1 idx_t1) */ * from t1 where n=1';
  6  my_task_name := dbms_sqltune.create_tuning_task(
  7  sql_text => my_sqltext,
  8  user_name => 'SCOTT',
  9  scope => 'COMPREHENSIVE',
 10  time_limit => 60,
 11  task_name => 'my_sql_tuning_task_4',
 12  description => 'Task to tune a query on table t1');
 13   END;
 14  /
 

(备注:删除自动任务 : exec dbms_sqltune.drop_tuning_task('my_sql_tuning_task_4');

补充:删除sql_profile : exec dbms_sqltune.drop_sql_profile(name =>'my_sql_tuning_task_4');  


 (3)执行上述自动调整任务
 SQL> begin
  2  dbms_sqltune.execute_tuning_task(task_name => 'my_sql_tuning_task_4');
  3  end;
  4  /
  
(4)查看该自动调整任务的结果确实走了索引。
SQL> set long 900
SQL> set longchunksize 1000
SQL> set linesize 800
SQL> select dbms_sqltune.report_tuning_task('my_sql_tuning_task_4') from dual;

 (5)接受这个sql profile
SQL> exec dbms_sqltune.accept_sql_profile(task_name =>'my_sql_tuning_task_4',task_owner =>'SCOTT',replace => TRUE,force_match=>true);

(补充:删除sql_profile : exec dbms_sqltune.drop_sql_profile(name =>'my_sql_tuning_task_4');  


 (6)接着再执行如下sql时会走索引
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=20
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

2、manual类型的sql profile
本质是一堆hint的组合。这一堆hint的组合实际上来源于执行计划中outline data部分的hint组合。manual类型的sql profile可以起到很好的稳定目标sql的执行计划的作用。

使用脚本coe_xfr_sql_profile.sql针对目标sql生成manual类型的sql profile,并通过"偷梁换柱"的方式在不修改目标sql的sql文本的情况下调整其执行计划。
步骤如下:
(1)针对目标sql使用脚本coe_xfr_sql_profile.sql产生能生成其manual类型的sql profile的脚本A.
(2)改写目标sql的文本,在其中使用合适的hint,直到加入hint后的sql能走出我们想要的执行计划。然后对加入合适hint后的sql使用脚本coe_xfr_sql_profile.sql,产生能生成其manual类型的sql profile的脚本B
(3)用脚本B中的Outline Data部分的hint组合替换掉脚本A中的Outline Data部分的hint组合。
(4)执行脚本A生成针对原目标sql的manual类型的sql profile.
 
SQL> select /*+ no_index(t1 idx_t1) */ * from t1 where n=20;    
因为上一步automatic类型的sql profile使用了自动调整任务,所以该sql的执行计划会走索引
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
INDEX RANGE SCAN
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   - SQL profile coe_gkdzg1fk71sc0_3617692013 used for this statement

删除sql profile
SQL> exec dbms_sqltune.drop_sql_profile('coe_gkdzg1fk71sc0_3617692013');

执行走索引的profile
SQL> select /*+ index(t1 idx_t1) */ * from t1 where n=20;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
PLAN_TABLE_OUTPUT
SQL_ID    2a4g5h03mm877, child number 0
Plan hash value: 1369807930
|*  1 |  INDEX RANGE SCAN| IDX_T1 |    1 |    4 |    1   (0)| 00:00:01 |

SQL> col SQL_TEXT for a85
SQL> set pagesize 900;
SQL> set linesize 900;
SQL> select sql_text,sql_id,version_count from    v$sqlarea where sql_text like '%n=20%'
SQL_TEXT                                                                             SQL_ID         VERSION_COUNT
---------------------------------------------------------------------------------- ------------- -------------
select /*+ no_index(t1 idx_t1) */ * from t1 where n=20                                 fyrgtpxw26btv         1
select /*+ index(t1 idx_t1) */ * from t1 where n=20                                     2a4g5h03mm877         1
select sql_text,sql_id,version_count from v$sqlarea where sql_text like '%n=20%'     gtfnngky67bj6         1

原sql对应的plan_hash_value
SQL> select plan_hash_value from v$sql where sql_id='fyrgtpxw26btv';
PLAN_HASH_VALUE

     3617692013
加了强制索引的sql对应的plan_hash_value
SQL> select plan_hash_value from v$sql where sql_id='2a4g5h03mm877';
PLAN_HASH_VALUE
---------------
     1369807930


针对原sql使用脚本coe_xfr_sql_profile.sql产生能生产其manual类型sql profile脚本。
SQL> @?/rdbms/admin/coe_xfr_sql_profile.sql;   (oracle官方文档ID 215187.1)
Parameter 1:
SQL_ID (required)
Enter value for 1: fyrgtpxw26btv
PLAN_HASH_VALUE AVG_ET_SECS
--------------- -----------
     3617692013        .006
Parameter 2:
PLAN_HASH_VALUE (required)
Enter value for 2: 3617692013
Values passed to coe_xfr_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_ID           : "fyrgtpxw26btv"
PLAN_HASH_VALUE: "3617692013"
SQL>BEGIN
  2    IF :sql_text IS NULL THEN
  3       RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).');
  4    END IF;
  5  END;
  6  /
SQL>SET TERM OFF;
SQL>BEGIN
  2    IF :other_xml IS NULL THEN
  3       RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).');
  4    END IF;
  5  END;
  6  /
SQL>SET TERM OFF;
Execute coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql
on TARGET system in order to create a custom SQL Profile
with plan 3617692013 linked to adjusted sql_text.
COE_XFR_SQL_PROFILE completed.
SQL>

针对强制索引的sqlsql使用脚本coe_xfr_sql_profile.sql产生能生产其manual类型sql profile脚本。
SQL>@?/rdbms/admin/coe_xfr_sql_profile.sql;
Parameter 1:
SQL_ID (required)
Enter value for 1: 2a4g5h03mm877
PLAN_HASH_VALUE AVG_ET_SECS
--------------- -----------
     1369807930        .007
Parameter 2:
PLAN_HASH_VALUE (required)
Enter value for 2: 1369807930
Values passed to coe_xfr_sql_profile:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL_ID           : "2a4g5h03mm877"
PLAN_HASH_VALUE: "1369807930"
SQL>BEGIN
  2    IF :sql_text IS NULL THEN
  3       RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for SQL_ID &&sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).');
  4    END IF;
  5  END;
  6  /
SQL>SET TERM OFF;
SQL>BEGIN
  2    IF :other_xml IS NULL THEN
  3       RAISE_APPLICATION_ERROR(-20101, 'PLAN for SQL_ID &&sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).');
  4    END IF;
  5  END;
  6  /
SQL>SET TERM OFF;
Execute coe_xfr_sql_profile_2a4g5h03mm877_1369807930.sql
on TARGET system in order to create a custom SQL Profile
with plan 1369807930 linked to adjusted sql_text.
COE_XFR_SQL_PROFILE completed.
SQL>

参考coe_xfr_sql_profile_2a4g5h03mm877_1369807930.sql修改coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本内容,再执行coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本

h := SYS.SQLPROF_ATTR(
q'[BEGIN_OUTLINE_DATA]',
q'[IGNORE_OPTIM_EMBEDDED_HINTS]',
q'[OPTIMIZER_FEATURES_ENABLE('12.1.0.2')]',
q'[DB_VERSION('12.1.0.2')]',
q'[ALL_ROWS]',
q'[OUTLINE_LEAF(@"SEL$1")]',
q'[FULL(@"SEL$1" "T1"@"SEL$1")]',
q'[END_OUTLINE_DATA]');

改为
h := SYS.SQLPROF_ATTR(
q'[BEGIN_OUTLINE_DATA]',
q'[IGNORE_OPTIM_EMBEDDED_HINTS]',
q'[OPTIMIZER_FEATURES_ENABLE('12.1.0.2')]',
q'[DB_VERSION('12.1.0.2')]',
q'[ALL_ROWS]',
q'[OUTLINE_LEAF(@"SEL$1")]',
q'[INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."N"))]',
q'[END_OUTLINE_DATA]');


force_match=FALSE
改为
force_match=TRUE

执行coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql脚本
SQL> @coe_xfr_sql_profile_fyrgtpxw26btv_3617692013.sql
SQL> connect scott/tiger;
Connected.

( 补充:删除sql_profile : exec DBMS_SQLTUNE.DROP_SQL_PROFILE(name =>'my_sql_tuning_task_4');    )

最后可以走索引。
SQL>  select /*+ no_index(t1 idx_t1) */ * from t1 where n=20;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
|*  1 |  INDEX RANGE SCAN| IDX_T1 |    1 |    4 |    1   (0)| 00:00:01 |

二、spm稳定执行计划
oracle 11g以及以上版本上,有如下2种方法产生目标sql的sql plan baseline:
自动捕获:
手工生成/批量导入(批量导入尤其适用于oracle数据库大版本升级,它可以确保升级后原有系统所有的sql的执行计划不会发生改变)

手工生成单个sql plan baseline的步骤
(1)针对目标sql使用dbms_spm.load_plans_from_cursor_cache手工生成其初始执行计划所对应的sql plan baseline,此时,使用dbms_spm.load_plans_from_cursor_cache传入的参数为:
dbms.spm.load_plans_from_cursor_cache
(
sql_id => '原目标sql的sql_id',
plan_hash_value =>'原目标sql的plan hash value'
)
(2)改写目标sql的sql文本,在其中加入合适的hint,直到加入hint后的所该写的sql能走出我们想要的执行计划,然后对改写后的sql使用dbms_spm.load_plans_from_cursor_cache手工生成新的执行计划所对应的sql plan baseline.此时,使用dbms_spm.load_plans_from_cursor_cache传入的参数为如下所示:
dbms.spm.load_plans_from_cursor_cache
(
sql_id => '加入合适hint后的改写sql的sql_id',
plan_hash_value =>'加入合适hint后的改写sql的plan hash value',
sql_handle=>'原目标sql在步骤(1)中所产生的sql plan baseline的sql_handle'
)
(3)使用dbms_spm.drop_sql_plan_baseline删除步骤(1)中手工生成的原目标sql的初始执行计划所对应的sql plan baseline.此时,使用dbms_spm.drop_sql_plan_baseline传入的参数为如下所示:
dbms_spm.drop_sql_plan_baseline
(
sql_handle=>'原目标sql在步骤(1)中所产生的sql plan baseline的sql_handle',
plan_name=>'原目标sql在步骤(1)中所产生的sql plan baseline的plan_name'
)

var temp varchar2(10000);
exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb55f43d8');
exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb860bcf2');

创建测试表,建立索引,收集统计信息,执行查询
SQL> create table t2 as select * from dba_objects;
SQL> create index idx_t2 on t2(object_id);
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'T2',estimate_percent=>100,cascade=>true);
SQL> select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID    76td2qkxcrn9v, child number 0
Plan hash value: 1513984157
|*  1 |  TABLE ACCESS FULL| T2     |     1 |    30 |   430   (1)| 00:00:01 |
--------------------------------------------------------------------------

没有开启sql_plan_baseline自动捕获,所以没有sql_plan_baseline
SQL> set pagesize 900;
SQL> set linesize 900;
SQL> col PLAN_NAME for a30;
SQL> col SQL_HANDLE for a25;
SQL> col SQL_TEXT for a80;
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
no rows selected
SQL> 

(1)
使用目标sql的初始执行计划(即对T2表的全表扫描)所对应的sql id 和plan hash_value 来手工生成对应的sql plan baseline
SQL > var temp number;
SQL> exec :temp := dbms_spm.load_plans_from_cursor_cache(sql_id =>'76td2qkxcrn9v',plan_hash_value=>1513984157);
PL/SQL procedure successfully completed
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE          PLAN_NAME             ORIGIN     ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f      SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD    YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL> 

改写目标sql,强制索引hint
SQL> select /*+ index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL>  select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID    795jg57h9tryx, child number 0
Plan hash value: 1306670842
|*  2 |   INDEX RANGE SCAN            | IDX_T2 |       1 |         |       1   (0)| 00:00:01 |

原目标sql现在依然只有其原执行计划(即对T2表的全表扫描)所对应的sql plan baseline
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE          PLAN_NAME             ORIGIN     ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f      SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD    YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL>

(2)
使用改写后的sql的新执行计划(强制索引hint)所对应的sql id 和plan hash_value 以及原目标sql的sql plan baseline的sql_handle来手工生成对应的sql plan baseline
SQL> exec :temp :=dbms_spm.load_plans_from_cursor_cache(sql_id =>'795jg57h9tryx',plan_hash_value=>1306670842,sql_handle=>'SQL_75b06ae056223f5f');
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE          PLAN_NAME             ORIGIN     ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f      SQL_PLAN_7bc3aw1b24guzb55f43d8 MANUAL-LOAD    YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL_75b06ae056223f5f      SQL_PLAN_7bc3aw1b24guzb860bcf2 MANUAL-LOAD    YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL> 


(3)
drop 掉原执行计划(即对T2表的全表扫描)所对应的sql plan baseline
SQL> exec:temp:=dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_75b06ae056223f5f',plan_name=>'SQL_PLAN_7bc3aw1b24guzb860bcf2');
SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text from dba_sql_plan_baselines where sql_text like 'select /*+ no_index(t2 idx_t2) */object%';
SQL_HANDLE          PLAN_NAME             ORIGIN     ENA ACC SQL_TEXT
------------------------- ------------------------------ -------------- --- --- --------------------------------------------------------------------------------
SQL_75b06ae056223f5f      SQL_PLAN_7bc3aw1b24guzb55f43d8 MANUAL-LOAD    YES YES select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4
SQL> 

再次执行原目标sql
SQL> select /*+ no_index(t2 idx_t2) */object_name,object_id from t2 where object_id=4;
SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));
SQL_ID    76td2qkxcrn9v, child number 1
Plan hash value: 1306670842
|*  2 |   INDEX RANGE SCAN            | IDX_T2 |       1 |         |       1   (0)| 00:00:01 |
Note
   - SQL plan baseline SQL_PLAN_7bc3aw1b24guzb55f43d8 used for this statement
 文章来源地址https://www.toymoban.com/news/detail-636510.html

到了这里,关于oracle稳定执行计划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用sql profile 稳定执行计划的案例

    接上次一次hard parse处理过程 自从为了解决hard parse的问题而设置了cursor_sharing=force后,又衍生了其他的问题,那就是执行计划的稳定性,如下记录发生的一起强制绑定变量后引起的执行计划绑定的问题 用戶反映早上接数据变得很慢,使用如下sql检查该时段最频繁的sql 在跟系统

    2024年02月09日
    浏览(37)
  • Oracle执行计划

    执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;所以执行计划常用于sql调优 格式: explain plan for sql语句 select * from table(dbms_x

    2024年02月12日
    浏览(30)
  • Oracle之执行计划

    EXPLAIN PLAN FOR SELECT * FROM temp_1 a ; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 2.1、执行顺序 根据缩进来判断,缩进最多的最先执行;(缩进相同时,最上面的最先执行) 2.2、常见表访问方式 2.2.1、TABLE ACCESS FULL(全表扫描) Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的 W

    2024年02月13日
    浏览(83)
  • Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有一

    2024年02月13日
    浏览(58)
  • 数据库数据恢复-Oracle数据库数据恢复案例

    数据库数据恢复环境: Oracle数据库ASM磁盘组有4块成员盘。 数据库故障分析: Oracle数据库ASM磁盘组掉线 ,ASM实例无法挂载,用户联系我们要求恢复oracle数据库。 数据库数据恢复工程师拿到磁盘后,先将所有磁盘以只读方式进行扇区级别的镜像备份,后续的数据分析和数据恢

    2024年02月13日
    浏览(67)
  • Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

    1.简介   在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙伴和童鞋们的学习或者工作具有

    2024年02月13日
    浏览(75)
  • Oracle数据库

    ①层次型数据库 ②网状型数据库 ③关系型数据库(主要介绍) E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多) 注:有的联系也有属性 关系型数据库的设计范式: 第一范式(1NF):属性不可再分,字段保证原子性 第二范式(2NF):在满足1

    2024年02月08日
    浏览(59)
  • Oracle 数据库恢复删除的数据

    需求描述: 同事让删除脏数据,结果删错了,需要恢复数据 思路: 利用闪回恢复数据只能恢复15分钟之内的,后面undo空间会被重写,就恢复不了,所以删除数据后,要谨慎再三确认,若发现不对,则利用闪回恢复 先查询删除时的时间节点的快照 查到时间戳之后 闪回恢复数

    2024年01月24日
    浏览(71)
  • 【数据库】日常使用PL/SQL 登录ORACLE 数据库查询数据

    一、PL/SQL 登录方式 username: ##访问数据库的账号 password: ##访问数据库的密码 Databse: ##数据库IP地址/实例名 数据库集群心跳地址/实例名 Connect as : ##Normal,如果使用sysdba账户登录选择SYSDBA 二、PL/SQL使用SQL语句查询 点击上方导航栏,New,选择SQL Window,即可再次输入要查询的

    2024年02月19日
    浏览(70)
  • 【Oracle】收集Oracle数据库内存相关的信息

    【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) Oracle数据库包含多个内存区域,每个区域都包含多个子组件。 Oracle Database Memory Structures 根据具体问题的需要,可以通过如下命令收集Oracle数据库内存相关的信息。 例: 注:SET

    2024年01月21日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包