1. 首页 > 笙耀百科 >

oracle数据库语句查询 oracle数据库查询sid

oracle查看所有表及各表行数

在Oracle数据库中,查看所有表及对应个表的行数,只用一个select语句查询table_name和num_rows两个字段即可。table_name是表名,num_rows代表表的行数。

oracle数据库语句查询 oracle数据库查询sidoracle数据库语句查询 oracle数据库查询sid


具体如下:

1、查询数据库所有的表sql:select t.table_name,t.num_rows from all_tables t;

sql执行后的输出结果如下图:

2、查询当前用户表sql:select t.table_name,t.num_rows from user_tables t;

sql执行后输出结果如下图:

扩展资料:

分享一些ORACLE中,对所有表的查询sql:

1、查询所有表名:

select t.table_name from user_tables t;

2、查询所有字段名:

select t.column_name from user_col_comments t;

3、查询指定表的所有字段名:

select t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';

4、查询指定表的所有字段名和字段说明:

select t.column_name, t.column_name from user_col_comments t where t.table_name = 'BIZ_DICT_XB';

5、查询所有表的表名和表说明:

select from user_tables t inner join user_tab_comments f on t.table_name = f.table_name;

6、查询模糊表名的表名和表说明:

select t.table_name from user_tables t where t.table_name like 'BIZ_DICT%';

select from user_tables t inner join user_tab_comments f

on t.table_name = f.table_name where t.table_name like 'BIZ_DICT%';

7、查询表的数据条数、表名、中文表名

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;

参考资料来源:

参考资料来源:

查询Oracle数据库表空间信息的方法

表空间是数据库中的逻辑单位与存储空间单位 数据库系统通过表空间为数据库对象分配空间 表空间在物理上体现为磁盘数据文件 每一个表空间由一个或多个数据文件组成 一个数据文件只可与一个表空间相联系 这是逻辑与物理的统一 了解表空间和数据文件的的属性及使用率 是数据库管理员的一项重要职责 在本文中笔者将以oracle为例 详细介绍查询Oracle数据库表空间信息和数据文件信息的方法 希望能帮助大家更深入了解表空间的知识和应用

一 如何查看Oracle数据库中表空间信息的方法

从Oracle数据库中工具入手

使用oracle enterprise manager console工具 这是oracle的客户端工具 当安装oracle服务器或客户端时会自动安装此工具 在windows操作系统上完成oracle安装后 通过下面的方法登录该工具 开始菜单——程序——Oracle OraHome ——Enterprise Manager Console(单击)——oracle enterprise manager console登录——选择 独立启动 单选框—— 确定 —— oracle enterprise manager console 独立 ——选择要登录的 实例名 ——弹出 数据库连接信息 ——输入 用户名/口令 (一般使用sys用户) 连接身份 选择选择SYSDBA—— 确定 这时已经成功登录该工具 选择 存储 ——表空间 会看到如下的界面 该界面显示了表空间名称 表空间类型 区管理类型 以 兆 为单位的表空间大小 已使用的表空间大小及表空间利用率

从Oracle数据库中命令方法入手

通过查询数据库系统中的数据字典表(data dictionary tables)获取表空间的相关信息 首先使用客户端工具连接到数据库 这些工具可以是SQLPLUS字符工具 TOAD PL/SQL等 连接到数据库后执行如下的查询语句

select a a 表空间名称 c c 类型 c c 区管理 b b / / 表空间大小M (b b a a )/ / 已使用M substr((b b a a )/b b ) 利用率from(select tablespace_name a sum(nvl(bytes )) a from dba_free_space group by tablespace_name) a (select tablespace_name b sum(bytes) b from dba_data_files group by tablespace_name) b (select tablespace_name c contents c extent_management c from dba_tablespaces) cwhere a a =b b and c c =b b ;

该语句通过查询dba_free_space dba_data_files dba_tablespaces这三个数据字典表 得到了表空间名称 表空间类型 区管理类型 以 兆 为单位的表空间大小 已使用的表空间大小及表空间利用率 dba_free_space表描述了表空间的空闲大小 dba_data_files表描述了数据库中的数据文件 dba_tablespaces表描述了数据库中的表空间

上面语句中from子句后有三个select语句 每个select语句相当于一个视图 视图的名称分别为a b c 通过它们之间的关联关系 我们得到了表空间的相关信息

语句执行结果如下

上面描述中分别介绍了查看Oracle数据库中表空间信息的工具方法和命令方法

二 查询Oracle数据库中数据文件信息的方法

查看Oracle数据库中数据文件信息的工具方法

使用上面介绍过的方法登录oracle enterprise manager console工具 选择 存储 ——数据文件 会看到如下的界面 该界面显示了数据文件名称 表空间名称 以 兆 为单位的数据文件大小 已使用的数据文件大小及数据文件利用率

查看Oracle数据库中数据文件信息的命令方法

通过查询数据库系统中的数据字典表(data dictionary tables)获取数据文件的相关信息 首先使用客户端工具连接到数据库 这些工具可以是SQLPLUS字符工具 TOAD PL/SQL等 连接到数据库后执行如下的查询语句

select b file_name 物理文件名 b tablespace_name 表空间 b bytes/ / 大小M (b bytes sum(nvl(a bytes )))/ / 已使用M substr((b bytes sum(nvl(a bytes )))/(b bytes) ) 利用率from dba_free_space a dba_data_files bwhere a file_id=b file_idgroup by b tablespace_name b file_name b bytesorder by b tablespace_name

上面描述中分别介绍了查看Oracle数据库中数据文件信息的工具方法和命令方法

三 查看临时表空间和数据库文件的方法

在oracle数据库中 临时表空间主要用于用户在使用order by group by语句进行排序和汇总时所需的临时工作空间 要查询数据库中临时表空间的名称 大小及数据文件 可以查询数据字典dba_tablespaces及dba_data_files 命令如下

select a talbespace_name 表空间名称 b bytes 大ytes b file_name 数据文件名from dba_tablespaces a dba_data_files bWhere a talbespace_name=b talbespace_name and ntents= TEMPORARY ;

查询结果如下

从oracle i开始 可以创建Temporary tablespace类表空间 即 临时 表空间 这类表空间使用临时文件 临时文件的信息被存储在数据字典V$tempfile中 命令如下

Select file# status name from V$tempfile;

查询数据字典V$tempfile结果如下

在上面介绍的方法中 建议掌握命令方法 因为你的环境可能没有图形工具 而SQLPLUS一般情况下都是可以使用的 有了命令脚本 很容易得到表空间和数据文件的相关信息 另外 数据库管理员应该多整理命令脚本 在需要时直接执行脚本以提高工作效率

lishixinzhi/Article/program/Oracle/201311/18471

如何查看oracle数据库中执行了哪些sql语句

一、通过PL/SQL Dev工具

1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。

2、先执行 EXPLAIN PLAN FOR select from tableA where paraA=1,再 select from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行了,看到的结果和1中的一样,所以使用工具的时候使用1方法。

注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。还有使用工具方法查看看到的信息不全,有些时候我们需要sqlplus的支持。

二、通过sqlplus

1.简单的办法

Sql> set autotrace on

Sql> select from dual;

执行完语句后,会显示explain plan 与 统计信息。

这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行,使优化的周期大大增长。如果不想执行语句而只是想得到执行可以采用:

Sql> set autotrace traceonly

这样,就只会列出执行,而不会真正的执行语句,大大减少了优化时间。虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:

(1)在要分析的用户下:

Sqlplus > @ ?

dbmsadminutlxplan.sql

(2) 用sys用户登陆

Sqlplus > @ ?sqlplusadminplustrce.sql

Sqlplus > grant plustrace to user_name;

- - user_name是上面所说的分析用户

2.用explain plan命令

(1) sqlplus > explain plan for select from testdb.myuser

(2) sqlplus > select from table(dbms_xplan.display);

上面这2种方法只能为在本会话中正在运行的语句产生执行,即我们需要已经知道了哪条语句运行的效率,我们是有目的只对这条SQL语句去优化。其实,在很多情况下,我们只会听一个客户抱怨说现在系统运行很慢,而我们不知道是哪个SQL引起的。此时有许多现成的语句可以找出耗费资源比较多的语句,如:

SELECT ADDRESS, substr(SQL_TEXT,1,20) Text, buffer_gets, executions,

buffer_gets/executions AVG FROM v$sqlarea

WHERE executions>0 AND buffer_gets > 100000 ORDER BY 5;

ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG

-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------

66D83D64 select t.name, (sel 421531 60104 7.01336017

66D9E8AC select t.schema, t.n 1141739 2732 417.913250

66B82BCC select s.synonym_nam 441261 6 73543.5

从而对找出的语句进行进一步优化。当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行,这需要对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)。

3、启用SQL_TRACE跟踪所有后台进程活动:

全局参数设置: .OracleHome/admin/SID/pfile中指定: SQL_TRACE = true (10g)

当前session中设置:

SQL> alter session set SQL_TRACE=true;

SQL> select from dual;

SQL> alter session set SQL_TRACE=false;

对其他用户进行跟踪设置:

SQL> select sid,serial#,username from v$session where username='XXX';

SID SERIAL# USERNAME

------ ---------- ------------------

127 31923 A

128 54521 B

开启跟踪:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,true);

关闭跟踪:SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,false);

然后使用oracle自带的tkprof命令行工具格式化跟踪文件。

4、使用10046事件进行查询:

10046事件级别:

Lv1 - 启用标准的SQL_TRACE功能,等价于SQL_TRACE

Lv4 - Level 1 + 绑定值(bind values)

Lv8 - Level 1 + 等待事件跟踪

Lv12 - Level 1 + Level 4 + Level 8

全局设定:

OracleHome/admin/SID/pfile中指定: EVENT="10046 trace name context forever,level 12"

当前session设定:

开启:SQL> alter session set events '10046 trace name context forever, level 8';

关闭:SQL> alter session set events '10046 trace name context off';

对其他用户进行设置:

SQL> select sid,serial#,username from v$session where username='XXX';

SID SERIAL# USERNAME

------ ---------- ------------------

127 31923 A

SQL> exec dbms_system.set_ev(127,31923,10046,8,'A');

5、使用tkprof格式化跟踪文件: (根据下面SQL语句得到的文件都不存在该目录下,郁闷啊,懵懂啊...)

一般,一次跟踪可以分为以下几步:

1、界定需要跟踪的目标范围,并使用适当的命令启用所需跟踪。

2、经过一段时间后,停止跟踪。此时应该产生了一个跟踪结果文件。

3、找到跟踪文件,并对其进行格式化,然后阅读或分析。

--使用一下SQL找到当前session的跟踪文件:

SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_namefrom( select p.spid from v$mystat m,v$session s, v$process pwhere m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,( select t.instance from v$thread t,v$parameter vwhere v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,( select value from v$parameter where name = 'user_dump_dest' ) d;-- 其它用户的 session SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| '_ora_' ||p.spid|| '.trc' trace_file_name from ( select p.spid from v$session s, v$process p where s.sid= '27' and s. SERIAL#= '30' and p.addr = s.paddr) p, ( select t.instance from v$thread t,v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from v$parameter where name = 'user_dump_dest' ) d;

--查找后使用tkprof命令,将TRACE文件格式为到D盘的explain_format.txt文件中

SQL> $tkprof d:/oracle/admin/FZLGFM/udump/fzlgfm_ora_3468.trc d:/explain_format.txt

文件内容大致如下(看不太懂....懵懂啊.....天啊....神啊.....过几时就懂了/////////////)

TKPROF: Release 9.2.0.1.0 - Production on 星期二 4月 20 13:59:20 2010

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Trace file: d:/oracle/admin/FZLGFM/udump/fzlgfm_ora_3468.trc

Sort options: default

count = number of times OCI procedure was executed

cpu = cpu time in seconds executing

elapsed = elapsed time in seconds executing

disk = number of physical reads of buffers from disk

query = number of buffers gotten for consistent read

current = number of buffers gotten in current mode (usually for update)

rows = number of rows processed by the fetch or execute call

alter session set events '10046 trace name context forever, level 8'

call count cpu elapsed disk query current rows

------- ------ -------- ---------- ---------- ---------- ---------- ----------

Parse 0 0.00 0.00 0 0 0 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 0 0.00 0.00 0 0 0 0

------- ------ -------- ---------- ---------- ---------- ---------- ----------

total 1 0.00 0.00 0 0 0 0

Misses in library cache during parse: 0

Misses in library cache during execute: 1

Optimizer goal: CHOOSE

Parsing user id: SYS

查询Oracle正在执行和执行过的SQL语句

正在执行的

select a username a sid b SQL_TEXT b SQL_FULLTEXT

from v$session a v$sqlarea b

where a sql_address = b address

执行过的

select b SQL_TEXT b FIRST_LOAD_TIME b SQL_FULLTEXT

from v$sqlarea b

where b FIRST_LOAD_TIME beeen / : : and

/ : : order by b FIRST_LOAD_TIME

(此方法好处可以查看某一时间段执行过的sql 并且 SQL_FULLTEXT 包含了完整的 sql 语句)

其他

select OSUSER PROGRAM USERNAME SCHEMANAME B Cpu_Time STATUS B SQL_TEXT

from V$SESSION A LEFT JOIN V$SQL B ON A SQL_ADDRESS=B ADDRESS AND A SQL_HASH_VALUE=B HASH_VALUE order by b cpu_time desc

select address sql_text piece

from v$session v$sqltext

where address = sql_address

and machine = < you machine name >

order by address piece

查找前十条性能的sql

SELECT FROM (select PARSING_USER_ID EXECUTIONS SORTS

MAND_TYPE DISK_READS sql_text FROM v$sqlarea

order BY disk_reads DESC )where ROWNUM< ;

查看占io较大的正在运行的session

SELECT se sid se serial# pr SPID se username se status

se terminal se program se MODULE se sql_address st event st

p text si physical_reads

si block_changes FROM v$session se v$session_wait st

v$sess_io si v$process pr WHERE st sid=se sid AND st

sid=si sid AND se PADDR=pr ADDR AND se sid> AND st

lishixinzhi/Article/program/Oracle/201311/19070

oracle 数据库sql 查询语句。通过一个sql语句对多个表分别进行查询。

可以通过”dba_constraints

“表中的信息来查看

sql:select

t.

from

dba_constraints

twhere

t.constraint_type='p'

and

t.table_name='tablename';

解释:读取dba_constraints

表中字段"键类型"为“p”(必须大写)和字段"表名"为“tablename”的主键的信息。

Oracle数据库查询十个小技巧(三)

第八个技巧 慎用Like等通配符

Like关键字 从技术上来说 是一个非常友善的通配符 利用这个通配符 我们可以实现很多模糊查询 如现在在一个人事档案系统中 用户想知道身份证号码以 开头的人事信息 此时 就可以利用Like语句实现 我们可以利用下面的条件语句 实现我们的需求 where 身份证号码 like % 通过这个条件语句 可以查到所有身份证以 开头的号码

但是 当用户在一张大表中采用这个LIKE语句的话 就会发现这个查询语句的运行效率非常的慢 这是什么原因造成的呢?其实 不管是Like 关键字 若采用MATCHES关键字的话 若在大量数据中查找符合条件的记录 则其运行效率也比较低 这主要是其技术特性所造成的

Like与Matches两个关键字 其支持通配符匹配 在有些专业书籍上把这个叫做 正规表达式 不过由于在利用这些关键字查询的时候 数据库系统不是通过索引来查询 而是采用顺序扫描的方式来查询 显然 真是这种技术特性 造成了Like与Mateches两个关键字查询效率的低下 特别是在复杂查询或者大表查询中 用户可以明显感觉到速度比较慢

索引是数据库中的一个重要的数据结构 索引如果利用的合理的话 可以大幅度的提升数据库的查询性能 一般情况下 我们在数据库设计的时候 要充分的利用索引 来提高数据库的运行效率 如对于一些经常需要用到的查询功能 我们需要为没有指定外键的列建立索引;如有查询大表数据 而且又需根据好几个字段的值对其进行排序 也需要在这些列上建立复合索引 特别是在一些应用系统上 往往可以按以下字段的名称 就会对这个字段进行排序 遇到这种情况的话 更加需要在这些频繁进行排序的列上建立索引 以提高重新排序的效率 可见 若在查询的时候 若不能利用索引提高查询效率的话 则就好像跑车失去四轮驱动 速度会大受影响

所以 在数据库系统设计中 要尽量避免采用Like或者Matche关键字 有时候 我们可以利用其他运算符号来代替 如我们可以利用〉(大于)或者<(小于)符号来达到类似的需求 若真的要采用这两个关键字的话 则就需要做好查询优化方面的工作 如不要在基础表中直接利用这个两个关键字 而是通过报表视图 或者临时表等来查询 以减少其不良影响

第九个技巧 利用注释提高查询语句的可读性

在数据库设计中 有一个非常奇怪的现象 一些专家级的数据库设计人员 在写查询语句的时候 非对语句进行详细的注释 有时会 注释的内容大大超过了查询代码本身的篇幅 可是 往往一些入门不久的数据库设计人员 不喜欢写注释语句 这是一个很反常的现象

笔者刚开始接触数据库的时候 也不喜欢写注释语句 觉得写注释语句太浪费时间 但是 一个偶然的事件让笔者改掉了这个坏习惯 那时笔者在观摩一个专家设计数据库的时候 被其密密麻麻的注释惊呆了 看了其代码之后 笔者可以非常轻松的阅读完其所有的代码 不愧为是专家级的人物 看了他的注释之后 在看看自己编写的代码注视 那真是大巫见小巫了 从此之后 笔者也在慢慢培养自己编写代码的习惯 现在笔者在数据库设计的时候 注释已经写的很详细了 至少笔者的同事在看到我的注释之后 不用看源代码就知道笔者要实现的目的了

在编写注释的时候 要注意几个问题

一是注释越详细越好 其实 注释多牺牲一点磁盘空间 而不会对数据库的性能产生任何不良的影响 相反 注释详细的话 对于后续数据库维护与管理 系统二次开发的等等 都会提供很大的帮助

二是采用英文注释 若采用中文注释的话 有时候数据库语言设置不当 在数据库实例安装的时候 不会把中文的注释带过去 所以 作为数据库管理员 要有一定的英语基础 学会利用英语写注释 其实 这也不是很难 只要多看看别人设计的数据库注释 把他们常用的注释下来 通过选择合适的进行 粘贴就可以完成任务

三是不仅在写查询语句的时候 要做好代码的注释工作 在编写其他代码的时候 如过程 函数等等 也要添加详细的代码 以增加这些复杂功能的可读性

四是注释的内容 一般注释应该包含如下几方面的内容 一是这段代码要实现的功能;二是这段代码需要调用的参数;三是这段代码输出的结果 若是多表关联查询的话 能够说明表之间的对应关系 若在查询语句中 直接调用了函数的话 则能够注明这个函数的功能;等等 终止一个原则就是 让其他人看到这个注释 不再需要去查询其他的资料 就可以明白这段代码的含义

详细的注释内容 不仅不会降低数据库的运行性能 而且还可以提高数据库的管理与维护的效率;同时也可以加快前台应用程序开发设计的速度 又因为查询语句是系统中利用的多的语句 也是引用的频繁的语句 故在查询语句中 更加需要做好相关的注释

第十个技巧 必要的时候 限制用户所使用的行

在使用一些大型管理系统的时候 如ERP系统 我们若查询产品信息 默认的情况下 若记录比较多的时候 其不会把所有的记录都查询出来 如在ERP系统的数据库中 其有 个产品信息 而端子类的产品信息就占据到 个 此时 我们在查询条件中 若产品类别限制为 端子 的话 则其查询出来的结果也可能不是所有的端子 默认显示的话 可能只有前面的 个端子类产品 若用户需要看到全部的产品信息 就需要点击 显示全部 按钮 才可以显示出全部的信息

其实 不管是一些应用程序如此设计 在Oracle数据库中 本身也有这方面的限制 如直接在PL/SQL客户端中查询数据的话 其显示的记录默认情况下也是有限制的 而不会把所有符合条件的语句查询出来 若用户需要查询所有符合条件的记录 则需要点击 继续 按钮 以让数据库显示所有的记录

为什么要做类似的限制呢?这主要就是为了提高数据库查询的性能 我们直接在数据库服务器上 在几百万条记录中查询的话 显示几百条记录跟现实几千条记录所花费的时间明显不同 前者可能只需要 秒即可 而后者可能需要 分钟 所以 为了减少用户等待的时间 我们往往需要限制首次查询默认显示的记录数字

如我们往往在查询语句中 利用top 来让数据库只显示前 条记录 如此的话 可以明显的缩短用户的等待时间 默认情况下 是根据记录创建的时间顺序 来显示记录的 迟创建的记录 其显示在前 以此类推

lishixinzhi/Article/program/Oracle/201311/16756

oracle中根据时间查询三个月前订单的sql语句

1.打开PLSQL,连接到oracle数据库,并使用SQL语句创建一个测试表。

2. 使用SQL语句将3行测试数据插入到前面步骤中创建的测试表中,并使用系统的当前时间插入date字段。

3.执行SQL后,记得点击submit按钮,将100个提交的更改保存到数据库中,否则,数据将不会存储在数据库中。

4.提交后,查询刚刚插入的数据,选择*fromTestDate。

5.在第一行中修改Updatedate字段的值。此时,日期格式的字符被连接到update,这是oracle无法执行的。

6.更改第一行Updatedate字段的值,将字符串的日期转换为日期类型。

7.修改第一行Updatedate字段的值,使用当前日期减少到2天,直接减少2天。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息