管理运维--解决ORACLE数据库RAC环境DEBUG出错问题

in #dba-oracle7 years ago (edited)

前提环境、配置简要说明11gR2:

  • SCAN 10.20.30.60
  • NODE1 10.20.30.61
  • NODE2 10.20.30.62
  • 服务名称:JIMRAC两个实例名:JIMRAC1、JIMRAC2
  • 服务别名:JIMDBPR
  • 连接用户:SCM_CHINA
RAC数据库DEBUG需要显式指定实例节点
JIMRAC1_30.61=
 (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=10.20.30.61)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=JIMDBPR)
      (INSTANCE_NAME=JIMRAC1)
    )
 )
如果不想固定节点配置多个tnsnames连接串在多节点间自动故障转移

显然这种方法就埋没了RAC环境SCAN IP的设计初衷、但是为了随时DEBUG也是个选择

JIMRAC =
  (DESCRIPTION =
      (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.30.61)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.30.62)(PORT = 1521))            
      )
      (LOAD_BALANCE = ON)
      (CONNECT_DATA =
          (SERVICE_NAME = JIMRAC)
          (FAILOVER_MODE = 
      (TYPE = SELECT)
      (METHOD = BASIC)
      (RETRIES = 180)
            (DELAY = 5)
          )
      )
  )

Else will Error:
Unable to find RAC connection information for JIMRAC1 (INST_ID = 1).

连接用户需要有编译权限
grant debug any procedure to SCM_CHINA;
grant debug connection to SCM_CHINA;
grant create any procedure to SCM_CHINA; --通常是已经拥有
程序包PACKAGE存储过程需要编译并添加DEBUG信息Add Debug Information
alter package SCM_CHINA.YOUR_DEFINITION_PKG compile debug;
alter package SCM_CHINA.YOUR_DEFINITION_PKG compile debug body;
或者
alter session set plsql_optimize_level = 1;
alter session set plsql_debug = true;
exec dbms_utility.compile_schema(SCM_CHINA); --用户对象多时避免
验证是否已添加DEBUG属性
--当前用户查看自己的对象
select name, type, plsql_optimize_level, plsql_debug
from user_plsql_object_settings where name = 'YOUR_DEFINITION_PKG';

--管理用户查看其他用户的对象
select name, type, plsql_optimize_level, plsql_debug
from ALL_PLSQL_OBJECT_SETTINGS where name = 'YOUR_DEFINITION_PKG';

SELECT PO.OWNER,PO.OBJECT_NAME,PO.OBJECT_TYPE,PO.DEBUGINFO
,'ALTER ' || REPLACE(object_type,'PACKAGE BODY','PACKAGE') || ' ' || owner || '.' || object_name ||DECODE(object_type,'PACKAGE BODY',' COMPILE BODY;',' COMPILE;') COPILE_NO_DEBUG
,'ALTER ' || REPLACE(object_type,'PACKAGE BODY','PACKAGE') || ' ' || owner || '.' || object_name ||DECODE(object_type,'PACKAGE BODY',' COMPILE DEBUG BODY;',' COMPILE DEBUG;') COPILE_WITH_DEBUG
FROM   SYS.ALL_PROBE_OBJECTS PO
--WHERE OBJECT_NAME='YOUR_DEFINITION_PKG' AND DEBUGINFO IN ('F','T')
ORDER BY owner, object_type, object_name;

待研究使用调用方式
CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.20.30.61', '52199' )
CALL DBMS_DEBUG_JDWP.DISCONNECT()

关闭调试信息

alter session set PLSQL_DEBUG=false;
alter session set PLSQL_OPTIMIZE_LEVEL=2;
Sort:  

Congratulations @smartree! You have received a personal award!

1 Year on Steemit
Click on the badge to view your Board of Honor.

Support SteemitBoard's project! Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.32
TRX 0.25
JST 0.040
BTC 95038.31
ETH 3326.36
USDT 1.00
SBD 7.20