Oracle數據庫經常使用的查詢和問題的解決方法

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

相關文章
相關標籤/搜索