sqplus用法总结

sqlplus help -
用法: SQLPLUS [ [ ] [ ] [ ] ]
其中 ::= -H | -V | [ [-M ] [-R ] [-S] ]
<登录> ::= <用户名>[/<口令>][@] | / | /NOLOG
<启动> : : = @<文件名>[.] [<参数> ...]
"-H" 显示 SQL*Plus 的版本标帜和使用语法
"-V" 显示 SQL*Plus 的版本标帜
"-M " 使用 HTML 标志选项
"-R " uses restricted mode
"-S" uses silent mode
eg:
 sqlplus username/password@DBname
==================================================================
 SQL*Plus系统环境变量有哪些?如何修改?

show和set命令是两条用于维护SQL*Plus系统变量的命令
SQL> show all --查看所有70个系统变量值
SQL> show user --显示当前连接用户
SQL> show error --显示错误
SQL> show xxx --显示xxx参数信息
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,设置1000是为了显示更多的内容,因为很多数据字典视图中用到了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

SQL*Plus中缓冲区命令列表

命令              缩写              作用
----------------  ----------------  -------------------------------------------------------
append 文本       A 文本            --添加文本到当前行尾
change/旧文/新文  C/旧文本/新文本   --在当前行用新的文本替换旧的文本
change/文本       C/文本            --从当前行删除文本
del                                 --删除当前行
del n                               --删除第n行
del n m                             --删除第n到m行
del n *                             --删除第n到当前行
del n last                          --删除第n行到最后一行
del *                               --删除当前行
Del * n                             --删除当前行到第n行
Del * last                          --删除当前行到最后一行
Del last                            --删除最后一行
input             I                 --在当前行之后添加多行,input会提示输入每一行
input 文本        i 文本            --在当前行之后添加一行
List              L                 --显示缓冲区中所有行
List n            L n               --显示缓冲区中第n行
List n m          L n m             --显示缓冲区中第n到第m行
List n *          L n *             --显示缓冲区中第n行到当前行
List n            last  L n last    --显示缓冲区中第n行到最后一行
List *            L *               --显示缓冲区中当前行
List * n          L * n             --显示缓冲区中当前行到第n行
List * last       L * last          --显示缓冲区中当前行到最后一行
List last         L last            --显示缓冲区中最后一行
Run               R                 --显示并执行当前缓冲区的命令,并使缓冲区的最后一行成为当前行
/                                   --执行当前缓冲区的命令,不显示缓冲区命令
行号                           --设置缓冲区的某一行为当前行

sqlplus下得到执行计划和统计数据的两种方法

SQL> connect /as sysdba
SQL> @?/rdbms/admin/utlxplan.sql  --建立plan_table表
SQL> create public synonym plan_table for plan_table;
SQL> grant all on plan_table to public;
SQL> @?/sqlplus/admin/plustrce.sql  --建立plustrace角色
SQL> grant plustrace to public;
在有了plan_table表和plustrace角色的情况下:
1、先explain plan for sql_stmt; 然后 @?/RDBMS/ADMIN/utlxpls 看执行计划
2、先set autotrace traceonly 然后直接执行sql_stmt;会自动显示执行计划和统计信息。
set autotrace 选项
on            显示查询结果,执行计划,统计数据
on statistics 显示查询结果,统计数据,不显示执行计划
on explain    显示查询结果,执行计划,不显示统计数据
traceonly     显示执行计划和统计结果,但不包括查询结果
traceonly statistics 仅显示统计数据

有时utlxplan.sql执行成功,但发现plustrce.sql找不到,但此时用SYSDBA是可以打开跟踪的,但用我的用户wwm却无法打开跟踪。提示
SQL> set autotrace on
SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report
初步判断,因为SYSDBA可以打开,但其他用户无法打开,是权限问题,于是查找资料。用以下语句解决
SQL> connect sys/pass@xxx as sysdba
SQL> create role wwmtrace;
SQL> grant select on v_$sesstat to wwmtrace;
SQL> grant select on v_$statname to wwmtrace;
SQL> grant select on v_$mystat to wwmtrace;
SQL> grant wwmtrace to wwm;
SQL> connect wwm/pass
SQL> set autotrace on
无错误提示,测试正确
注:8i版本通过如下方式解决:
drop role wwmtrace;
create role wwmtrace;                                                                            
grant select on v_$sesstat to wwmtrace;
grant select on v_$statname to wwmtrace;
grant select on v_$session to wwmtrace;
grant wwmtrace to your_user;

一个符合个人使用习惯的sqlplus登陆环境:

cd $ORACLE_HOME/sqlplus/admin
vi glogin.sql
增加以下内容
-----------------------------------------------------------
define_editor=vi
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
select lower(user)||'@'||global_name global_name from global_name;
set sqlprompt '&gname>'
set termout on
-----------------------------------------------------------

scott用户下emp/dept/salgrade/bonus/dummy五张表建立脚本:

SQL> @?/sqlplus/demo/demobld.sql 重建脚本
SQL> @?/sqlplus/demo/demodrop.sql 删除脚本

如果通过回车控制逐页查看数据(假如数据太多)
set pause on
set pagesize 100
每显示100-3=97行数据暂停一下!

sqlplus里出报表:
compute sum of bytes on pool
break on pool skip 1
select pool,name,bytes from v$sgastat order by 1,2;

通过sqlplus向shell传递变量

$ cat a.sh
sqlplus -S "/ as sysdba" << !
set heading off
col today noprint
column today new_val dat
select to_char( sysdate, 'yyyy-mm-dd') today from dual;
host echo 'today is ' &dat
exit;
exit;
!
$ ./a.sh
today is  2005-04-11

sqlplus里出html和excel报表

vi gettables.sql
--------------------------------------------------
select owner,table_name,tablespace_name,blocks,last_analyzed
from all_tables order by 1,2;
--------------------------------------------------
vi main.sql
--------------------------------------------------
set linesize 200
set term off verify off feedback off pagesize 999
set markup html on entmap ON spool on preformat off
spool tables.xls
@gettables.sql
spool off
exit
--------------------------------------------------
执行:
--------------------------------------------------
$ sqlplus "/ as sysdba" @main
--------------------------------------------------
把main.sql脚本中的,spool tables.xls更改为spool tables.htm,我们可以获得htm格式输出

一个sqlplus的小技巧

在sql*plus中敲命令的过程中, 想不起某个列的名字, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但下面提供的方法更简单.比如说, 你想查名称带"xxx"的业务信息, 输入了下面的语句:
SQL> select icpcode,icpservid
from service
where
这时, 你发现你想不起来业务名称的列名是什么了.这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入
SQL> select icpcode,icpservid
from service
where
#desc service
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ICPCODE                                   NOT NULL VARCHAR2(12)
ICPSERVID                                 NOT NULL VARCHAR2(10)
SERVNAME                                  NOT NULL VARCHAR2(64)
3 servname like '%xxx%';

用sqlplus只输出数据到文本文件的实例

$ vi call.sql
Prompt ***********************************
Prompt sql_file = &1
Prompt spool_file = &2
Prompt "Exit:Ctrl+c; Continue:Enter."
ACCEPT choice CHAR PROMPT 'Please confirm your input:'
set feedback off pages 0 lines 30000 trims on trim on ver off hea off time off timing off autot off echo off show off term off
spo &2
@@&1
spo off
set feedback 6 pages 14 lines 80 trims off ver on hea on term on
Prompt Spool to &2 successful!
Prompt ***********************************
$ vi exec.sql
SELECT * FROM tab where rownum < 11;
$ sqlplus wacos/oss@orcl
SQL> @call exec.sql output.lst
SQL> !more output.lst
注意:两个@@表示执行的sql文件和当前文件在同一个目录中

自定义一个符合习惯的基于DOS的sqlplus命令行

由于工作原因,经常要登陆到各个oracle环境解决问题,设置一个实用的sqlplus命令行环境是必要的:
一.首先设置dos窗口最大化,并且能显示尽量多的信息
--cmd窗口布局layout设置
windows任务栏为两栏情况下
Screen Buffer Size:
Width:1250
Height:420
Window Size:
Width:125
Height:42
Window position:
Left:-4
Top:-4
Let System position window:为空
二.在C:/Documents and Settings/yourWindowLoginUserName下新建set.sql:
set serveroutput on size 1000000
set trimspool on
set long 5000
--linesize过大了,使用desc命令显示结果格式很差,set linesize 1后再用desc.
set linesize 10000
set pagesize 42
column plan_plus_exp format a80
column global_name new_value gname
set termout off
select lower(user)||'@'||substr(global_name,1,instr(global_name,'.')-1) global_name from global_name;
set sqlprompt '&gname>'
set termout on
set pause on
三.在C:/Documents and Settings/yourWindowLoginUserName下新建sql33.bat:
sqlplus wacos/oss@orcl.33 @set
四.以后进入dos窗口后,直接敲sql33就进入sqlplus命令行窗口了.
这样以后就单击快捷方式就进入sqlplus命令行界面,该界面的特点是:
窗口最大化,显示尽量多信息
每行记录在一行显示
每显示一屏信息即暂停,按Enter继续显示下一屏
还有其它set.sql里设置好的各种属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RMAN学习测试整理1 20121219 by Apollo 一、 Oracle数据库的备份分为物理备份和逻辑备份。今天测试整理下物理备份Rman,也就是oracle的恢复管理器(Recovery Manager)。 毕竟逻辑备份是不能实现时间点恢复的,所以生产数据库肯定用物理备份来保证灾难时能够恢复。 二、 Rman热备份的前提条件:数据库需要运行在归档模式下 (1) 查看oracle数据库的archivelog mode的方式 sqlplus / as sysdba ##需要as sysdba登录,不然即使有dba权限也fail archive log list ##方式一 select name,log_mode from v$database; ##方式二 (2) 由非归档切换到归档模式 shutdown immediate startup mount alter database archivelog; alter database open; (3) 反之由归档切换到非归档模式 shutdown immediate startup mount alter database noarchivelog; ##切换到非归档 alter database open; (4) 其实oracle安装好后会默认运行在非归档模式下(安装时有开关勾选),其配置文件为init.ora,可以通过修改init.ora来调整。 sqlplus oracle/oracle show parameter spfile ##spfile和init.ora一般在一个路径下 exit cd $ORACLE_HOME/dbs vi init.ora (5) init.ora关于archive的参数 log_archive_start = true 启动自动归档 log_archive_dest = disk$rdbms:[oracle.archive] 归档日志路径 log_archive_format = “T%TS%S.ARC” 归档日志格式 三、 启用数据库备份模式 (1) 查看当前情况 select * from v$backup; select * from v$log select * from v$datafile_header (2) 整库开启备份模式alter database begin backup; 哦,忘记开启归档了。奔3的人老了呀。(非一致性备份必须开启归档) (3) 指定某个表空间开启备份模式 alter tablespace tablespace_name begin backup; 先建个tbs_apollo_backup的表空间吧: 靠,/opt下剩余只有649M,先给个200M吧,回头再从根目录划分一些出来。 create tablespace tbs_apollo_backup datafile '/opt/oracle/oradata/orcl/tbs_apollo_backup.dbf' size 200M 因为之前做了database begin backup,所有表空间都处于backup状态了。将database的backup停掉重新指定tablespace备份。 再次查看各个tablespace的backup情况 select a.tablespace_name,b.status as backup_status,a.file#, a. ts#,a.recover,a.status as on_off_status,a.name from v$datafile_header a ,v$backup b where a.file# = b.file# 四、 RMAN相关使用 1、 RMAN连接到Target Database (1) 分步进行 rman nocatlog(nocatalog会将相关备份信息即元数据放在Contronfile里面) connect target / (不像DB2那样connect to,就connect就OK了) (2) 一步到位 rman nocatlog target system/manger 权限不足,使用rman连接target的话需要sysdba权限而不是dba。 I 查看是否拥有sysdba权限 select * from v$pwfile_users; 备注:常用的查看权限视图 select * from dba_users where username='SYSTEM' select * from dba_role_privs where grantee='SYSTEM'; select * from v$pwfile_users; ii 用sys用户授予system用户sysdba权限(其实是一个角色) iii 用system用户再次连接target database (3) 可以在rman里面停起数据库(停库状态需要隐式登录,不能带网络服务名) (4) DataFile tbs_apollo_backup.dbf异常了,先解决下 alter database datafile &lsquo;datafile_name&rsquo; offline; recover datafile &lsquo;datafile_name&rsquo; alter database datafile &lsquo;datafile_name&rsquo; online; alter database open; 再次在Rman里面操作停起数据库(sql_statement用单引号或双引号括起) 2、 List命令查看备份集(在数据库控制文件或恢复目录中查询备份的历史信息的方法) (1) 查看数据库所有的备份集合 list backupset; (2) 查看指定TableSpace的备份 list copy of tablespace “TBS_APOLLO_BACKUP” list backupset of tablespace "TBS_APOLLO_BACKUP"; (3) 查看指定DataFile的备份 list backupset of datafile "/opt/oracle/oradata/orcl/users01.dbf"; (4) 查看备份汇总 list backup summary; (5) 3、 Report命令报告备份情况(判断数据库当前可恢复状态和提供数据库备份的信息) (1) report schema;(报告数据库结构) (2) report need backup;(报告需要备份的内容) (3) report obsolete(Which backups can be deleted ?)报告过期备份 (4) report unrecoberable(Which files are unrecoverable ?) 4、 CONFIGURE配置Rman参数 (1) show all命令查看所有配置 (2) CONFIGURE命令修改配置 ControlFile太重要了,一般都设置备份它 五、 准备下数据库对象 1、 临时表空间 create temporary tablespace apollo_temp tempfile &lsquo;/opt/app/oracle/oradata/orcl_apollo/Apollo_temp.dbf&rsquo; size 200m autoextend on next 50m maxsize 2048m extent management local; 2、 创建数据表空间 create tablespace apollo_data logging datafile &lsquo;/opt/app/oracle/oradata/orcl_apollo/apollo_data.dbf&rsquo; size 1g autoextend on next 50m maxsize 4096m extent management local; 备注:引用的字符串如这里的单引号在copy时异常。 3、 创建用户并指定表空间 create user rman identified by rman default tablespace apollo_data temporary tablespace apollo_temp; 4、 给用户授权 grant connect ,resource to rman; 5、 其他如table、index、function、procedure、view、sequence等。 六、 Rman备份的对象(主要包括Database、Tablespace、Datafile、Controlfile和Archivelog) Rman不能备份口令文件和初始化参数文件(也就是前面提到的init.ora)。 1、 备份DataBase backup database; backup database是一次全备份,其实省略的很多参数,相当于用的默认的。而备份好的备份集放在哪里呢? 在sqlplus里面执行show parameter db_recovery_file_dest; 查看备份后情况: list backupset; 2、 备份Tablespace backup tablespace apollo_data; RMAN-06554: WARNING: file 5 is in backup mode 该警告提示file5也就是这个表空间的备份其实已经存在了,因为刚做过full backup了嘛。 查看备份集合新增了3和4两个备份集 3、 备份Datafile backup datafile '/opt/app/oracle/oradata/orcl_apollo/system01.dbf'; 也可backup datafile 4 这里的4对应第四个datafile,可由report schema报告得知是:user01.dbf 测试备份的有点多,那么可以删除一些过期的备份。 (1) 通过删除备份集删除 (2) 通过删除备份片删除 (3) 当然直接删除全部过期更加直接 delete obsolete; (4) 删除后无过期备份存在 4、 备份Controlfile (1) 自动备份控制文件如前面示例show all后修改的参数 CONFIGURE CONTROLFILE AUTOBACKUP ON; 那么每次备份会自动备份控制文件。 (2) 手动备份控制文件 backup current controlfile; (3) 列出备份过的controlfile list backup of controlfile; 有14、15、16三个备份集里面有,那么肯定有过期的了,再验证下 report obsolete; 14和15作为过期的报告出来,16为最新的备份。 5、 备份Archivelog (1) 备份数据库时使用参数plus archivelog自动备份 backup database plus archivelog;(我们清空所有备份delete backup后重头来) (2) 手工备份 backup archivelog all; 6、 备份spfile (1) 备份时自动备份spfile CONFIGURE CONTROLFILE AUTOBACKUP ON在备份控制文件时页备份spfile (2) 手动备份 备份的spfile同样放到backupset目录下面 7、 七、 恢复数据库 1、 模拟datafile丢失或损坏进行恢复 cd $ORACLE_BASE/oradata/orcl_apollo mv ./apollo_data.dbf /home/oracle/backup/apollo_data.dbf 重启数据库看看 看来破坏了datafile正常停库都不行,需要abort才行。 起库就更不用说了 那么开始真正恢复吧,思路是这样的:由报错可见起库的实例nomount和控制文件的mount都成功了,但是在open database时报错,就需要在mount和open之间恢复。先将datafile置于offline状态,restore和recover后在online,最后在open database就OK了。 (1) 将数据库处于mount模式 (2) 将datafile 1 (即system01.dbf)置于offline (3) restore和recover(所有的铺垫都是为了这两步) restore datafile 1; recover datafile 1; (4) 将datafile 1 置于online (5) alter database open; alter database datafile 2 offline; 2、 模拟tablespace丢失或损坏进行恢复 (1) backup tablespace apollo_data (2) drop tablespace apollo_data 提示表空间非空,查看下里面的内容,是建的一些测试表。 select * from dba_segments where tablespace_name='APOLLO_DATA' and segment_name=&rsquo; AMIS_IC_MEMBER&rsquo; ; 没关系那就加上including contents选项删除吧 (3) 停库起到mount模式 (4) 进入sqplus将表空间offline alter tablespace apollo_data offline; (5) 进入rman使用restore和recover恢复表空间 restore tablespace apollo_data; recover tablespace apollo_data; 备注:从(4)、(5)开始的执行都没有成功,因为drop表空间后即使在系统表里 面也不再有改表空间的信息,模拟失败待后续研究! (1) 在rman里面备份表空间apollo_data (2) 模拟表空间里面的对象破坏进行恢复吧 select * from dba_segments where tablespace_name='APOLLO_DATA' and (3) alter tablespace apollo_data offline; (4) restore tablespace apollo_data; (5) recover tablespace apollo_data (6) alter tablespace apollo_data online; (7) apollo_data.已经恢复 备注:其实datafile和tablespace的恢复步骤是一样的。 3、 模拟controlfile丢失或损坏进行恢复 (1) 丢失controlfile (2) startup nomount; (3) restore controlfile from $BACKUP_CONTROLFILE_PATH; 如果开启CONFIGURE CONTROLFILE AUTOBACKUP ON;就可以 restore controlfile from autobackup; (4) alter database mount; (5) recover database; (6) alter database open resetlog; 4、 模拟spfile丢失或损坏进行恢复 (1) startup nomount; (2) set dbid 1330128391; (3) store spfile from autobackup; (4) shutdown immediate; (5) set dbid 1330128391; (6) startup; 5、 模拟整个database恢复 (1) startup nomount; (2) restore controlfile form autobakcup; (3) alter database mount; (4) restore database; (5) recover database; (6) alter database open resetlogs 6、 模拟redolog file恢复(其实下面操作在sqlplus里面,不在rman执行) (1) shutdown immediate; (2) startup mount; (3) recover database until cancel; (4) alter database resetlog;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值