oracle常用sql语句

1、快速备份表:

create table p_purchase_order_bak as select * from p_purchase_order

2、查询db_link详细信息

select * from dba_db_links

3、oracle 中如何查看某个表所涉及的存储过程

SELECT DISTINCT * FROM user_source
WHERE TYPE = 'PROCEDURE'
AND upper(text) LIKE '%PS_KL_ABS_002_DATA%';

4、oracle数据库查看和解除死锁

select sess.sid, 
sess.serial#,
lo.oracle_username, 
lo.os_user_name, 
ao.object_name, 
lo.locked_mode,
SESS.machine
from v$locked_object lo, 
dba_objects ao, 
v$session sess 
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

5、杀死对应的进程

alter system kill session '738,1429';

7、ORACLE的闪回功能

1)查询该时间段这个表的状态

select * from 表名
as of timestamp to_timestamp('2018-10-12 9:30:00', 'yyyy-mm-dd hh24:mi:ss');

2)开启闪回

alter table 表名 enable row movement;

3)把表的状态闪回到这个时间段

flashback table 表名 ?to timestamp TO_TIMESTAMP('2018-10-12 9:30:00', 'yyyy-mm-dd hh24:mi:ss');

4)用完记得关闭闪回

alter table 表名 disable row movement

5)快照频率和保留时间都可以由用户修改。要查看当前的设置,可以使用下面的语句:

select snap_interval, retention
from dba_hist_wr_control;

这些 SQL 语句显示快照每小时采集一次,采集的数据保留 7 天。要修改设置-例如,快照时间间隔为 20 分钟,保留时间为两天-您可以发出以下命令。参数以分钟为单位。

begin
dbms_workload_repository.modify_snapshot_settings (
interval => 20,
retention => 2*24*60
);end;

8、oracle数据库查询当前库中有多少张表

select table_name from user_tables

9、索引相关

1)根据表名,查询一张表的索引

select * from user_indexes where table_name=upper('表名');

2)根据索引号,查询表索引字段

select * from user_ind_columns where index_name=('索引名');

3)根据索引名,查询创建索引的语句

select dbms_metadata.get_ddl('INDEX','索引名', ['用户名']) from dual ;
--['用户名']可省,默认为登录用户

PS:dbms_metadata.get_ddl还可以得到建表语句,如:

SELECT DBMS_METADATA.GET_DDL('TABLE','表名', ['用户名']) FROM DUAL ; //取单个表的建表语句,['用户名']可不输入,默认为登录用户
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u; //取用户下所有表的建表语句

10、存储空间可以用如下语句查

select * from user_segments s where s.BYTES is not null order by s.BYTES desc

11、查记录条数可以用如下语句

select *  from user_tables t where t.NUM_ROWS is not null order by t.NUM_ROWS desc

12、获取当天是当年的第几周

select to_char(sysdate,'iw') from dual;

13、获取当天是当月的第几周

sql语句写法有两种:
1、SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" from dual; 
2、SELECT TO_CHAR(SYSDATE,'W') AS "weekOfMon" from dual;

 14、删除用户及其数据

drop user user_name cascade;
如果没有删除用户的权限,则可以执行:
select 'drop table '||table_name||';' from cat where table_type='TABLE'
将得到的结果全部复制粘贴到另一个sql窗口,执行。

 15、本地oracle数据库快速导出,直接在dos窗口执行如下命令:

exp username/passward@XE file=d:\daochu.dmp full=y

 

posted @ 2019-06-19 18:37  敲代码的尼采  阅读(253)  评论(0编辑  收藏  举报