這個文件我也不知道是哪裏來的,在我電腦上,反正用了好久了,感受不錯。拿出來分享一下。若有冒犯,請聯繫我刪掉。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) )