Oracle维护之日常伪DBA操作

爱被打了一巴掌 2022-04-08 08:42 354阅读 0赞

好记性不如烂笔头,本人日常DBA的SQL如下,整理了常用的,创建用户之类的就直接不写了,因为他不算日常的SQL,偶尔用一下,直接通过笔记调出来

  1. -- 查询当前用户所有表
  2. select t.* from user_tables t
  3. -- impdp导出
  4. imp xxx/xxx@xxx file=xx_DATA.DMP grants=N tables=tablename1,tablename2
  5. exp xxx/xxx file=xxx.dmp grants=N owner=xxx
  6. -- listagg within group 拼接结果,比如把所有表用逗号拼接起来
  7. select LISTAGG('xx:'||partition_name,',') within group(order by partition_name asc) from user_tab_partitions where table_name='table_name'
  8. -- 查询表所属表空间
  9. select TABLE_NAME,TABLESPACE_NAME,partitioned from dba_tables where table_name = 'tablename'
  10. -- 查询表空间和表空间剩余量
  11. SELECT a.tablespace_name "表空间名",
  12. total / (1024 * 1024 * 1024) "表空间大小(G)",
  13. free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
  14. (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
  15. round((total - free) / total, 4) * 100 "使用率 %"
  16. FROM (SELECT tablespace_name, SUM(bytes) free
  17. FROM dba_free_space
  18. GROUP BY tablespace_name) a,
  19. (SELECT tablespace_name, SUM(bytes) total
  20. FROM dba_data_files
  21. GROUP BY tablespace_name) b
  22. WHERE a.tablespace_name = b.tablespace_name;
  23. -- 查询分区
  24. select * from user_sys_privs where
  25. --privilege like upper('%DATABASE LINK%') AND
  26. USERNAME='username';
  27. -- 赋予创建DBLink权限
  28. grant create public database link to username;
  29. -- 查询directory
  30. SELECT * FROM DBA_DIRECTORIES
  31. -- 管理员身份sys导出
  32. expdp \'sys/password@ORCL AS SYSDBA\' grants=n TABLES=username.table_name dumpfile=filename.DMP DIRECTORY=EXPDP;
  33. -- 管理员身份sys导出分区表
  34. expdp \'sys/password@ORCL AS SYSDBA\' grants=n TABLES=username.table_name:分区名 dumpfile=文件名.DMP DIRECTORY=EXPDP;
  35. -- impdp导入
  36. impdp username/password@ORCL dumpfile=filename.DMP directory=EXPDP remap_schema=原用户名:当前要导入的用户名
  37. -- 后台开并行expdp导出,将会导出多个DP开头的文件
  38. nohup expdp \'sys/password@ORCL AS SYSDBA\' grants=FALSE schemas=username parallel=40 dumpfile=DP%u.DMP cluster=N logfile=DP.log directory=EXPDP &
  39. -- 创建directory
  40. create directory EXPDP as '/home/xxx';
  41. -- directory赋予权限
  42. grant read,write on directory EXPDP to username;
  43. --rman归档 判断log_modeARCHIVELOG
  44. select * from v$database;
  45. --展示undo参数
  46. show parameter undo
  47. -- 显示归档文件日志及相关的信息
  48. select * from v$recovery_file_dest;
  49. select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
  50. select * from v$flash_recovery_area_usage;
  51. select * from v$version;
  52. select group#,sequence#,bytes/1024/1024,members,status from v$log;
  53. -- 删除N天以前的归档
  54. DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
  55. delete obsolete;
  56. select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
  57. delete archivelog until time 'sysdate-5';
  58. -- 定时删除归档日志脚本,此脚本需要写成 xxx.sh 文件
  59. $ORACLE_HOME/bin/rman log=delete_archivelog.log <<EOF
  60. rman target sys/password
  61. run{
  62. crosscheck archivelog all;
  63. DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
  64. }
  65. -- 查询表空间的数据文件
  66. Select * FROM DBA_DATA_FILES where tablespace_name = 'tablespacename';
  67. -- 给表空间增加数据文件
  68. ALTER TABLESPACE DATA_ODS ADD DATAFILE '/oradata/xxx.dbf' SIZE 1G AUTOEXTEND ON NEXT 8M MAXSIZE 34359721984;
  69. -- 直接修改原有数据文件大小,修改成32G,单个数据文件最大只能32G
  70. alter database datafile '/oradata/xxx.dbf' RESIZE 34359721984;
  71. -- 查询某个用户表空间的数据文件
  72. Select * FROM DBA_DATA_FILES where tablespace_name = 'username';
  73. -- 查询临时表空间数据文件
  74. select * from dba_temp_files d;
  75. -- 给现有表空间增加数据文件
  76. ALTER TABLESPACE DATA_ODS ADD DATAFILE
  77. '/oradata/xxx.dbf' SIZE 34359721984;
  78. -- 给临时表空间增加数据文件
  79. ALTER DATABASE TEMPFILE '/home/xxx/temp03.dbf' RESIZE 34359721984;
  80. -- 查询所有表空间
  81. select * from v$tablespace;
  82. -- 查询表空间下面所有的用户
  83. select distinct s.owner from dba_segments s where s.tablespace_name ='tablespacename';

发表评论

表情:
评论列表 (有 0 条评论,354人围观)

还没有评论,来说两句吧...

相关阅读