这个文件我也不知道是哪里来的,在我电脑上,反正用了好久了,感受不错。拿出来分享一下。若有冒犯,请联系我删掉。java
数据库经常使用的查询和问题的解决方法:算法
建立用户
create user ss
identified by password
[default tablespace tablespace_name]
[temporary tablespace tablespce_name];
建立ss用户,密码为password,使用tablespace_name表空间,若是没有指定表空间,默认表空间为system表空间。
Oracle 10g有用户默认表空间设置,建议在建立用户时必定要指名表空间。sql
/*第1步:建立临时表空间 */数据库
create temporary tablespace user_temp windows
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'数组
size 50m 缓存
autoextend on 服务器
next 50m maxsize 20480m session
extent management local; 并发
/*第2步:建立数据表空间 */
create tablespace user_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
/*第3步:建立用户并指定表空间 */
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;
/*第4步:给用户授予权限 */
grant connect,resource,dba to username;
--建立表空间
create tablespace QCKJDB
datafile 'G:\Oracle_db\QCKJDB.dbf'
size 50m;
--扩展表空间
alter database datafile '\oracle\oradata\anita_2008.dbf' resize 4000m
--建立用户
--bdqn/epet
create user ss
identified by orcl (orcl是密码)
default tablespace epet_tablespace
--drop user ss
--赋与角色 (一组权限的集合)
grant connect,resource to ss
--删除表空间
drop tablespace xxx including contents and datafiles;
--删除临时表空间
DROP TABLESPACE GY18_TEMP INCLUDING CONTENTS AND DATAFILES;
--删除用户
drop user "xxx" CASCADE
--查看全部表空间
select * from dba_tablespaces
-----磁盘占用最多的10个sql语句
SELECT * FROM
(
SELECT PARSING_USER_ID
EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC
)
WHERE ROWNUM<10 ;
-----查看总消耗时间最多的前10条SQL语句
select *
from (select v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(order by v.elapsed_time desc) elapsed_rank
from v$sql v) a
where elapsed_rank <= 10;
--查看CPU消耗时间最多的前10条SQL语句
select *
from (select v.sql_id,
v.child_number,
v.sql_text,
v.elapsed_time,
v.cpu_time,
v.disk_reads,
rank() over(order by v.cpu_time desc) elapsed_rank
from v$sql v) a
where elapsed_rank <= 10;
--查询当前执行IO最多的sql,并按大到小来排序
select cast(buffer_gets/decode(EXECUTions,0,10000,EXECUTions) as int) 平均IO ,
EXECUTions 执行次数,buffer_gets 总逻辑IO,disk_reads 硬盘读取,
sql_text SQl语句 from v$sqlarea
where parsing_schema_name='HQT'
order by buffer_gets desc
--查看表空间使用状况
select a.tablespace_name as 表空间名,total as 总量M,free as 空闲M,total-free 已使用M,a.file_name AS 路径 from
( select tablespace_name,file_name,sum(bytes)/1024/1024 total from dba_data_files
group by tablespace_name,file_name) a,
( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;
--修改表空间大小
alter database datafile '/home/Oracle_db/GY18DB.dbf' resize 1000m;
--修改临时表空间大小
alter database tempfile 'D:\OracleDBTemp\GY18_TEMP.DBF' resize 10240M;
--临时表空间自动扩展
alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' autoextend on next 5m maxsize unlimited;
--查询表空间大小
1. 查询表空间剩余字节大小
SELECT TABLESPACE_NAME, SUM(BYTES)/1024/1024 AS "FREE SPACE(M)"
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME = '&tablespace_name'
GROUP BY TABLESPACE_NAME;
注:若是是临时表空间,请查询DBA_TEMP_FREE_SPACE
SELECT TABLESPACE_NAME, FREE_SPACE/1024/1024 AS "FREE SPACE(M)"
FROM DBA_TEMP_FREE_SPACE
WHERE TABLESPACE_NAME = '&tablespace_name';
--删除表
drop table "EDU"."TEMPSCORE21338922320970" cascade constraints PURGE
--清空表数据
delete from abc;
--查看oracle版本
select * from v$version
--查询数据库的信息
select
DBID, NAME, CREATED,PLATFORM_NAME, RESETLOGS_CHANGE#, RESETLOGS_TIME,
PRIOR_RESETLOGS_CHANGE#, PRIOR_RESETLOGS_TIME, LOG_MODE,
CHECKPOINT_CHANGE#, ARCHIVE_CHANGE#, CONTROLFILE_TYPE, CONTROLFILE_CREATED,
CONTROLFILE_SEQUENCE#, CONTROLFILE_CHANGE#, CONTROLFILE_TIME, OPEN_RESETLOGS,
VERSION_TIME, OPEN_MODE, PROTECTION_MODE, PROTECTION_LEVEL, REMOTE_ARCHIVE,
ACTIVATION#, SWITCHOVER#, DATABASE_ROLE, ARCHIVELOG_CHANGE#, ARCHIVELOG_COMPRESSION,
SWITCHOVER_STATUS, DATAGUARD_BROKER, GUARD_STATUS, SUPPLEMENTAL_LOG_DATA_MIN,
SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, FORCE_LOGGING, PLATFORM_ID,
RECOVERY_TARGET_INCARNATION#, LAST_OPEN_INCARNATION#, CURRENT_SCN,
FLASHBACK_ON, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL, DB_UNIQUE_NAME,
STANDBY_BECAME_PRIMARY_SCN, FS_FAILOVER_STATUS, FS_FAILOVER_CURRENT_TARGET, FS_FAILOVER_THRESHOLD,
FS_FAILOVER_OBSERVER_PRESENT, FS_FAILOVER_OBSERVER_HOST, CONTROLFILE_CONVERTED, PRIMARY_DB_UNIQUE_NAME,
SUPPLEMENTAL_LOG_DATA_PL, MIN_REQUIRED_CAPTURE_CHANGE#
from v$database;
--查询实例信息,如实例名,启动时间
select * from v$instance;
--数据库中具备sysdba,sysoper权限的用户
select * from v$pwfile_users;
*****************************************************************Oracle 中的一些重要V$ 动态性能视图,系统视图和表
v$database:数据库的信息,如数据库名,建立时间等。
v$instance 实例信息,如实例名,启动时间。
v$parameter 参数信息,select * from v$parameter where name like '%name' ----> show parameter name(sqlplus中执行)
v$process 运行的进程的信息,如PID,SPID,以及进程的名字,如SMON,PMON在UNIX的进程名称,在windows中会看到相似ORACLE.EXE (PMON)这样的线程名字.
v$mystat 本session的SID号等信息..知道了SID后能够经过查询session相关的信息.
v$session 链接到数据库的session相关的信息,如机器名,客户端程序名称,PID(UNIX)等.
如经过 select distinct(sid) from v$mystat;获得SID后,
能够获得这个session的相关信息,如为这个session服务的后台进程的地址(PADDR) select * from v$session where sid=157
获得PADDR后能够获得后台进程的信息:select * from v$process where addr = '3424E3BC'
v$controlfile 控制文件的位置信息,能够在nomount阶段查看,但没有数据.数据库在mount后这个视图才有数据.
v$controlfile_record_section控制文件里的配置信息.
v$datafile 数据文件的位置信息,数据库在mount后这个视图才能被查看.数据库打开是检查里面的CHECKPOINT_CHANGE#(从控制文件得来)是否和v$datafile_header的一致.
v$datafile_header 数据文件头信息.是从数据文件头读取的,在作恢复的时候每当一个归档日志应用以后,CHECKPOINT_CHANGE#均可以看到变化.
select dbms_flashback.get_system_change_number from dual
v$logfile 日志文件的位置信息,数据库在mount后这个视图才能被查看.
V$INSTANCE_RECOVERY:实例恢复时和重作日志有关的信息,FAST_START_MTTR_TARGET:实例恢复的时间限制,oracle将这个时间换算成
redo blocks数量,当log buffer中未写入log file的redo block数量超过这个值,就会触发增量检查点。
(这和数据库加载文件的顺序有关系,数据库startup nomount时根据参数文件加载控制文件,startup mount后,根据控制文件加载数据文件和日志文件)
v$log: 日志的的信息,好比当前用的是那一个日志组。
v$sga_dynamic_components SGA各个内存块的信息,如java 池的大小,共享池的大小,数据缓冲区(在10G中是根据数据块的大小有不一样的缓冲区的,如DEFAULT 2K buffer cache放数据块是2k的,DEFAULT 4K buffer cache放数据块是4k的)
v$pwfile_users 数据库中具备sysdba,sysoper权限的用户。
v$rollstat 回退段信息,USN回退段的编号,XACTS活动的事务数量。回退段能够从dba_rollback_segs 查看。
v$transaction 活动事务信息,如对应的回退段(XIDUSN)是哪个等。
v$sql:执行过的SQL语句。
v$lock:那些session占用了什么样的锁,在申请什么样的锁,该session是否阻塞了别的session。
v$locked_object哪些对象被锁住了。
v$session_wait 查看session等待信息:select * from v$session_wait where wait_class != 'Idle'看目前还在等待的session,如被阻塞的session。
v$session_wait_history:session等待的历史信息,只保存离目前最近的10条记录。
v$active_session_history:活动session(等待的或者在使用CPU)的历史信息,每一秒统计一次信息。每隔一小时会记录到磁盘,从dba_hist_active_sess_history能够看到。执行db_1\RDBMS\ADMIN\ashrpt.sql能够生成报告。
v$statistics_level:那些advisor被打开了以及advisor作统计时候从那些view取统计信息.
v$sga_dynamic_components:SGA各个模块的动态统计信息.
v$log在线日志的信息,那一组是正在使用的,开始使用时候的SCN.
v$archived_log 归档日志的信息,从那个SCN开始到那个SCN结束归档到了那一个文件.
v$backup 那个表空间处于热备份模式.alter tablespace xx begin backup的时候会把对应的SCN记录下来.
v$statname 数据库动态都统计那些信息,有信息名称和ID,通常和v$sesstat联合使用.
v$sesstat 一些动态统计信息的值,如user commits,opened cursors current,redo size等等,
select name,value from v$sesstat,v$statname
where v$statname.STATISTIC#=v$sesstat.STATISTIC# and v$statname.name like '%redo size%' and SID=115
和falshback相关的
v$flashback_database_logfile flashback的日志文件相关的信息,Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录能够恢复到最先的时点 .
v$flashback_database_log:日志使用的状况
v$flashback_database_stat: flashback统计信息.
上面三个视图在alter database flashback on才有数据.
flashback_transaction_query
v$nls_valid_values 能够用的语言,国家和编码设置,alter session set nls_language=american;
v$parameter_valid_values 能够设置的参数值
v$sga:sga内存的信息,select sum(value)/1024/1024 from v$sga一般=sga_max_size或者sga_target
v$sga_dynamic_free_memory:sga未分配的内存。
v$bh DB buffer里缓存的数据块信息。
设置客户端编码
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,三部分,AMERICAN语言,提示信息,AMERICA国家影响日期格式,ZHS16GBK编码。
查看服务器编码 select name,value$ from props$ where name ='NLS_CHARACTERSET';
『以dba_和v$开头的一般都是视图。dba_开头的里面的信息一般是静态的,信息在文件中(可是并不表明里面的信息不变化)。v$开头的信息一般是动态的,来自控制文件和内存中的信息』
dba_data_files(v$datafile )数据文件信息,里面不包括临时表空间对应的文件的信息,,dba_tablespaces(v$tablespace)表空间信息,dba_tables表信息, dba_segments段信息,dba_extents区信息。
dba_segments:那些段保存到了那个表空间,占用了多大空间等.
select * from dba_segments where segment_name='TEST'
select * from dba_segments where tablespace_name='USERS'
select * from dba_segments where owner='YORKER'
dba_users 用户信息,如默认表空间。dba_roles:系统里定义的角色,如DBA(注意与sysdba的区别),CONNECT等。和用户相关的还有一个视图dba_profiles:数据库中定义的profile信息,profile是指登陆尝试次数,密码过时时间限制等,该用户能够有多少个session,空闲多久能够把该用户断掉,能够在create user时候指定。
dba_sys_privs :什么样的用户或者角色授予了什么样的系统权限。
dba_tab_privs看什么样的用户或者角色授予了什么样的对象权限。
dba_role_privs,用户或者角色被授予了什么样的角色。经过角色授予的权限要从新登陆才能起做用。
权限传递:系统权限被收回,传递的权限不收回,对象权限被收回,传递的权限也收回。
dba_constraints 约束的信息. 表级约束Primary(P),Foreign key(R),Unique(U),Check. 列级约束Not null(能够认为是check约束的一种,在dba_constraints 的constraint_type和check约束相同,都为'C').还有对于NOT NULL的ALTER TABLE语句创建约束与其余四种(alter table tb add constraints...)是不一样的:ALTER TABLE tb MODIFY col_name NOT NULL.
dba_priv_audit_opts:数据库打开了那些权限审计. aduit create session;. aduit create session whenever not successful;
dba_obj_audit_opts:数据库打开了那些对象审计.audit select on tb[by session/access].
dba_stmt_audit_opts:数据库打开的语句审计 audit table by userA
dba_audit_trail审计的信息视图,一部分信息正是从表aud$的审计信息查询出来的,表aud$只能以sysdba权限看.
dba_fga_audit_trail 保存的是经过dbms_fga.add_policy 建立的细粒度审计的审计信息.
dba_common_audit_trail保存的是建立的标准和细粒度审计的类型信息.
dba_rollback_segs 数据库回退段的信息。
dba_hist_wr_control awr(auto workload repository)生成数据库负载信息的控制信息,保留时间,统计频率。 dbms_workload_repository .modify_snapshot_settings(retention=>1440,interval=>30)修改控制。
dba_hist_snapshot:数据库运行snapshot的历史信息,根据dba_hist_wr_control的控制信息自动生成,能够经过dbms_workload_repository .create_snapshot生成。
利用db_1\RDBMS\ADMIN\awrrpt.sql能够生成数据库运行报告。db_1\RDBMS\ADMIN\awrrpt.sql\addmrpt.sql能够生成与之对应的诊断建议报告。
dbms_workload_repository.create_baseline能够选择某从某个snapshot到另一个之间(这段时间DB运行良好)建立baseline来作为之后数据库运行信息的比较基准.
dba_hist_baseline保存的snapshot基准信息.
dba_thresholds 发生警告的上限值.如表空间用了多少报警.后台进程MMON会监视这些信息.
dba_outstanding_alerts 最近10条警告信息. dba_alert_history 警告的历史信息.
表:
system_privilege_map,系统权限信息,如常常用到的sysdba和sysoper都是系统权限。还有像CREATE TABLESPACE,DROP TABLESPACE等,要注意的是drop table不是系统权限,drop any table是系统权限。UNLIMITED TABLESPACE权限不能授予给角色,也就意味着DBA角色的用户也须要单独额外授予UNLIMITED TABLESPAC权限。
数据库的这些视图,表定义能够在下面的视图中查到:
select * from dict
select * from dict_columns
select * from v$fixed_table
select * from v$fixed_view_definition
SELECT '*TABLE: ' || TABLE_NAME, COMMENTS
FROM ALL_TAB_COMMENTS
WHERE OWNER = 'SYS'
AND TABLE_NAME = 'USER_SYNONYMS'
UNION
SELECT 'COL: ' || COLUMN_NAME, COMMENTS
FROM ALL_COL_COMMENTS
WHERE OWNER = 'SYS'
AND TABLE_NAME = 'USER_SYNONYMS' ;
*****************************************************************Oracle 中的一些重要V$ 动态性能视图,系统视图和表
--日志清理
A、进入diag\tnslsnr\kepan-PC\listener\alert删除里面的文件
B、进入diag\tnslsnr\kepan-PC\listener\trace删除里面的文件
--表清理
打开 alter table test_move enable row movement;
alter table TABLE_NAME shrink space compact; 只整理碎片 不回收空间。
alter table TABLE_NAME shrink space; 整理碎片并回收空间。
alter table TABLE_NAME shrink space cascade; 整理碎片回收空间 并连同表的级联对象一块儿整理(好比索引)
--当前的数据库链接数
select count(*) from v$process;
一、查看链接oracle的全部机器的链接数
select machine,count(*) from v$session group by machine;
二、查看链接oracle的全部机器的链接数和状态
select machine,status,count(*) from v$session group by machine,status order by status;
select 'SGA' AS NAME,ROUND(sum(value)/1024/1024,2)||'M' AS "SIZE(M)" from v$sga
UNION
select 'PGA' AS NAME,ROUND(value/1024/1024,2)||'M' AS "SIZE(M)" from v$pgastat where name='total PGA allocated'
UNION
select 'TOTAL' AS NAME,((SELECT ROUND(sum(value)/1024/1024,2) from v$sga)+(select ROUND(value/1024/1024,2) from v$pgastat where name='total PGA allocated'))||'M' AS "SIZE(M)" FROM DUAL
UNION
SELECT NAME,TO_CHAR(VALUE) FROM V$PGASTAT WHERE NAME='process count';
--修改最大链接数
alter system set processes = 300 scope = spfile;
--数据库容许的最大链接数
select value from v$parameter where name = 'processes';
--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', b.sql_text,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;
SELECT osuser, a.username,cpu_time/executions/1000000||'s', b.sql_text,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;
--并发链接数
select count(*) from v$session where status='ACTIVE';
--当前的session链接数
select count(*) from v$session;
--最大链接
show parameter processes;
--针对某个字段在某个时间段删除的数据查询
select * from menus as of timestamp to_timestamp('2013-11-26 20:00:00','YYYY-MM-DD HH24:MI:SS')
--查询表字段数据
select * from user_tab_cols where table_name='XBDBDSY17210911795590'(注意表名大写)
--查询表注释
select * from user_tab_comments
--字段注释
select * from user_col_comments;
--ORA-28000 the account is locked用户被锁定
alter user username account unlock;
username为具体被锁定的用户名
--“记录被另外一个用户锁住”解决办法
1.经过查找出已被锁定的数据库表及相关的sid、serial#及spid:
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;
2.在数据库中灭掉相关session:
alter system kill session 'sid,serial#';
--sid及serial#为第一步查出来的数据 如( alter system kill session '141,252';)//141是sid的值,252是serial#值
--数据库dmp格式导出
导出整库:
exp rst/rst@orcl file='\rstabak_columdata.dmp'
exp rst/rst115.29.38.18@orcl file='\rstabak_columdata.dmp'
exp rst/rst@115.29.38.18/orcl file='\rstabak_columdata.dmp'
带端口导出:
exp rst/rst@115.29.38.18:1521/orcl file='\rstabak_columdata.dmp'
导出单张表:
exp rst/rst@orcl file='\rstabak_columdata.dmp' tables=COLUMNDATA
sysdba导出指定用户数据库:
exp "'sys/sys@orcl as sysdba'" owner=scott file=e:\s.dmp log=e:\log.txt
能够这样,owner后面指定要导出哪一个用户下的数据
--数据库导入
imp aichannel/aichannel@HUST full=y file=d:/data/newsmgnt.dmp ignore=y
--查看当前数据库字符集
select * from nls_database_parameters
--查看数据库版本
select * from v$version
--ORA-28002: 7天以后口令将过时的解决方法
ORA-28002: the password will expire within 7 days 解决方法
1.查看用户的profile设置:
SELECT username,profile FROM dba_users;
2.查看系统profiles中PASSWORD_LIFE_TIME设置。
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
3.修改DBA_PROFILES中PASSWORD_LIFE_TIM的设置,改成ULIMITED。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
4.若是还会出现提示时,就修改密码
ALTER USER <用户名> IDENTIFIED BY <密码>
--ORA-01658: 没法为表空间 EDUDB 中的段建立 INITIAL 区
缘由:由于表空间不够用了,增长了表空间
1.查看表空间路径
select file_name from dba_data_files where tablespace_name = 'EDUDB'
2.增长表空间大小
alter database datafile 'F:\ORACLE_DB\EDUDB.DBF' resize 1000M;
--在Linux下启动Oracle
登陆到CentOS,切换到oracle用户权限
# su – oracle
接着输入:
$ sqlplus "/as sysdba"
本来的画面会变为
SQL>
接着请输入
SQL> startup
就能够正常的启动数据库了。
--在Linux下中止数据库的指令以下:
SQL> shutdown immediate
shutdown 其参数 :shutdown有四个参数,四个参数的含义以下:
Normal 须要等待全部的用户断开链接
Immediate 等待用户完成当前的语句
Transactional 等待用户完成当前的事务
Abort 不作任何等待,直接关闭数据库
--在Linux下检查Oracle DB监听器是否正常
回到终端机模式,输入:
$ lsnrctl status
若是没有启动,能够输入:
$ lsnrctl start
--exp导出时出现ora 01034
执行
sqlplus /nolog
connect / as sysdba
startup force
注意:只能解决单步导出。
--链接oracle数据库出现oracle ORA-12526:TNS:监听程序:全部适用例程都处于受限模式的问题
查了下原来以前改字符集时执行了:ALTER SYSTEM ENABLE RESTRICTED SESSION;
致使受限
解决办法:
使用系统管理员身份运行如下一段代码
ALTER SYSTEM DISABLE RESTRICTED SESSION;
--oracle查询结果若是某个字段重复的时候就取另外一个...
如表a数据信息以下: IdnameResults
1 kar l85
2 ramon 90
3 kar l93
4 ramon 95
select rownum,a.* from (select name, max(results) from table_a group by name order by name) a;
===========================================
--oracle中查出某个字段重复的次数并计算重复次数的总和
如表a数据信息以下: IdnameResults
1 kar l85
2 ramon 90
3 kar l93
4 ramon 95
select 字段,count(*) from table group by 字段;
===========================================
--oracle 查询全部字段,某字段重复只显示一条
例如 表A :ziduan1 ziduan2 ziduan3
a b c
a b d
表B :ziduan1 ziduan...
查询结果剔重,比较方便的就是直接用distinct,
对于大数据量的剔重,也可使用row_number() over(partition by col1 order by col1) rn 最后判断rn=1便可
===========================================
--Oracle查询一批数据,某字段的内容有重复数据,怎样...
好比: C1 C2 C3 C4 C5
1 x a b 11.20
1 y d e 11.3
1 z g h 11.2
3 o j...
SELECT * FRON 表 main WHERE NOT EXISTS ( SELECT 1 FROM 表 sub WHERE main.C1 = sub.C1 AND main.C5 < sub.C5 ) 算法就是,
对于 每个 C1 不存在有其余行的 C5 比本行的 C5 更大
===========================================
--oracle 中如何查询多个字段重复字段的内容?
select REPORT_NO, COM_NO, RISK_TYPE_NAME, PAYMENT_DEADLINE, AGENT_O...
select COUNT(1) AS 记录数, REPORT_NO, COM_NO, RISK_TYPE_NAME,
PAYMENT_DEADLINE, AGENT_ORG, CHANNEL, NATURE1_NO, NATURE2_NO, REPORT_TYPE, KOSTL
from STG_SAP_PL_DETAIL group by REPORT_NO, COM_NO, RISK_TYPE_NAME, PAYMENT_DEADLINE,...
===========================================
--oracle数据库查询时如何排除重复字段?
select REPORT_NO, COM_NO, RISK_TYPE_NAME, PAYMENT_DEADLINE, AGENT_O...
select后面加上distinct。
===========================================
--用PLSQL查询oracle数据库中某个表,查询结果若是包...
用PLSQL查询oracle数据库中某个表,查询结果若是包含两个字段SHAPE.SDO_...
这两个字段是什么数据类型?LONG RAW? BLOB?
补充说明一下:SDO_GEOMETRY是相似多位数组的类型(好像是11g后出来的) 我在PLSQL还没遇到过,
仍是个人建议: PLSQL在访问某些大数据会出现错误(多是BUG),建议升级下PLSQL 若是已经到比较新的版本...
===========================================
--oracle如何查询表中某个字段在半个小时内重复出现2...
例如,某学校出校要刷卡,卡号惟一,时间为刷卡时间,如今要查询那些人...
100分拿来吧。。你将表内随便加些数据用我得查询看下结果
create table T_TEST ( ID VARCHAR2(20), LEAVE_TIME DATE );
select b.id from (select a.id, a.leave_time - lag(a.leave_time)
over(partition by a.id order by a.leave_time) lv_ti...
===========================================
--oracle 查询字段值重复sql语句
表 A 字段 b 想查询 b 字段有重复的数据。
select b from A group by b having count (*)>1
===========================================
--按照笔划排序:
select * from table order by nlssort(col,'NLS_SORT=SCHINESE_STROKE_M');
--按照部首排序:
select * from table order by nlssort(col,'NLS_SORT=SCHINESE_RADICAL_M');
--按照拼音排序:
select * from table order by nlssort(col,'NLS_SORT=SCHINESE_PINYIN_M');
--解决:
1班
2班
3班 select * from table order by to_number(regexp_substr(a.bjname,'[0-9]*[0-9]',1));
4班
5班
6班 这样的数据格式排序,须要注意的是,中文部分必须一致。
7班
8班
9班
10班
11班
12班
13班
14班
15班
--oracle 固定排序
select njname from (
select njname from nj where csid in ($csid$)
and njname <> '毕业' group by njname)
order by DECODE(njname, '一年级',1,'二年级',2,'三年级',3,'四年级',4,'五年级',5,'六年级',6,'七年级',7,'八年级',8,'九年级',9,'高一',10,'高二',11,'高三',12)
--Oracle中的wmsys.wm_concat主要实现行转列功能(说白了就是将查询的某一列值使用逗号进行隔开拼接,成为一条数据)。
select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From t_menu_item t GROUP BY t.rank;
select E.BSID ,WMSYS.WM_CONCAT(H.STNAME || '(' || E.RSZF || '分)') FS from RESULTSSUMMARY E,MONECOURSE F,GRADESUBJECT G,SUBJECT H
WHERE E.MECID=F.MECID AND F.GSID=G.GSID AND G.STID=H.STID group by E.BSID;
--列值转行
方式1:select * from tmp_tab t pivot(count(1) for deptno in (10, 20, 30, 40));
方式2:listagg(city,',');
--oracle联合删除
DELETE FROM USERS A
WHERE USNAME in (
SELECT B.TCCERID
FROM TEACHER B
WHERE B.TCNAME<>'小白' and b.TCNAME<>'小黑'
);
--查询各学生科目为Oracle排名(简单排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'
--对比:rank()与dense_rank():非连续排名与连续排名(都是简单排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
dense_rank() over (order by score desc) 名次
from t_score sc
where sub_name='Oracle'
--查询各学生各科排名(分区排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over
(partition by sub_name order by score desc) 名次
from t_score sc
--oracle的where条件里不包括的条件
1 <> :select * from table t where t.name <> '张三' and t.dept='业务部';
2 not in: select * from table t where t.name not in ('张三') and t.dept='业务部';
3 not exists: select * from table t where t.dept='业务部'
and not exists (select 1 from table tt where tt.id=t.id and tt.name='张三' );(须要关联字段)
--oracle 找回 某个时间段删除的数据
select * from dba_source
as of timestamp to_timestamp('2014-11-30 19:00:00', 'YYYY-MM-DD HH24:MI:SS')
where OWNER = 'GY18' and TYPE='PROCEDURE' and NAME like 'P%' order by NAME;
--找回 被修改的表的数据
SELECT USID, USPWD FROM users AS OF TIMESTAMP SYSDATE-1/24
--若是指定或请求并行执行,但没有指定并行度,默认的并行度被设置为系统CPU核数的两倍。经过参数parallel_threads_per_cpu来控制,以下:
show parameters parallel_thread;
--若是参数parallel_degree_policy被设置为auto,那么,Oracle将依据要执行的操做的特性和对象的大小来肯定并行度。
注:该方法用在11gR2。auto也容许并行从缓存中获取数据而不是直接路径IO。参数显示以下:
show parameters parallel_degree_policy
alter session set parallel_degree_policy = 'auto'
--oracle去除奇葩数据
去除换行
update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(10),'');
去掉回车
update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,chr(13),'');
去掉空格
update zhzl_address t set t.add_administration_num=trim(t.add_administration_num);
--查询oracle 执行的sql
SELECT * FROM V$SQL
--oracle递归查询
select * from table
start with org_id = 'HBHqfWGWPy'
connect by prior org_id = parent_id;
--ORA-00257: archiver error. Connect internal only, until freed
1.首先查看当前flash recovery area使用状况
sqlplus / as sysdba
SQL> show parameter log_archive_dest;
主要看:log_archive_dest string --日志路径的value没有值
2.SQL> set linesize 200
3.SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
主要看:ARCHIVED LOG 的百分比
4.采用rman方式清除日志
rman target sys/fyzh
5.crosscheck archivelog all; --先检查下
6.RMAN> delete expired archivelog all; --删除过时的日志,本库没有过时的
7.没有过时的,为了腾出空间,就指定到具体的时间将其删除。
RMAN>delete archivelog until time "to_date('2013-09-04 13:00:00','yyyy-mm-dd hh24:mi:ss')";
8.删除后在看日志使用的空间状况
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
--ORA-01031: 权限不足
办法一:
grant create table to 用户名
办法二:
grant all privileges TO 用户名
--oracle 查看表以及注释
SELECT t.table_name,
t.colUMN_NAME,
t.DATA_TYPE || '(' || t.DATA_LENGTH || ')',
t1.COMMENTS,
'COMMENT ON COLUMN "ZYXLIUZHONG"."'|| t.table_name ||'"."'|| t.colUMN_NAME ||'" IS '''|| t1.COMMENTS ||''';' zhushi
FROM User_Tab_Cols t, User_Col_Comments t1
WHERE t.table_name = t1.table_name
AND t.column_name = t1.column_name;
--ORA-01219: 数据库未打开: 仅容许在固定表/视图中查询
以sysdba身份登陆,而后
select open_mode from v$database;
而后
alter database open;
看看是什么错误信息
--oracle 查询数据库各表数据大小
select SEGMENT_NAME,BYTES from dba_segments
where segment_type='TABLE' and OWNER='ZYXLIUZHONG' ORDER BY BYTES desc;
--显示客户端信息的sql
select sid,serial#,username,program,machine,client_info
from v$session
where username is not null order by username,program,machine;
--小数点保留2位小数
round(_data,2)
--oracle日期:
TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS AM DY') --2009-01-06 15:01:15 下午 星期二
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual
--根据某个字段的大小去获取另外一个字段的数据
select
min(f.SHTNAME) keep (dense_rank first order by f.SHTSTARTTIME) SHTNAME
From SCHOOLCALENDAR e,SCHOOLHALFTERM f
where e.SCCID=f.SCCID and f.SHTNAME like '%学期%' and e.SCCYEAR='$sccyear$'
--oracle字符串替换
replace(FDNAME,'k','m')
-- Oracle 大小写转换函数
小写转大写UPPER
大写转小写LOWER
select lower(ename) from emp;
select upper(ename) from emp;
--查询某个字段不为数字的数据
select * from RESULTSSUMMARY where not REGEXP_LIKE(RSZGTZF, '^[0-9]+\.{0,1}[0-9]*$');
--Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 用记事本打开listener.ora 里面加一段 (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = X:\app\Administrator\product\11.1.0\db_1) (SID_NAME = orcl) )