1. 程式人生 > >Oracle維護之日常偽DBA操作

Oracle維護之日常偽DBA操作

好記性不如爛筆頭,本人日常DBA的SQL如下,整理了常用的,建立使用者之類的就直接不寫了,因為他不算日常的SQL,偶爾用一下,直接通過筆記調出來

-- 查詢當前使用者所有表
select t.* from user_tables t 
-- impdp匯出
imp xxx/xxx@xxx file=xx_DATA.DMP grants=N tables=tablename1,tablename2

exp xxx/xxx file=xxx.dmp  grants=N owner=xxx

-- listagg within group 拼接結果,比如把所有表用逗號拼接起來
select LISTAGG('xx:'||partition_name,',') within group(order by partition_name asc) from user_tab_partitions where table_name='table_name' -- 查詢表所屬表空間 select TABLE_NAME,TABLESPACE_NAME,partitioned from dba_tables where table_name = 'tablename' -- 查詢表空間和表空間剩餘量 SELECT a.tablespace_name "表空間名", total /
(1024 * 1024 * 1024) "表空間大小(G)", free / (1024 * 1024 * 1024) "表空間剩餘大小(G)", (total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (
SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name; -- 查詢分割槽 select * from user_sys_privs where --privilege like upper('%DATABASE LINK%') AND USERNAME='username'; -- 賦予建立DBLink許可權 grant create public database link to username; -- 查詢directory SELECT * FROM DBA_DIRECTORIES -- 管理員身份sys匯出 expdp \'sys/password@ORCL AS SYSDBA\' grants=n TABLES=username.table_name dumpfile=filename.DMP DIRECTORY=EXPDP; -- 管理員身份sys匯出分割槽表 expdp \'sys/password@ORCL AS SYSDBA\' grants=n TABLES=username.table_name:分割槽名 dumpfile=檔名.DMP DIRECTORY=EXPDP; -- impdp匯入 impdp username/password@ORCL dumpfile=filename.DMP directory=EXPDP remap_schema=原使用者名稱:當前要匯入的使用者名稱 -- 後臺開並行expdp匯出,將會匯出多個DP開頭的檔案 nohup expdp \'sys/password@ORCL AS SYSDBA\' grants=FALSE schemas=username parallel=40 dumpfile=DP%u.DMP cluster=N logfile=DP.log directory=EXPDP & -- 建立directory create directory EXPDP as '/home/xxx'; -- 給directory賦予許可權 grant read,write on directory EXPDP to username; --rman歸檔 判斷log_mode為ARCHIVELOG select * from v$database; --展示undo引數 show parameter undo -- 顯示歸檔檔案日誌及相關的資訊 select * from v$recovery_file_dest; select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; select * from v$flash_recovery_area_usage; select * from v$version; select group#,sequence#,bytes/1024/1024,members,status from v$log; -- 刪除七天以前的歸檔 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1'; delete obsolete; select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage; delete archivelog until time 'sysdate-5'; -- 定時刪除歸檔日誌指令碼,此指令碼需要寫成 xxx.sh 檔案 $ORACLE_HOME/bin/rman log=delete_archivelog.log <<EOF rman target sys/password run{ crosscheck archivelog all; DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1'; } -- 查詢表空間的資料檔案 Select * FROM DBA_DATA_FILES where tablespace_name = 'tablespacename'; -- 給表空間增加資料檔案 ALTER TABLESPACE DATA_ODS ADD DATAFILE '/oradata/xxx.dbf' SIZE 1G AUTOEXTEND ON NEXT 8M MAXSIZE 34359721984; -- 直接修改原有資料檔案大小,修改成32G,單個數據檔案最大隻能32G alter database datafile '/oradata/xxx.dbf' RESIZE 34359721984; -- 查詢某個使用者表空間的資料檔案 Select * FROM DBA_DATA_FILES where tablespace_name = 'username'; -- 查詢臨時表空間資料檔案 select * from dba_temp_files d; -- 給現有表空間增加資料檔案 ALTER TABLESPACE DATA_ODS ADD DATAFILE '/oradata/xxx.dbf' SIZE 34359721984; -- 給臨時表空間增加資料檔案 ALTER DATABASE TEMPFILE '/home/xxx/temp03.dbf' RESIZE 34359721984; -- 查詢所有表空間 select * from v$tablespace; -- 查詢表空間下面所有的使用者 select distinct s.owner from dba_segments s where s.tablespace_name ='tablespacename';