oracle 知识点

转载自:https://www.cnblogs.com/tianmingt/articles/4259554.html

1、正在连接的用户不能删除,确实要删除的话,如下
select sid,serial#,username from v$session where user='USERNAME';
alter system kill session 'sid,serial#';
drop user username cascade;

 

2、在一台机器中想分析下执行计划,但是在sqlplus中输入set autotrace on 报cannot set autotrace 错误
解决方法如下:
首先必须采用用Oracle的sqlplus登陆sys账号
sqlplus " sys/sys@XXX as sysdba "
然后执行如下脚本:
@?\sqlplus\admin\plustrce.sql (创建plustrace角色并授权) 
@?\rdbms\admin\utlxplan.sql (创建执行计划的表) 
然后执行: grant all on plan_table to public; (也可以授权给某一个单独的用户)
grant plustrace to public ; 
然后就可以进行 set autotrace了 但是只能在sqlplus中运行相关命令,在pl/sql developer等工具中仍然报错
关于Autotrace几个常用选项的说明:
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出


3、赋予创建dblink的权限有三种: sys 用户下
grant create database link to user ; --只有user用户能使用的dblink
grant create public database link to user ;--所有用户都可以使用的dblink
grant drop public database link to user; --删除dblink的权限

--创建
create (public) database link DB133
connect to gzf_common identified by "gzf_common"
using ' (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.30.242.133)(PORT = 1521))
)
(CONNECT_DATA =
(SID = fgora1)
)
)';

--删除dblink 
DROP (public) DATABASE LINK DB133;
--查询该用户的dblink
select * from user_db_links;
--查询表
select * from scott.emp@DB133;

 

4、查某个表信息
select a.table_name, --表名
a.COLUMN_NAME, --字段名
a.DATA_TYPE, --数据类型
a.DATA_LENGTH, --长度
b.COMMENTS --注释
from user_tab_columns a
inner join user_col_comments b
on a.COLUMN_NAME = b.COLUMN_NAME
where a.table_name = 'TPG_BMDJ'
and b.TABLE_NAME = 'TPG_BMDJ'
order by a.column_id

 

5、查某个用户下的表信息
select a.table_name 表名,
b.created 创建时间,
b.LAST_DDL_TIME 最后修改时间,
c.LAST_ANALYZED 最后分析时间,
c.tablespace_name 表空间,
c.num_rows 行数, --要经过表分析后才精确
d.BYTES / 1024 / 1024||'M' 大小,
a.COMMENTS 表注释
from user_tab_comments a
inner join user_objects b on a.TABLE_NAME = b.OBJECT_NAME
inner join user_tables c on b.OBJECT_NAME = c.TABLE_NAME
inner join user_segments d on c.TABLE_NAME = d.segment_name
--and a.table_name like 'TPG%'
and d.segment_type = 'TABLE'
--and substr(a.table_name, -1) not in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')
order by num_rows desc


6、每天复制表,表名为每天的日期 yyyymmdd
create or replace procedure inserta
Authid Current_User is
v_tablename varchar2(100);
v_sql varchar2(1000);
begin
select upper('tablename')||replace(to_char(sysdate,'yyyy-mm-dd'),'-','') into v_tablename from dual;
v_sql:= 'create table '||v_tablename||' as select * from tpg_gzfspb';
execute immediate v_sql;
end;


7、根据日期查星期
select to_char(sysdate,'day') from dual;
select sqbbh,sqsj,to_char(sqsj,'day') from tpg_gzfspb
select to_char(to_date('2014-09-07','yyyy-mm-dd'),'day') from dual;

 

8、listagg( ) within group (order by ) (11g新增) 与 wm_concat(10g及以前)
select deptno,wm_concat(ename)name,count(*)rs from emp group by deptno
select deptno,listagg(ename,',') within group (order by ename ) aa from emp group by deptno
select deptno,listagg(ename,',') within group (order by ename ) aa,count(*)bb from emp group by deptno


9、回收站数据清空与恢复 从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中。删除的表系统会自动给他重命名就是你看到的 【BIN$】开头的名字,通过 show recyclebin 命令可以查看被删掉的表的详细信息,或者查询 select * from recyclebin;

收回表的命令:
flashback table 原表名 to before drop;
清空回收站的命令,如果数据量大,可在sqlplus 或cmd 命令中操作,速度较快
purge recyclebin;
如果不想删除的表经过回收站
drop table 表名 purge;
或者停用数据库的回收战功能
10.1版本中,修改隐藏参数 _recyclebin
alter system set "_recyclebin" = false;
10.2版本中及以后
alter system set recyclebin = off;

 

10、检查表空间使用率 dba 权限
SELECT UPPER(F.TABLESPACE_NAME) "表空间名", 
D.TOT_GROOTTE_MB "表空间大小(M)", 
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", 
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 
2), 
'990.99')||'%' "使用比(%)", 
F.TOTAL_BYTES "空闲空间(M)", 
F.MAX_BYTES "最大块(M)" 
FROM (SELECT TABLESPACE_NAME, 
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES, 
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES 
FROM SYS.DBA_FREE_SPACE 
GROUP BY TABLESPACE_NAME) F, 
(SELECT DD.TABLESPACE_NAME, 
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB 
FROM SYS.DBA_DATA_FILES DD 
GROUP BY DD.TABLESPACE_NAME) D 
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME 
ORDER BY F.TABLESPACE_NAME;

 

11、取随机数据
select * from emp sample(50) 
--Sample值在[0.000001,99.999999]之间。定义结果集中包含记录占总记录数量的百分比。sample只对单表生效,不能用于表连接和远程表
select dbms_random.value from dual;


12、修改数据库SID
sqlplus / as sysdba
create pfile from spfile

创建文件复制到d盘,改名为pfile 
shutdown immediate 
在cmd 中
oradim -delete -sid orcl
oradim -new -sid gzf

然后注册表里的 oracle_sid 改成 gzf 
sqlplus / as sysdba
startup pfile 'd:\pfile.ora'
create spfile from 'd:\pfile.ora'

database 下执行
orapwd file=pwdgzf.ora password=m123

改系统服务名
alter system set service_names=gzf
再改 tsnname 中的配置

 


13、表被lock
有没有被lock,可以通过这2张 view来确定:
v$locked_object, V$session

可以把该 session杀掉。
select sid,serial# from v$session where username ='XXXX'
把得到的sid,serial#号替换到下面的语句中:
alter system kill session 'SID,SERIAL#'


14、创建触发器使表在插入数据时id自增长
create table ttt (id number primary key ,name varchar2(20),age number(2))
create or replace trigger gger_tt 
before insert on ttt
for each row
when (new.id is null)
begin
select ttt_sequence.nextval into :new.id from dual;
end;

--插入数据
insert into ttt(name) values('明')


15、在表中循环插入日期
--创建会话级临时表
create global temporary table rq(id number primary key ,sj varchar2(20))
on commit preserve rows
select * from rq
--循环插入日期
declare 
c_i number :=1;
v_i number ;
v_firstday varchar2(20);
v_lastday varchar(20);
begin
select to_char(sysdate,'yyyy-mm')||'-' into v_firstday from dual;
select to_char(last_day(sysdate),'yyyy-mm-dd') into v_lastday from dual;
select ceil(last_day(sysdate)-trunc(sysdate,'mm'))+1 into v_i from dual;
loop
insert into rq (id,sj) values(c_i,v_firstday||to_char(c_i));
c_i:=c_i+1;
exit when c_i=v_i;
end loop;
end;

 


16、这样查出来是本周一 、相似度函数
select trunc(sysdate,'iw') from dual; 
select UTL_MATCH.EDIT_DISTANCE_SIMILARITy('啊','啊吗') from dual;

17、使用序列作为插入值,初始值不是 1 
---创建序列
create sequence SEQ_TEST
minvalue 1
maxvalue 99999999999
start with 21
increment by 1
cache 20;

创建表时 
CREATE TABLE tbl_test(
test_id NUMBER PRIMARY KEY, 
test_name VARCHAR2(20)
)
SEGMENT CREATION IMMEDIATE; --加上这句 可使初始值为1

或执行ALTER SYSTEM SET deferred_segment_creation=FALSE; dba 权限
insert into tbl_test values(seq_test.nextval,'abc')
select * from tbl_test


18、PDM导出表结构时没有注释执行语句 执行顺序 1 工具 2 execute commands 3 复制到 run script 运行
Option Explicit 
ValidationMode = True 
InteractiveMode = im_Batch 
Dim mdl ' the current model 
' get the current active model 
Set mdl = ActiveModel 
If (mdl Is Nothing) Then 
MsgBox "There is no current Model " 
ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then 
MsgBox "The current model is not an Physical Data model. " 
Else 
ProcessFolder mdl 
End If 

' This routine copy name into comment for each table, each column and each view 
' of the current folder 
Private sub ProcessFolder(folder) 
Dim Tab 'running table 
for each Tab in folder.tables 
if not tab.isShortcut then 
tab.comment = tab.name 
Dim col ' running column 
for each col in tab.columns 
col.comment= col.name 
next 
end if 
next 

Dim view 'running view 
for each view in folder.Views 
if not view.isShortcut then 
view.comment = view.name 
end if 
next 

' go into the sub-packages 
Dim f ' running folder 
For Each f In folder.Packages 
if not f.IsShortcut then 
ProcessFolder f 
end if 
Next 
end sub

 

19、在cmd 命令中 通过sqlplus 登录时,提示不是内部或外部命令,也不是可运行的程序或批处理文件
查看 path环境变量里有没有配置oracle,没的话 将 bin 路径添加进去 (F:\oracle\product\10.2.0\db_1\BIN)


20、oracle远程连接服务器出现 ORA-12170 TNS连接超时 解决办法
关闭防火墙即可

 

21、oralce卸载步骤:
1、停止服务
2、卸载产品
3、删除变量
4、删除注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[Oracle*]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\[Oracle*]
5、重启,然后删除相关文件夹

 


22、SQL Server 2000/2005中可以快速压缩日志log文件 PropertyManagementCenterIMS 为数据库名 
DUMP TRANSACTION PropertyManagementCenterIMS WITH NO_LOG
BACKUP LOG PropertyManagementCenterIMS WITH NO_LOG
DBCC SHRINKDATABASE(PropertyManagementCenterIMS )

sql server 2008 压缩方法
--查询当前数据库的名称和日志名称 注意 这个和物理文件名可以是不同的 注意
select * from sys.database_files

USE master
ALTER DATABASE PropertyManagementCenterIMS SET RECOVERY SIMPLE WITH NO_WAIT
ALTER DATABASE PropertyManagementCenterIMS SET RECOVERY SIMPLE --简单模式
USE PropertyManagementCenterIMS
DBCC SHRINKFILE ('PropertyManagementCenterIMS_log' , 1, TRUNCATEONLY) --压缩成1M
USE master
ALTER DATABASE PropertyManagementCenterIMS SET RECOVERY FULL WITH NO_WAIT
ALTER DATABASE PropertyManagementCenterIMS SET RECOVERY FULL --还原为完全模式

 

23、oracle 中表被delete 后,空间并没有释放,释放表空间方式,表空间释放后,不能再闪回---- Oracle 10g新增功能
alter table tpr_ydhz enable row movement ;

alter table tpr_ydhz shrink space; --释放空间
查询表大小 select segment_name,bytes,BLOCKS from user_segments where segment_name='TPR_YDHZ'

 

24、闪回表 flashback table TPR_YDHZ to before drop [rename to 表]
闪回删除,即提交后闪回 
alter table tpr_ydhz enable row movement 
flashback table tpr_ydhz to timestamp to_date('2015-01-16 09:05:30','yyyy-mm-dd hh24:mi:ss')


25、创建表时,给主键创建的唯一索引指定索引表空间
create table tmp3( 
id number,
MON VARCHAR2(6) , 
IDNO VARCHAR2(10) , 
constraint pk_tmp primary key (id) 
using index tablespace index_stat
) ;

 

26、分析表 字段 索引 数据字典或视图时得到表的最新信息 比如 行数 数据块 (传统方式)
分析表 analyze table my_table compute statistics; 
等价
analyze table my_table compute statistics for table for all indexes for all columns;

也可删除分析数据
analyze table my_table delete statistics;

call dbms_stats.gather_table_stats('SCOTT','EMP')

 


27、删除重复数据
delete from emp1 e where e.rowid > (select min(x.rowid) from emp1 x where x.empno = e.empno);

DELETE FROM TEST1 A WHERE EXISTS(SELECT 1 FROM TEST1 B WHERE A.EMPNO=B.EMPNO AND A.ROWID>B.ROWID)

 


28、查询低效 SQL 
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, 
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio, 
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run, 
SQL_TEXT 
FROM V$SQLAREA 
WHERE EXECUTIONS>0 
AND BUFFER_GETS > 0 
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 
ORDER BY 4 DESC;

 

29、建立本地分区索引
create index local_index_range_example_id onrange_example(id) local;

create index gidx_range_exampel_id onrange_example(id)
建立全局分区索引
GLOBAL partition by range(id)

(

part_01 values less than(1000),

part_02 values less than(MAXVALUE)

);


30、1、查询Oracle会话的方法
select * from v$session
2、修改Oracle最大连接数的方法 
a、以sysdba身份登陆PL/SQL 或者 Worksheet
b、查询目前连接数
show parameter processes;
c、更改系统连接数
alter system set processes=300 scope=spfile;
d、创建pfile
create pfile from spfile;
e、重启Oracle服务或重启Oracle服务器


31、多列降序排序
SELECT * FROM tpr_cwny WHERE tzid=2 ORDER BY nf DESC,yf DESC

 


32、 创建一个job

var job_num number;
begin
dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+2/24/60'); --第2分钟执行一次
end;


删除一个job 
exec dbms_job.remove(81);exec dbms_job.remove(81); exec dbms_job.remove(81);
这里的数字81是对应DBA_JOBS表中当前要删除的JOB记录所在行的JOB字段的值;


SELECT TRUNC(sysdate) +1 +2/(24)FROM dual; --每天的凌晨2点执行
SELECT TRUNC(next_day(sysdate,2))+2/24 FROM dual; --每周一凌晨2点执行
SELECT TRUNC(LAST_DAY(SYSDATE))+1+2/24 FROM dual; --每月1号凌晨2点执行
SELECT TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24 FROM dual; --每季度的第一天凌晨2点执行
SELECT ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24 FROM dual; --每年7月1日和1月1日凌晨2点
SELECT ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24 FROM dual; --每年1月1日凌晨2点
SELECT Sysdate + 5 / (24*60) FROM dual; --每5分钟执行一次

 

33、查询锁表,kill 进程
SELECT object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号
from v$locked_object l , dba_objects o , v$session s , v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;

alter system kill session 'sid,serial#';


34、 case when exists

SELECT CASE
WHEN EXISTS (SELECT 1 FROM tpr_dwxx WHERE ID=10000016) THEN
1 ELSE 0 END
FROM DUAL;

 

35、
insert all结构的作用是想几个表中同时插入数据。
举个例子:

insert all 
into test1 values(no,name) 
into test2 values(no,sal) 
select empno no,ename name,sal from scott.emp;


36、returning into
returning into 语句用于执行完语句后返回的值,具体返回执行之前或者之后的结果,如下所述:
delete语句的returning into语句返回的是delete之前的结果;
insert语句的returning into语句返回的是insert之后的结果。
update语句的returning into语句返回的是update之后的结果。
returning into 语句与return通用
insert into values语句支持returning语句,insert into select语句不支持。
merge语句不支持returning语句。

例:如下的语句都在存储中,v_age为声明的一个变量
insert into t_test values (1, 'zhangsan','27') returning age into v_age; 
update t_test set age = '28' returning age into v_age; 
delete t_test returning age into v_age; 

 

37、查询死锁及kill 
SELECT l.session_id sid, 
s.serial#, 
l.locked_mode 锁模式, 
l.oracle_username 登录用户, 
l.os_user_name 登录机器用户名, 
s.machine 机器名, 
s.terminal 终端用户名, 
o.object_name 被锁对象名, 
s.logon_time 登录数据库时间 
FROM v$locked_object l, all_objects o, v$session s 
WHERE l.object_id = o.object_id 
AND l.session_id = s.sid 
ORDER BY sid, s.serial#;

模板:alter system kill session 'sid,serial#' immediate;
实例:alter system kill session '145,761' immediate;

 

38、like 查询下线线开头的字符
SELECT * FROM sky.test2 WHERE NAME LIKE '\_%' ESCAPE '\';

 

39、查回滚段
select rownum, sys.dba_rollback_segs.segment_name Name, v$rollstat.extents
Extents, v$rollstat.rssize Size_in_Bytes, v$rollstat.xacts XActs,
v$rollstat.gets Gets, v$rollstat.waits Waits, v$rollstat.writes Writes,
sys.dba_rollback_segs.status status from v$rollstat, sys.dba_rollback_segs,
v$rollname where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and
v$rollstat.usn (+) = v$rollname.usn order by rownum

 


40、通过top sql找出有问题的sql语句
select * from (select * from v$sqlstats order by DISK_READS desc) where rownum<=10;
还可以对ELAPSED_TIME,AVG_HARD_PARSE_TIME等排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle是一种基于关系数据库管理系统的软件,广泛用于各种企业级应用程序中。以下是一些常见的Oracle知识点: 1.关系数据库:Oracle是一种关系型数据库管理系统,它使用表结构来存储和组织数据。每个表包含行和列,行表示记录,列表示数据字段。 2.SQL语言:Oracle使用结构化查询语言(SQL),它是一种用于管理和操作数据库的标准语言。使用SQL,可以通过查询、插入、更新和删除实现对数据的操作。 3.索引和约束:为了提高查询性能和数据完整性,Oracle支持创建索引和约束。索引可以加快数据查询的速度,约束可以限制表中数据的有效性。 4.透明数据加密:为了保护数据的安全性,Oracle提供了透明数据加密功能。通过对数据库进行加密,可以确保数据在传输和存储过程中的安全性。 5.备份和恢复:为了防止数据丢失和系统故障,Oracle提供了备份和恢复功能。可以通过数据库备份来保存数据,并在需要时恢复到先前的状态。 6.并发控制:Oracle使用并发控制机制来处理多个用户同时访问数据库的场景。通过锁定机制和事务管理,可以确保数据的一致性和完整性。 7.故障排除和性能优化:在遇到数据库故障或性能问题时,需要进行故障排除和性能优化。Oracle提供了一系列工具和技术来诊断和解决这些问题。 8.数据库安全:Oracle提供了各种安全措施来保护数据库的安全性。例如,访问控制、身份验证和审计功能,都可以用于防止未经授权的访问和滥用。 9.高可用性:为了确保系统的可用性,Oracle支持高可用性解决方案,如数据复制、故障切换和负载均衡。这些功能可以在系统故障时自动切换,保证业务的连续性。 总之,Oracle是一个功能强大、可靠稳定的关系型数据库管理系统,具有广泛的应用领域和丰富的功能特性。以上只是其中一些常见的知识点,使用Oracle需要不断学习和掌握更多的知识和技巧。 ### 回答2: 以下是300字中文对Oracle知识点的罗列: 1. 数据库管理系统(DBMS):Oracle是一种关系型数据库管理系统,用于存储和管理大量的结构化数据,支持SQL查询语言。 2. 数据库对象:Oracle数据库中的核心对象包括表、索引、视图、序列、存储过程等,用于组织和操作数据。 3. 数据库表:Oracle中的表是数据的基本存储单位,由列(字段)组成,每个列具有特定的数据类型和约束。 4. SQL语言:Oracle使用SQL(Structured Query Language)语言进行数据操作和查询,包括数据的插入、更新、删除和查询等操作。 5. 数据库事务:Oracle支持事务处理,可以确保数据的一致性和完整性。事务是一系列数据库操作的逻辑单元,要么全部执行,要么全部回滚。 6. 数据库连接与用户管理:Oracle支持多用户环境,每个用户都可以拥有自己的数据库对象和权限。管理员可以管理用户帐户和权限。 7. 数据库备份和恢复:Oracle提供备份和恢复机制,可以定期备份数据库以保护数据安全,并在需要时进行恢复操作。 8. 数据库性能优化:Oracle提供了各种性能优化技术和工具,包括索引、分区、查询优化器等,以提高数据库的查询和操作速度。 9. 数据库安全:Oracle提供了多层次的安全机制,包括用户身份验证、权限控制、数据加密等,以保护数据库中的数据免受未经授权的访问。 10. 高可用性和故障恢复:Oracle支持集群和灾备技术,以确保数据库的高可用性和故障恢复能力,包括故障切换、数据冗余和自动恢复等。 总结:以上是对Oracle的一些核心知识点的简要罗列,涵盖了数据库管理、对象、SQL语言、事务、用户管理、备份恢复、性能优化、安全和高可用性等方面的内容。这些知识点对于理解和使用Oracle数据库至关重要,并帮助提升数据库管理和应用开发的效率和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值