分析两个主机和Oracle数据库巡检脚本,值得收藏

数据库 Oracle
分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的...

分享一个之前我用来巡检主机和Oracle的脚本,不过输出结果不是很美观,内容还是可以的...

主机巡检脚本:OSWatcher.sh

ps:这里的第10项,普通用户检查/var/log/messages很可能没有读权限,如有需要巡检此系统日志,建议切换root用户执行此脚本。

  1. #!/bin/bash 
  2. echo "" 
  3. ###################################################################### 
  4. #设置命令的路径,防止命令找不到路径 
  5. PATH=$PATH:/usr/sbin/ 
  6. export PATH 
  7. echo "the PATH is:$PATH" 
  8. ###################################################################### 
  9. PLATFORM=`/bin/uname` 
  10. ###################################################################### 
  11. # Create log subdirectories if they don't exist 
  12. ###################################################################### 
  13. if [ ! -d archive ]; then 
  14.  mkdir archive 
  15. fi  
  16. case $PLATFORM in 
  17.  Linux) 
  18.  DF='df -h' 
  19.  MEMINFO='free -m' 
  20.  MPSTAT='mpstat 1 3' 
  21.  TOP='eval top -b -n 1 | head -50' 
  22.  VMSTAT='vmstat 1 3' 
  23.  IOSTAT='iostat -d -x -k 1 5' 
  24.  PSELF='ps -elf' 
  25.  BOOTLOG='tail -500 /var/log/boot.log' 
  26.  SYSLOG='dmesg' 
  27.  MESSAGE='tail -500 /var/log/messages' 
  28.  ;; 
  29. esac 
  30. hostn=`hostname` 
  31. hour=`date +'%m.%d.%y.%H00.dat'` 
  32. echo "`date` Collect">archive/${hostn}_$hour 
  33. ###################################################################### 
  34. # Test for discovery of os utilities. Notify if not found. 
  35. ###################################################################### 
  36. echo "" 
  37. echo "Starting Data Collection..." 
  38. echo "" 
  39. case $PLATFORM in 
  40.  Linux) 
  41.  $DF > /dev/null 2>&1 
  42.  if [ $? = 0 ]; then 
  43.  echo "DF found on your system." 
  44.  echo "--1.DF==========================">>archive/${hostn}_$hour 
  45.  $DF>>archive/${hostn}_$hour 
  46.  MEMFOUND=1 
  47.  else 
  48.  echo "Warning... DF not found on your system." 
  49.  MEMFOUND=0 
  50.  fi 
  51.   
  52.  $MEMINFO > /dev/null 2>&1 
  53.  if [ $? = 0 ]; then 
  54.  echo "meminfo found on your system." 
  55.  echo "--2.MEMINFO==========================">>archive/${hostn}_$hour 
  56.  $MEMINFO>>archive/${hostn}_$hour 
  57.  MEMFOUND=1 
  58.  else 
  59.  echo "Warning... /proc/meminfo not found on your system." 
  60.  MEMFOUND=0 
  61.  fi 
  62.   
  63.  $MPSTAT > /dev/null 2>&1 
  64.  if [ $? = 0 ]; then 
  65.  echo "MPSTAT found on your system." 
  66.  echo "--3.MPSTAT==========================">>archive/${hostn}_$hour 
  67.  $MPSTAT>>archive/${hostn}_$hour 
  68.  MEMFOUND=1 
  69.  else 
  70.  echo "Warning... MPSTAT not found on your system." 
  71.  MEMFOUND=0 
  72.  fi 
  73.   
  74.  $TOP > /dev/null 2>&1 
  75.  if [ $? = 0 ]; then 
  76.  echo "TOP found on your system." 
  77.  echo "--4.TOP==========================">>archive/${hostn}_$hour 
  78.  $TOP>>archive/${hostn}_$hour 
  79.  MEMFOUND=1 
  80.  else 
  81.  echo "Warning... TOP not found on your system." 
  82.  MEMFOUND=0 
  83.  fi 
  84.   
  85.  $VMSTAT > /dev/null 2>&1 
  86.  if [ $? = 0 ]; then 
  87.  echo "VMSTAT found on your system." 
  88.  echo "--5.VMSTAT==========================">>archive/${hostn}_$hour 
  89.  $VMSTAT>>archive/${hostn}_$hour 
  90.  MEMFOUND=1 
  91.  else 
  92.  echo "Warning... VMSTAT not found on your system." 
  93.  MEMFOUND=0 
  94.  fi 
  95.   
  96.  $IOSTAT > /dev/null 2>&1 
  97.  if [ $? = 0 ]; then 
  98.  echo "IOSTAT found on your system." 
  99.  echo "--6.IOSTAT==========================">>archive/${hostn}_$hour 
  100.  $IOSTAT>>archive/${hostn}_$hour 
  101.  MEMFOUND=1 
  102.  else 
  103.  echo "Warning... IOSTAT not found on your system." 
  104.  MEMFOUND=0 
  105.  fi 
  106.   
  107.  $PSELF > /dev/null 2>&1 
  108.  if [ $? = 0 ]; then 
  109.  echo "PSELF found on your system." 
  110.  echo "--7.PSELF==========================">>archive/${hostn}_$hour 
  111.  $PSELF>>archive/${hostn}_$hour 
  112.  MEMFOUND=1 
  113.  else 
  114.  echo "Warning... PSELF not found on your system." 
  115.  MEMFOUND=0 
  116.  fi 
  117.   
  118.  $BOOTLOG > /dev/null 2>&1 
  119.  if [ $? = 0 ]; then 
  120.  echo "BOOTLOG found on your system." 
  121.  echo "--8.BOOTLOG==========================">>archive/${hostn}_$hour 
  122.  $BOOTLOG>>archive/${hostn}_$hour 
  123.  MEMFOUND=1 
  124.  else 
  125.  echo "Warning... BOOTLOG not found on your system." 
  126.  MEMFOUND=0 
  127.  fi 
  128.   
  129.  $SYSLOG > /dev/null 2>&1 
  130.  if [ $? = 0 ]; then 
  131.  echo "SYSLOG found on your system." 
  132.  echo "--9.SYSLOG==========================">>archive/${hostn}_$hour 
  133.  $SYSLOG>>archive/${hostn}_$hour 
  134.  MEMFOUND=1 
  135.  else 
  136.  echo "Warning... SYSLOG not found on your system." 
  137.  MEMFOUND=0 
  138.  fi 
  139.   
  140.  $MESSAGE > /dev/null 2>&1 
  141.  if [ $? = 0 ]; then 
  142.  echo "MESSAGE found on your system." 
  143.  echo "--10.MESSAGE==========================">>archive/${hostn}_$hour 
  144.  $MESSAGE>>archive/${hostn}_$hour 
  145.  MEMFOUND=1 
  146.  else 
  147.  echo "Warning... MESSAGE not found on your system." 
  148.  MEMFOUND=0 
  149.  fi 
  150.   
  151.  ;; 
  152. esac  
  153. echo "" 
  154. echo "Discovery completed." 
  155. echo "Collection completed." 
  156. echo "The Collected result saved in ./archive/${hostn}_$hour." 
  157. echo "" 

Oracle巡检脚本:ORAWatcher.sh

这个是用来巡检Oracle数据库的

  1. #!/usr/bin/ksh 
  2. echo "" 
  3. echo "ORAWatcher Version:1.0.1" 
  4. echo ""  
  5. ###################################################################### 
  6. #数据库连接设置 
  7. ###################################################################### 
  8. sqlstr=$1 
  9. test $1 
  10. if [ $? = 1 ]; then 
  11.  echo 
  12.  echo "Info...You did not enter a value for sqlstr." 
  13.  echo "Info...Using default value = system/system" 
  14.  sqlstr="system/system"  
  15. fi  
  16. ###################################################################### 
  17. # Create log subdirectories if they don't exist 
  18. ###################################################################### 
  19. if [ ! -d archive ]; then 
  20.  mkdir archive 
  21. fi  
  22. echo "$sqlstr" 
  23. echo "Starting Data Collection..." 
  24. echo "" 
  25. ###################################################################### 
  26. hostn=`hostname` 
  27. hour=`date +'%m.%d.%y.%H00.dat'` 
  28. echo "`date` collect...">archive/${hostn}_oracle_$hour 
  29. ###################################################################### 
  30. echo "######################## 1.数据库版本" 
  31. echo "select ' ' as \"--1.Database Version\" from dual;" >my_sql.sql 
  32. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  33. echo "Select version FROM Product_component_version  
  34. Where SUBSTR(PRODUCT,1,6)='Oracle';" >my_sql.sql 
  35. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  36. echo "######################## 2.控制文件" 
  37. echo "select ' ' as \"--2.Control files\" from dual;" >my_sql.sql 
  38. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  39. echo "select name from v\$controlfile;" >my_sql.sql 
  40. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  41. echo "######################## 3.pfile、spfile" 
  42. echo "select ' ' as \"--3.Parameter files\" from dual;" >my_sql.sql 
  43. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  44. echo "show parameter pfile;" >my_sql.sql 
  45. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  46. echo "######################## 4.字符集" 
  47. echo "select ' ' as \"--4.DB Character\" from dual;" >my_sql.sql 
  48. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  49. echo "col PARAMETER for a20 
  50. col value for a20 
  51. select * from v\$nls_parameters where parameter='NLS_CHARACTERSET';" >my_sql.sql 
  52. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  53. echo "######################## 5.归档状态" 
  54. echo "select ' ' as \"--5.DB Archive Mode\" from dual;" >my_sql.sql 
  55. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  56. echo "set linesize 333 
  57. show parameter log_archive" >my_sql.sql 
  58. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  59. echo "######################## 6.参数设置" 
  60. echo "select ' ' as \"--6.Parameter Config\" from dual;" >my_sql.sql 
  61. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  62. echo "set linesize 500 
  63. set pages 2000 
  64. show parameter;" >my_sql.sql 
  65. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  66. echo "######################## 7.回滚段存储位置" 
  67. echo "select ' ' as \"--7.Undo Info\" from dual;" >my_sql.sql 
  68. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  69. echo "set linesize 500 
  70. set pages 2000 
  71. SELECT SEGMENT_NAME, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;" >my_sql.sql 
  72. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  73. echo "######################## 8.redolog" 
  74. echo "select ' ' as \"--8.Redolog Files\" from dual;" >my_sql.sql 
  75. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  76. echo "set linesize 200 
  77. set pages 2000 
  78. col MEMBER for a50 
  79. select a.member,a.group#,b.thread#,b.bytes,b.members,b.status 
  80. from v\$logfile a,v\$log b 
  81. where a.group#=b.group#;" >my_sql.sql 
  82. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  83. echo "######################## 9.查看表空间大小及利用率" 
  84. echo "select ' ' as \"--9.Tablespace Usage\" from dual;" >my_sql.sql 
  85. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  86. echo "set linesize 200 
  87. set pages 2000 
  88. col TABLESPACENAME for a30 
  89. select substr(a.TABLESPACE_NAME,1,30) TablespaceName, 
  90. sum(a.bytes/1024/1024) as \"Totle_size(M)\", 
  91. sum(nvl(b.free_space1/1024/1024,0)) as \"Free_space(M)\", 
  92. sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0)) as \"Used_space(M)\", 
  93. round((sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0))) 
  94. *100/sum(a.bytes/1024/1024),2) as \"Used_percent%\" from dba_data_files a, 
  95. (select sum(nvl(bytes,0)) free_space1,file_id from dba_free_space 
  96. group by file_id) b where a.file_id = b.file_id(+) group by a.TABLESPACE_NAME 
  97. order by \"Used_percent%\";" >my_sql.sql 
  98. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  99. echo "######################## 10.数据文件" 
  100. echo "select ' ' as \"--10.DB Files Info\" from dual;" >my_sql.sql 
  101. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  102. echo "set linesize 300 
  103. set pagesize 500 
  104. col file_name format a80 
  105. col TABLESPACE_NAME for a30 
  106. select tablespace_name,file_id,status,bytes/1024/1024 FileSizeM,file_name from dba_data_files order by tablespace_name;" >my_sql.sql 
  107. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  108. echo "######################## 11.查看数据文件的扩展方式" 
  109. echo "select ' ' as \"--11.DB Files Extend\" from dual;" >my_sql.sql 
  110. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  111. echo "set linesize 300 
  112. set pagesize 500 
  113. col FILE_NAME for a60 
  114. col TABLESPACE_NAME for a30 
  115. select file_id,file_name,tablespace_name,autoextensible  
  116. from dba_data_files order by file_id;" >my_sql.sql 
  117. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  118. echo "######################## 12.查看表空间的扩展方式" 
  119. echo "select ' ' as \"--12.TBS Extend\" from dual;" >my_sql.sql 
  120. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  121. echo "set linesize 120 
  122. select TABLESPACE_NAME, BLOCK_SIZE, EXTENT_MANAGEMENT, SEGMENT_SPACE_MANAGEMENT  
  123. from dba_tablespaces;" >my_sql.sql 
  124. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  125. echo "######################## 13.临时表空间" 
  126. echo "select ' ' as \"--13.DB Temp TBS\" from dual;" >my_sql.sql 
  127. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  128. echo "select FILE_NAME, FILE_ID, TABLESPACE_NAME, BYTES/1024/1024 \"BYTES(M)\", USER_BYTES/1024/1024 \"USER_BYTES(M)\", status from dba_temp_files;" >my_sql.sql 
  129. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  130. echo "######################## 14.用户默认表空间" 
  131. echo "select ' ' as \"--14.User Default TBS\" from dual;" >my_sql.sql 
  132. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  133. echo "set lines 200 
  134. set pages 2000 
  135. col username for a20 
  136. col default_tablespace for a30 
  137. col temporary_tablespace for a30 
  138. select username, default_tablespace, temporary_tablespace from dba_users;" >my_sql.sql 
  139. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  140. echo "######################## 15.数据库缓冲区高速缓存命中率" 
  141. echo "select ' ' as \"--15.DB Cache Hit\" from dual;" >my_sql.sql 
  142. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  143. echo "select 1-(phy.value/(cur.value+con.value)) 
  144. from v\$sysstat cur, v\$sysstat con, v\$sysstat phy 
  145. where cur.name = 'db block gets'  
  146. and con.name = 'consistent gets'  
  147. and phy.name = 'physical reads';" >my_sql.sql 
  148. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  149. echo "######################## 16.重写不等待比率" 
  150. echo "select ' ' as \"--16.Redo nowaits\" from dual;" >my_sql.sql 
  151. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  152. echo "select (req.value*5000)/entries.value 
  153. from v\$sysstat req,v\$sysstat entries 
  154. where req.name = 'redo log space requests' 
  155. and entries.name = 'redo entires';" >my_sql.sql 
  156. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  157. echo "######################## 17.库高速缓存命中率" 
  158. echo "select ' ' as \"--17.Library Cache Hit\" from dual;" >my_sql.sql 
  159. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  160. echo "select namespace,gethitratio from v\$librarycache;" >my_sql.sql 
  161. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  162. echo "######################## 18.数据字典高速缓存Getmisses对gets的目标比例" 
  163. echo "select ' ' as \"--18.DB Dic cache\" from dual;" >my_sql.sql 
  164. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  165. echo "select sum(getmisses)/sum(gets) from v\$rowcache;" >my_sql.sql 
  166. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  167. echo "######################## 19.用户对像(表、索引、大小)" 
  168. echo "select ' ' as \"--19.User objects\" from dual;" >my_sql.sql 
  169. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  170. echo "col OWNER for a30 
  171. col SEGMENT_NAME for a33 
  172. col PARTITION_NAME for a22 
  173. col SEGMENT_TYPE for a11 
  174. col TABLESPACE_NAME for a30 
  175. set lines 333 
  176. set pages 5000 
  177. select OWNER ,SEGMENT_NAME,PARTITION_NAME,SEGMENT_TYPE,TABLESPACE_NAME,bytes/1024/1024 as table_size_M  
  178. from Dba_Segments where SEGMENT_TYPE='TABLE' order by OWNER;" >my_sql.sql 
  179. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  180.   
  181. echo "######################## 20.检查是否有失效的索引" 
  182. echo "select ' ' as \"--20.Check invalid Ind\" from dual;" >my_sql.sql 
  183. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  184. echo "set lines 333 
  185. set pages 50 
  186. select index_name, owner, status, tablespace_name  
  187.  from dba_indexes 
  188.  where owner not in('SYS','SYSTEM') 
  189.  and status != 'VALID' 
  190.  and tablespace_name is not null  
  191. union all  
  192. select index_name, index_owner owner, status, tablespace_name 
  193.  from dba_ind_partitions 
  194.  where index_owner not in ('SYS','SYSTEM') 
  195.  and status <> 'USABLE' 
  196.  and tablespace_name is not null; 
  197. select '' as a from dual;" >my_sql.sql 
  198. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  199. echo "######################## 21.检查数据库会话连接占用率" 
  200. echo "select ' ' as \"--21.Check DB Sessions\" from dual;" >my_sql.sql 
  201. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  202. echo "col TOT_SESSIONS for a15 
  203. select cur_sessions, tot_sessions, a.cur_sessions/b.tot_sessions*100 \"sessions used%\" 
  204. from (select count(*) cur_sessions from v\$session) a, 
  205. (select value tot_sessions from v\$parameter where name = 'sessions') b;" >my_sql.sql 
  206. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  207. echo "######################## 22.检查数据库会话连接历史最高值" 
  208. echo "select ' ' as \"--22.Highwater of Session\" from dual;" >my_sql.sql 
  209. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  210. echo "select HIGHWATER 
  211.  from dba_high_water_mark_statistics 
  212.  where name = 'SESSIONS';" >my_sql.sql 
  213. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  214. echo "######################## 23.检查数据库Job状态" 
  215. echo "select ' ' as \"--23.Check Status of Job\" from dual;" >my_sql.sql 
  216. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  217. echo "set linesize 333 
  218. col what for a30 
  219. col NEXT_DATE for a30  
  220. col INTERVAL for a30 
  221. select job, what, next_date, INTERVAL, BROKEN 
  222.  from dba_jobs 
  223.  where BROKEN != 'N';" >my_sql.sql 
  224. sqlplus $sqlstr <my_sql.sql>>archive/${hostn}_oracle_$hour 
  225. ###################################################################### 
  226. echo "Collection completed." 
  227. echo "The Collected result saved in ./archive/${hostn}_oracle_$hour." 
  228. echo "" 

脚本使用

1. 创建目录并授权

  1. # mkdir -p /home/oracle/scripts 
  2. # chown -R oracle.oinstall /home/oracle/scripts/ 
  3. # chmod -R 755 /home/oracle/scripts/ 

分析两个主机和Oracle数据库巡检脚本,值得收藏

分析两个主机和Oracle数据库巡检脚本,值得收藏

2. 两脚本都用oracle用户执行

切换到oracle用户,执行两个脚本:

  1. $./OSWatcher.sh 
  2. $./ORAWatcher.sh 

分析两个主机和Oracle数据库巡检脚本,值得收藏

分析两个主机和Oracle数据库巡检脚本,值得收藏

3. 查看巡检内容

分析两个主机和Oracle数据库巡检脚本,值得收藏

分析两个主机和Oracle数据库巡检脚本,值得收藏

注意:ORAWatcher.sh脚本中数据库的默认连接串是:system/system,如果system密码不是这个,可以这样执行:./ORAWatcher.sh system/password

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-08-12 08:47:14

脚本语言数据库MySQL

2019-10-31 08:22:39

shell脚本Linux

2010-04-06 18:04:09

Oracle数据库

2011-04-15 10:21:07

Oracle数据库运算

2021-12-07 08:30:38

Oracle数据库后端开发

2020-12-11 07:00:42

MySQL数据库备份脚本

2010-03-30 10:18:45

Oracle数据库

2023-12-01 15:50:46

2011-03-11 15:49:52

Oracle数据库

2010-04-29 16:36:19

Oracle数据库

2019-08-20 09:46:14

DBA收藏脚本语言

2010-04-21 13:52:17

Oracle数据库性能

2010-04-27 16:31:41

Oracle数据库

2009-03-16 13:30:55

脚本数据字典Oracle

2021-01-11 16:30:40

SQL数据库函数

2019-07-03 09:35:20

Oracle数据库监听

2019-10-16 00:37:36

Oracle数据库游标数

2009-11-20 13:29:59

Oracle数据库恢复

2019-06-27 08:03:34

Oracle数据库监听

2011-03-29 10:47:49

ORACLE数据库
点赞
收藏

51CTO技术栈公众号