Oracle数据库sqlplus常用命令

时间:2021-03-25 08:38:30

1、得到数据库名和创建日期

  SELECT name, created, log_mode, open_mode FROM v$database;

     2ORACLE数据库的计算机的主机名,ORACLE数据库的实例名及ORACLE数据库管理系统的版本信息

  SELECT host_name, instance_name, version FROMv$instance;

  3、为了知道oracle数据库版本的一些特殊信息

  select * from v$version;

  4、获取控制文件名字

  select * from v$controlfile;

  5、得到Oracle数据库的重做日志配置信息

  SELECT group#, members, bytes, status, archived FROM v$log;

  select GROUP#,MEMBER from v$logfile;

  6、获取oracle的每个重做日志(成员)文件所存放的具体位置

  select * from v$logfile;

  7、知道ORACLE数据库的备份和恢复策略和归档文件的具体位置

  archive log list

  8、知道ORACLE数据库中到底有多少表空间以及每个表空间的状态

  select tablespace_name, block_size, status, contents, logging from dba_tablespaces;

  select tablespace_name, status from dba_tablespaces;

  9、知道每个表空间存在哪个磁盘上以及文件的名字等信息

  SELECT file_id, file_name, tablespace_name, status, bytes from dba_data_files;

  select file_name, tablespace_name from dba_data_files;

  10、知道Oracle数据库系统上到底有多少用户和都是什么时候创建的

  select username,created from dba_users;

  select username, DEFAULT_TABLESPACE from dba_users;

  11、从控制文件中取出信息涉及到以下一些相关的命令

  select * from v$archived

  select * from v$archived_log

  select * from v$backup

  select * from v$database

  select * from v$datafile

  select * from v$log

  select * from v$logfile

  select * from v$loghist

  select * from v$tablespace

  select * from v$tempfile

  12、控制文件由两大部份组成:可重用的部份和不可重用的部分。可重用的部分的大小可用CONTROL_FILE_RECORD_KEEP_TIME参数来控制,该参数的默认值为7天,即可重用的部份的内容保留7天,一周之后这部份的内容可能被覆盖。可重用的部份是供恢复管理器来使用的,这部份的内容可以自动扩展。Oracle数据库管理员可以使用CREAT DATABASECREAT CONTROLFILE语句中的下列关键字(参数)来间接影响不可重用的部份的大小:

  MAXDATAFILES

  MAXINSTANCES

  MAXLOGFILES

  MAXLOGHISTORY

  MAXLOGMEMBERS

  13、查看控制文件的配置

  SELECT type, record_size, records_total, records_used FROM v$controlfile_record_section;

  14、如果您的显示被分成了两部分,您需要使用类似于set pagesize 100SQL*Plus命令先格式化输出。有关的格式化输出命令有以下这些:

  record_size 为每个记录的字节数。

  records_total:为该段所分配的记录个数。

  records_used:为该段所使用的记录个数。

  15、知道控制文件中的所有数据文件(DATAFILE),表空间(TABLESPACE),和重做日志(REDO LOG)所使用的记录情况

  SELECT type, record_size, records_total, records_used

  FROM v$controlfile_record_section

  WHERE type IN ( 'DATAFILE', 'TABLESPACE', 'REDO LOG');

  16、获取控制文件名字

  select value from v$parameter where name ='control_files';

  或者:select * from v$controlfile

  17、如何在一个已经安装的Oracle数据库中添加或移动控制文件呢?

  以下是在一个已经安装的Oracle数据库中添加或移动控制文件的具体步骤:

  a、利用数据字典v$controlfile来获取现有控制文件名字。

  b、正常关闭Oracle数据库。

  c、将新的控制文件名添加到参数文件的CONTROL_FILES参数中。

  d、使用操作系统的复制命令将现有控制文件复制到指定位置。

  e、重新启动Oracle数据库。

  f、利用数据字典v$controlfile来验证新的控制文件名字是否正确。

  g、如果有误重做上述操作,如果无误删除无用的旧控制文件。

  注:如果您使用了服务器初始化参数文件(SPFILE),您不能关闭Oracle数据库而且应该在第3步使用alter system set control_filesOracle命令来改变控制文件的位置。

  SQL> alter system set control_files =

  'D:\Disk3\CONTROL01.CTL',

  'D:\Disk6\CONTROL02.CTL',

  'D:\Disk9\CONTROL03.CTL' SCOPE=SPFILE;

  18、由于控制文件是一个极其种要的文件,除了以上所说的将控制文件的多个副本存在不同的硬盘上的保护措施外,在数据库的结构变化之后,您应立即对控制文件进行备份。可以用Oracle命令来对控制文件进行备份:

  alter database backup controlfile to 'D:\backup\control.bak';

  19、您也可将备份到一个追踪文件中。该追踪文件包含有重建控制文件所需的SQL语句。可使用以下SQL语句来产生这一追踪文件:

  alter database backup controlfile to trace;

  20、正常关闭oracle命令

shutdown immediate

showset命令是两条用于维护SQL*Plus系统变量的命令
SQL> show all --
查看所有68个系统变量值 
SQL> show user --
显示当前连接用户
 
SQL> show error
   --显示错误
 
SQL> set heading off --
禁止输出列标题,默认值为
ON 
SQL> set feedback off --
禁止显示最后一行的计数反馈信息,默认值为"6个或更多的记录,回送
ON" 
SQL> set timing on --
默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
 
SQL> set sqlprompt "SQL> " --
设置默认提示符,默认值就是
"SQL> " 
SQL> set linesize 1000 --
设置屏幕显示行宽,默认
100 
SQL> set autocommit ON --
设置是否自动提交,默认为
OFF 
SQL> set pause on --
默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页
 
SQL> set arraysize 1 --
默认为
15 
SQL> set long 1000 --
默认为
80 
说明:
 
long
值默认为80,设置1000是为了显示更多的内容,因为很多数据字典视图中用到了long数据类型,如:
 
SQL> desc user_views 
列名 可空值否 类型
 
------------------------------- -------- ---- 
VIEW_NAME NOT NULL VARCHAR2(30) 
TEXT_LENGTH NUMBER 
TEXT LONG 
SQL> define a = '''20000101 12:01:01''' --
定义局部变量,如果想用一个类似在各种显示中所包括的回车那样的常量,
 
--
可以用define命令来设置
 
SQL> select &a from dual; 
原值 
1: select &a from dual 
新值 
1: select '20000101 12:01:01' from dual 
'2000010112:01:01 
----------------- 
20000101 12:01:01 
问题提出:
 
1
、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作,这时,一遍、一遍的键入SQL语句是很麻烦的
 
实现方法:
 
SQL> set heading off --
禁止输出列标题
 
SQL> set feedback off --
禁止显示最后一行的计数反馈信息
 
列出当前用户下所有同义词的定义,可用来测试同义词的真实存在性
 
select 'desc '||tname from tab where tabtype='SYNONYM'; 
查询当前用户下所有表的记录数
 
select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE'; 
把所有符合条件的表的select权限授予为
public 
select 'grant select on '||table_name||' to public;' from user_tables where
 《条件》

删除用户下各种对象
 
select 'drop '||tabtype||' '||tname from tab; 
删除符合条件用户
 
select 'drop user '||username||' cascade;' from all_users where user_id>25; 
快速编译所有视图
 
----
当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,
 
----
因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。
 
SQL> SPOOL ON.SQL 
SQL> SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB; 
SQL> SPOOL OFF 
然后执行ON.SQL即可。
 
SQL> @ON.SQL 
当然,授权和创建同义词也可以快速进行,如:
 
SQL> SELECT 'GRANT SELECT ON '||TNAME||' TO
 用户名
;' FROM TAB; 
SQL> SELECT 'CREATE SYNONYM '||TNAME||' FOR
 用户名
.'||TNAME||';' FROM TAB; 
命令列表:
 
假设当前执行命令为:
select * from tab; 
(a)ppend
     添加文本到缓冲区当前行尾    a order by tname 结果:select * from tab order by tname; (注:a后面跟2个空格)
 
(c)hange/old/new
 在当前行用新的文本替换旧的文本 c

SQL> show parameter process;

 

SQL> select * from v$parameter where name like '%session%';

生成pfilespfile

 

SQL> create pfile from spfile;

 

SQL> create spfile from pfile;

按步骤启动数据库:

SQL> startup nomount;

SQL> alter database mount;

SQL> alter database open [read only]

启动时指定参数文件:

SQL> startup pfile='/database/initSID2.ora';

以受限方式启动:

SQL> startup restrict;

把数据库设置为受限模式:

SQL> alter system enable restricted;

修改参数文件内容:

SQL> alter system set control_files='/control01.ctl' scope=spfile;

关于Oracle的故障查找:

1、发生故障时的第一步要做的是备份当前的数据,这叫保留事故现场,以免处理故障失败时无法再现初始故障。

2、分步骤启动,确定故障所在:如果第1步失败,则要先检查共享内存、参数文件配置等;如果在第2步失败,则说明极有可能是控制文件出错,要先检查警告文件中的警告信息,恢复控制文件再说;如果在第3步失败,则要检查数据文件和日志文件是否完整可用,也可根据警告文件中的警告信息来排查故障。

3、确认三大核心文件(控制文件、数据文件、日志文件)的检查点是否一致,这是数据库能启动的唯一标志。

手工切换重做日志文件组:

SQL> alter system switch logfile;

添加联机重做日志文件组:

SQL> alter database add logfile group 4 ('/oradata/log4a.log','/oradata/log4b.log') size 10M;

 

添加联机重做日志文件组成员:

SQL> alter database add logfile member '/oradata/log4c.log' to group 4, '/oradata/log3c.log' to group 3;

删除联机重做日志文件组(当前组不能删除,至少保留两组)

SQL> alter database drop logfile group 4;

删除联机重做日志文件组成员(只有一个成员时不能删除)

SQL> alter database drop logfile member '/oradata/log4a.log';

清除日志文件内容:

SQL> alter database clear logfile '/oradata/log3c.log';

关于三大核心文件的几点注意事项:

1、控制文件最多可以有8个,多个控制文件最好放在不同的物理磁盘上,有一个出错时可以从其他文件恢复。

2、重做日志文件组是按顺序写、循环写。至少需要两个组,可以有多个组,每个组可以有多个成员,每个成员文件最好也放在不同的物理磁盘上。当归档模式下日志文件占用空间过大时,可以删除部分组来节省空间,但记住从控制文件中删除之后还必须删除物理文件才能腾出空间。

3、不可以删除当前正在使用的重做日志文件组,所以要删除时可手动切换(switch)当前日志文件组后再删除。

4、不可以删除重做日志文件组的最后一个成员,若要删除,可直接删除该组。

5、必须要保留两个重做日志文件组支持正常运行,如果要想删除其中一组是不可能的,但可以清除(clear)其中的数据。