Oracle維護之日常偽DBA操作
阿新 • • 發佈:2018-12-07
好記性不如爛筆頭,本人日常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';