1.定位锁等待问题
1.1 查看被挂起的事务(TRX_ID)
SELECT VTW.ID AS TRX_ID, VS.SESS_ID ,VS.SQL_TEXT,VS.APPNAME ,VS.CLNT_IP FROM VTRXWAIT VTW LEFT JOIN VTRXWAITVTWLEFTJOINVTRX VT ON (VTW.ID=VT.ID) LEFT JOIN V$SESSIONS VS ON (VT.SESS_ID=VS.SESS_ID);
1.2 通过挂起事务ID(TRX_ID)找到它等待的事务(WAIT_FOR_ID)
SELECT WAIT_FOR_ID,WAIT_TIME FROM V$TRXWAIT WHERE ID=5216;
1.3 通过等待事务ID(WAIT_FOR_ID)定位到连接以及执行的语句
SELECT VT.ID AS TRX_ID,VS.SESS_ID ,VS.SQL_TEXT ,VS.APPNAME ,VS.CLNT_IP FROM VTRX VT LEFT JOIN VTRXVTLEFTJOINVSESSIONS VS ON (VT.SESS_ID=VS.SESS_ID) WHERE VT.ID = 5216;
1.4SP_CLOSE_SESSION关闭等待事务(SESS_ID)
SP_CLOSE_SESSION(344256);
2.获取数据库相关对象的元数据
2.1使用DBMS_METADATA.GET_DDL获取数据库对象定义
2.1.1 开启系统包
sp_create_system_packages(1);
select dbms_metadata.get_ddl(‘类型’,’对象名’,’模式名’);
类型:包括表、视图、索引、约束、表空间、存储模块等;
模式名:针对常见数据库对象,都需要模式名,对于没有模式归属的对象,不需要指明模式名,此方法不能使用在MPP环境下。
2.1.2 获取所有对象的定义信息
select ‘select dbms_metadata.get_ddl(’||’’’’||object_type||’’’’||’,’||’’’’||object_name||’’’’||’,’||’’’’||owner||’’’’