数据库常用查询
Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名
查询所有表名:
select t.table_name from user_tables t;
查询所有字段名:
select t.column_name from user_col_comments t;
查询指定表的所有字段名:
select t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';
查询指定表的所有字段名和字段说明:
select t.column_name, t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';
查询所有表的表名和表说明:
select t.table_name,f.comments from user_tables t inner join user_tab_comments f on t.table_name = f.table_name;
查询模糊表名的表名和表说明:
select t.table_name from user_tables t where t.table_name like 'BIZ_DICT%';
select t.table_name,f.comments from user_tables t inner join user_tab_comments f on t.table_name = f.table_name where t.table_name like 'BIZ_DICT%';
--查询表的数据条数、表名、中文表名
select a.num_rows, a.TABLE_NAME, b.COMMENTS
from user_tables a, user_tab_comments b
WHERE a.TABLE_NAME = b.TABLE_NAME
order by TABLE_NAME;
数据库相关查询语句
数据库闪回查询视图
flashback_transaction_query
查询数据库当前进程的连接数:
select count(*) from v$process;
查看数据库当前会话的连接数:
select count(*) from v$session;
查看数据库的并发连接数:
select count(*) from v$session where status='ACTIVE';
查看当前数据库建立的会话情况:
select sid,serial#,username,program,machine,status from v$session;
查询数据库允许的最大连接数:
select value from v$parameter where name = 'processes';
或者:show parameter processes;
修改数据库允许的最大连接数:
alter system set processes = 300 scope = spfile;
(需要重启数据库才能实现连接数的修改)
重启数据库:
shutdown immediate;
startup;
查看当前有哪些用户正在使用数据:
select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machine
from v$session a,v$sqlarea b
where a.sql_address = b.address
order by cpu_time/executions desc;
查看buffercache命中率
select (1 - (sum(decode(name, 'physical reads', value, 0)) /
(sum(decode(name, 'dbblockgets', value, 0)) +
sum(decode(name, 'consistentgets', value, 0))))) * 100 "Hit Ratio"
from v$sysstat;
select name,value from v$sysstat where name in('db block gets','consistent gets','physical reads');
命中率计算公式
Hit Radio=1-physical reads/(db block gets+consistent gets)
归档redo日志有多少组 每组多大
select member from v$logfile;
select group#, members, bytes / 1024 / 1024, status from v$log;
查询表空间占用率
select b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes / 1024 / 1024 || 'M' 字节数,
(b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 || 'M' 已使用,
sum(nvl(a.bytes, 0)) / 1024 / 1024 || 'M' 剩余空间,
100 - sum(nvl(a.bytes, 0)) / (b.bytes) * 100 占用百分比
from dba_free_space a, dba_data_files b
where a.file_id = b.file_id
group by b.tablespace_name, b.file_id, b.bytes
order by b.file_id;
查看某一表空间下的表占用情况
select segment_name, sum(bytes) / 1024 / 1024 || 'M '
from dba_segments
where TABLESPACE_NAME = 'NXPT'
AND segment_type = 'TABLE'
GROUP BY segment_name ;
SELECT OWNER OWNER_NAME,
TABLE_NAME TABLE_NAME,
TABLESPACE_NAME TABLESPACE_NAME,
BLOCKS ACTUAL_BLOCKS,
BLOCKS + EMPTY_BLOCKS TOTAL_BLOCKS,
(BLOCKS + EMPTY_BLOCKS) * 8192 / (1024 * 1024) "TABLE_SIZE[MB]"
FROM DBA_TABLES
WHERE TABLESPACE_NAME like 'SYSAUX'
and BLOCKS is not null
and BLOCKS <> 0
order by "TABLE_SIZE[MB]" desc;
1、查看数据库字符集
服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
2、修改字符集
8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
Startup nomount;
Alter database mount exclusive;
Alter system enable restricted session;
Alter system set job_queue_process=0;
Alter database open;
Alter database character set zhs16gbk;
3、怎么查看数据库版本
select * from v$version
包含版本信息,核心版本信息,位数信息(32位或64位)等
至于位数信息,在Linux/unix平台上,可以通过file查看,如
file $ORACLE_HOME/bin/oracle
4、查看进程连接数
select b.INST_ID, b.MACHINE, b.PROGRAM , count (*) ,b.STATUS
from gv$process a, gv$session b
where a.ADDR = b.PADDR and b.USERNAME is not null
group by b.INST_ID,b.MACHINE , b.PROGRAM ,b.STATUS
order by count (*) desc;