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