1、先要了解当前的Oracle 数据库的版本和平台和相关信息
这个很重要,忙乎了半天还知道你的数据库是哪个版本,跑在什么系统上,那岂不是很悲哀,所以我个人认为这是第一步需要了解的。下面的这些脚本可以帮助你获取你需要的相关信息。 select * from v$version; select * from dba_registry_database; select dbid, name, open_mode, database_role, platform_name from v$instance; select dbms_utility.port_string from dual;set serveroutput on
declare ver VARCHAR2(100); compat VARCHAR2(100); begin dbms_utility.db_version(ver, compat); dbms_output.put_line('Version: ' || ver ||' Compatible: ' || compat); end; / 2、其次要了解你的数据库中装了哪些组件 select * from dba_registry; 3、搞清楚这个环境是单机还是集群? 这个判断方法很多,我这里给出一个借助dbms_utility来判断的方法。 set serveroutput ondeclare
inst_tab dbms_utility.instance_table; inst_cnt NUMBER; begin if dbms_utility.is_cluster_database then dbms_utility.active_instances(inst_tab, inst_cnt); dbms_output.put_line('-' || inst_tab.FIRST); dbms_output.put_line(TO_CHAR(inst_cnt)); else dbms_output.put_line('Not A Clustered Database'); end if; end; / 4、是否配置了DataGuard? select protection_mode, protection_level, remote_archive, database_role, dataguard_broker,guard_status from v$database; 5、是否起用了归档模式? conn /as sysdba archive log list; select log_mode from v$database; 6、是否起用了flashback database特性? select flashback_on from v$database; 如果是,再进一步查看FRA的配置情况 7、是否起用了force logging和补充日志? select force_logging,supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui, supplemental_log_data_fk, supplemental_log_data_all from v$database; 8、了解控制文件的组成 select * from v$controlfile; 9、了解日志文件的组成 select l.group#, lf.type, lf.member, l.bytes, l.status LOG_STATUS, lf.status LOGFILE_STATUS from v$log l, v$logfile lf where l.group# = lf.group# order by 1,3; 10、了解参数文件的组成和位置 show parameter spfile create spfile from pfile... create pfile from spfile; create spfile from memory; create pfile from memory; 11、了解instance的相关信息 select instance_name, host_name, status, archiver, database_status, instance_role, active_state from v$instance; 12、用户和密码相关 是否使用了缺省密码? 是否使用了profile? 是否起用了密码验证函数? 用户身份验证的方法? 密码是否区分大小写等。 select name, value from gv$parameter where name = 'resource_limit'; select profile, resource_name, limit from dba_profiles order by 1,2; select username, profile from dba_users where account_status = 'OPEN' order by 1; select d.username, u.account_status from dba_users_with_defpwd d, dba_users u where d.username = u.username and account_status = 'OPEN' order by 2,1; 13、是否打开了BLOCK CHANGE TRACKING select filename, status, bytes from v$block_change_tracking; 14、起用了那些特性(Feature)? DBMS_FEATURE_USAGE_REPORT 15、表空间和数据文件的规划 这个大家都很熟悉,就不写了 16、字符集相关 select * from database_properties; 17、系统中是否存在invalid对象 select owner, object_type, COUNT(*) from dba_objects where status = 'INVALID' group by owner, object_type; 18、更进一步的 是否使用了ASM? 当前系统的备份方法和策略是什么? 网络文件的配置是如何的? 19、查看一下最近的alert日志,获取一些有用的信息 20、跑几个性能分析报告,看看最近系统的运行状态如何 21、跑一个RDA报告,收集完整的系统状态报告 1、查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name; 3、查看回滚段名称及大小 select segment_name, tablespace_name, r.status, (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent, max_extents, v.curext CurExtent From dba_rollback_segs r, v$rollstat v Where r.segment_id = v.usn(+) order by segment_name ; 4、查看控制文件 select name from v$controlfile; 5、查看日志文件 select member from v$logfile; 6、查看表空间的使用情况 select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name; SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; 7、查看数据库库对象 select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status; 8、查看数据库的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle'; 9、查看数据库的创建日期和归档方式 Select Created, Log_Mode, Log_Mode From V$Database; 10、查看当前所有对象 SQL> select * from tab; 11、建一个和a表结构一样的空表 SQL> create table b as select * from a where 1=2; SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2; 12、察看数据库的大小,和空间使用情况 SQL> col tablespace format a20 SQL> select b.file_id 文件ID, b.tablespace_name 表空间, b.file_name 物理文件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name / dba_free_space --表空间剩余空间状况 dba_data_files --数据文件空间占用情况 13、查看现有回滚段及其状态 SQL> col segment format a30 SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS; 14、查看数据文件放置的路径 SQL> col file_name format a50 SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; 15、显示当前连接用户 SQL> show user 16、把SQL*Plus当计算器 SQL> select 100*20 from dual; 17、连接字符串 SQL> select 列1||列2 from 表1; SQL> select concat(列1,列2) from 表1; 18、查询当前日期 SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual; 19、用户间复制数据 SQL> copy from user1 to user2 create table2 using select * from table1; 20、视图中不能使用order by,但可用group by代替来达到排序目的 SQL> create view a as select b1,b2 from b group by b1,b2; 21、通过授权的方式来创建用户 SQL> grant connect,resource to test identified by test; SQL> conn test/test