数据库死锁分析

关于数据库死锁的文章,可以看看:
https://www.cnblogs.com/kerrycode/p/6928263.html
http://www.cnblogs.com/lhrbest/p/6005702.html

查询已创建的索引和索引列

样例如下:

ava.sql.SQLException: OAUTH marshaling failure

描述:
用java写的小工具连接Oracle 11g数据库时,提示如下错误:
ava.sql.SQLException: OAUTH marshaling failure
实验过程:
1、修改JRE
网上不少介绍都说是JRE问题,于是确认一下。
1)确认本机JRE版本
2)Oracle 11g的JRE应该是1.5
相关文章:
http://docs.alfresco.com/4.1/tasks/oracledb-config.html
https://java.net/jira/browse/GLASSFISH-15004
2、JDBC驱动有问题
有些网上介绍说是驱动问题,比如:
https://www.eclipse.org/forums/index.php/t/430801/
http://blog.itpub.net/35489/viewspace-1221131/
最终方案:

如何高水位线下无数据却需要全表扫描

/**统计高水位线下无数据,且需要全表扫描的**/
select table_name,
(Blocks * 8192/1024/1024) – (num_rows*avg_row_len/1024/1024) as “data lower than hwm in MB”
from user_tables where table_name=upper(‘sm_log_operatelog_t01’);
/***统计 用户 BGY65_JY1223 表 sm_log_operatelog_t01**/
exec dbms_stats.gather_table_stats(‘BGY65_JY1223′,’SM_LOG_OPERATELOG_T01’,CASCADE=>TRUE);
/***获取empty_blocks信息.**/
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name =upper(‘sm_log_operatelog_t01’);
/**由于前面 无法获取 empty_blocks. 需要先分析**/
analyze table t1 compute statistics;
/***分析后重新查询一下.**/
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name =upper(‘sm_log_operatelog_t01′);
/**对表进行碎片整理.**/
alter table sm_log_operatelog_t01 enable row movement;
alter table sm_log_operatelog_t01 shrink space cascade;
/**查询数据块.**/
select sum(bytes)/1024/1024 from dba_segments where segment_name=’sm_log_operatelog_t01′;
select sum(bytes)/1024/1024 from dba_segments where segment_name=’IDX_T1_ID’ ;
/**再看一下**/
/**统计高水位线下无数据,且需要全表扫描的**/
select table_name,(Blocks * 8192/1024/1024) – (num_rows*avg_row_len/1024/1024) as “data lower than hwm in MB”
from user_tables where table_name=upper(‘sm_log_operatelog_t01’);
/***统计 用户 BGY65_JY1223 表 sm_log_operatelog_t01**/
exec dbms_stats.gather_table_stats(‘BGY65_JY1223′,’SM_LOG_OPERATELOG_T01’,CASCADE=>TRUE);

删除大量数据操作后,查询性能效率没提高。

问题:为什么将一个数据表的数据进行大量后(即执行delete),对于该表的查询效率并没有提高呢?
答:对一个表执行大量delete操作后,数据库不会自动回收空间高水位线没有下降,因此对于查询,甚至后续的delete、insert操作无法提高性能。
解决方案:
方案一:shrink space
方案二:Move+rebuild index,即删除和重建索引。

相关sql参考:
查看剩余表空间
select * from dba_free_space where tablespace_name=’happy3w’;
查看某表所占空间:
select table_name,num_rows,blocks,empty_blocks,avg_row_len,last_analyzed from dba_tables where table_name like ‘TEST%’;
查看高水位状况
select header_file,header_block,bytes,blocks,extents from dba_segments where segment_name like ‘TEST%’;
extents:起始位置
header_file:高水位线位置

SQL 错误: ORA-00988: 口令缺失或无效,创建数据库DBLink.

环境信息:
oracle 12C(其他数据库版本可能没有此问题)
问题描述:
在行 1 上开始执行命令时出错:
create database link LK_BGY
connect to BGY65_JY1223 identified by 12#
using ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 20.10.130.208)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora11g)
)
)’
命令出错, 行: 2 列: 39
错误报告:
SQL 错误: ORA-00988: 口令缺失或无效
00988. 00000 – “missing or invalid password(s)”
*Cause:
解决办法:
原来密码以数字开口必须用双引号,如上文密码为“12#”而非12#
引申:
oracle中的一些表示包括表名、字段名最好都别一数字开头,否则也得加上双引号。

oracle启动报错“ORA-04031: unable to allocate 589152 bytes of shared memory (“shared pool”,”unkn own object”,”sga heap(1,0)”,”KXDBIO state obj”)”

场景:

由于机器配置不够,所以调整了oracle大小内存。
调整内存语句:
alter system set processes = 90 scope=spfile;
alter system set workarea_size_policy = AUTO scope=spfile;
alter system set sga_max_size = 500M scope=spfile;
alter system set db_cache_size = 300M scope=spfile;
alter system set shared_pool_size = 100M scope=spfile;
alter system set memory_max_target = 0 scope=spfile;
alter system set memory_target = 0 scope=spfile;

为了让内存更改生效,把oracle重启(执行showdown命令,然后再执行 startup),但是很不幸出错了。
错误提示:

ORA-04031: unable to allocate 589152 bytes of shared memory (“shared pool”,”unkn
own object”,”sga heap(1,0)”,”KXDBIO state obj”)

解决方案:
1、将pfile配置文件.ora拷贝一份出来,重新调小,另存为init_blue.ora。用init_blue.ora重新启动。
命令如下:
startup pfile=’D:\Program\oracle12c\admin\blue\pfile\init_blue.ora’

乐3巫,整个命令执行过程如下,供大家参考:
D:\>cd D:\Program\oracle12c\product\12.1.0\dbhome_1

D:\Program\oracle12c\product\12.1.0\dbhome_1>sqlplus

SQL*Plus: Release 12.1.0.1.0 Production on 星期一 3月 28 15:20:18 2016

Copyright (c) 1982, 2013, Oracle. All rights reserved.

请输入用户名: / as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied

请输入用户名: sys/Blue0937 as sysdba

连接到:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions

SQL> alter system set processes = 90 scope=spfile;

系统已更改。

SQL> alter system set workarea_size_policy = AUTO scope=spfile;

系统已更改。

SQL> alter system set sga_max_size = 500M scope=spfile;

系统已更改。

SQL>
SQL>
SQL> alter system set db_cache_size = 300M scope=spfile;

系统已更改。

SQL>
SQL>
SQL> alter system set shared_pool_size = 100M scope=spfile;

系统已更改。

SQL>
SQL> alter system set memory_max_target = 0 scope=spfile;

系统已更改。

SQL> alter system set memory_target = 0 scope=spfile;

系统已更改。

SQL> shutdown ;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-04031: unable to allocate 589152 bytes of shared memory (“shared pool”,”unkn
own object”,”sga heap(1,0)”,”KXDBIO state obj”)
SQL> startup nomount
ORA-04031: unable to allocate 589152 bytes of shared memory (“shared pool”,”unkn
own object”,”sga heap(1,0)”,”KXDBIO state obj”)
SQL> startup pfile=’D:\Program\oracle12c\admin\blue\pfile\init_blue.ora’
ORACLE 例程已经启动。

Total System Global Area 939495424 bytes
Fixed Size 2409368 bytes
Variable Size 675286120 bytes
Database Buffers 255852544 bytes
Redo Buffers 5947392 bytes
数据库装载完毕。
数据库已经打开。
SQL> qui^A