ORACLE数据库 DBA常用知识
<常用命令参考>
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 wheretabtype='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添加文本到缓冲区当前行尾 aorder by tname 结果:select * from tab order bytname;
(注:a后面跟2个空格)
(c)hange/old/new 在当前行用新的文本替换旧的文本 c/*/tname 结果:selecttname from tab;
(c)hange/text 从当前行删除文本 c/tab 结果:selecttname from ;
del 删除当前行
del n 删除第n行
(i)nput 文本 在当前行之后添加一行
(l)ist显示缓冲区中所有行
(l)ist n显示缓冲区中第n行
(l)ist m n显示缓冲区中m到 n
行
run 执行当前缓冲区的命令
/ 执行当前缓冲区的命令
r 执行当前缓冲区的命令
@文件名 运行调入内存的sql文件,如:
SQL> edit s<回车>
如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,
在其中输入"select * from tab;",存盘退出。
SQL> @s<回车>
系统会自动查询当前用户下的所有表、视图、同义词。
@@文件名 在.sql文件中调用令一个.sql文件时使用
save 文件名 将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql
get 文件名 调入存盘的sql文件
start 文件名 运行调入内存的sql文件
spool 文件名 把这之后的各种操作及执行结果"假脱机"即存盘到磁盘文件上,默认文件扩展名为.lst
spool 显示当前的"假脱机"状态
spool off 停止输出
例:
SQL> spool a
SQL> spool
正假脱机到 A.LST
SQL> spool off
SQL> spool
当前无假脱机
exit退出SQL*PLUS
desc 表名 显示表的结构
show user 显示当前连接用户
show error显示错误
show all显示所有68个系统变量值
edit打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑
edit 文件名 把当前目录中指定的.sql文件调入编辑器进行编辑
clear screen清空当前屏幕显示
二.Oracle sqlplus语句编辑命令
首先我们输入这样一条指令:
SELECT emp_id, emp_name
FROM Employees
input 命令可以接着上一条指令的后面添加语句,比如在上述语句运行后输入:
input WHERE emp_age > 30
便可得到如下指令:
SELECT emp_id, emp_name
FROM Employees
WHERE emp_age > 30
ln 命令用于指定对以输入的第n行语句进行操作,比如在上述语句运行后输入:
l1则当前选中的语句行即为
SELECT emp_id, emp_name
(语句前有"*"表示)
a 命令用于直接在当前行的末尾加上字符,比如在上述语句运行后输入:
a , emp_dept
则执行的指令变为:
SELECT emp_id, emp_name, emp_dept
FROM Employees
WHERE emp_age > 30
c 命令用于修改当前语句中的字符,比如在上述语句运行后输入:
c /emp_name/emp_age/则执行的指令变为:
SELECT emp_id, emp_age, emp_dept
FROM Employees
WHERE emp_age > 30
del n 命令用于删除第n行指令,比如在上述语句运行后输入:
DEL 3
则执行的指令变为:
SELECT emp_id, emp_age, emp_dept
FROM Employees
<查看表空间>
SELECT upper(f.tablespace_name) "表空间名",
d.Tot_grootte_Mb "表空间大小(M)",
d.Tot_grootte_Mb - f.total_bytes "已使用空间(M)",
to_char(round((d.Tot_grootte_Mb -f.total_bytes) / d.Tot_grootte_Mb *100,2),'990.99') "使用比",
f.total_bytes "空闲空间(M)",
f.max_bytes "最大块(M)"
FROM
(SELECT tablespace_name,
round(SUM(bytes)/(1024*1024),2)total_bytes,
round(MAX(bytes)/(1024*1024),2)max_bytes
FROM sys.dba_free_space
GROUPBY tablespace_name) f,
(SELECT dd.tablespace_name, round(SUM(dd.bytes)/(1024*1024),2) Tot_grootte_Mb
FROM sys.dba_data_files dd
GROUPBY dd.tablespace_name) d
WHERE d.tablespace_name =f.tablespace_name
ORDERBY4DESC;
<Oracle分页查询>
1. select * fromtable_name where rownum>begin and rownum< end
2.sql = "select * from table"
con.prepareCall("SELECT * FROM(SELECT A.*, rownum r FROM("+sql+") A WHERE rownum <= "+intPage*intPageSize+") B WHERE r > "+(intPage-1)
*intPageSize);
select table_name from all_tables;//所有的表明
select table_name from user_all_tables;//用户的所有的表
一下是转贴的sql语句的帖子.
select * fromuser_objects; //查询所有的表
select * fromdba_tables; //查询所有的表
select * fromall_tables; //查询所有的表
select * fromuser_users //查出一个用户
select * fromall_users //查询所有用户
select * fromdba_users //查询所有用户
select name,dbid fromv$database; //查询数据库名和它的ID
select * from sys.user_tab_columns; //查询表名,并显示列名
describe 表名 //查询表结构
select * from sys.user_tab_columns wheretable_name=表名 //查询指定表名的字段
2: 查询数据库参数
show parameter db;
3:查询数据库的实例名
select instance_name from v$instance;
4: 数据库域名
数据库安装结束后,如果要知道正在运行额数据库是否有域名以及数据库域名名称可以用
select value from v$parameter wherename='db_domain'
show parameter domain
5:数据库服务名
如果数据库有域名,则数据库服务名就是全局数据库名,如果该数据库没有定义域名,则数据库服务名与数据库名相同
show parameter service_name
6:显示当前用户
show user
7:直接登陆
sqlplus "/as sysdba"
8:当前ORACLE系统时间
select sysdate from dual;
9:查询数据库字典v$nls_parameter产看字符集相关参数
select * from v$nls_parameters;
//*************
oracle基本操作语句(适合初学者)
oracle操作语句:
1.创建表
create table 表名(
列名1
类型,
列名2
类型
);
2.修改类属性
alter table 表名modify(列名类型);
3.添加列
alter table 表名add(列名类型);
4.添加主键约束和非空约束
alter table 表名add constraint pk_表名 primary key(列名);
alter table 表名modify(列名 not null);
5.删除主键约束
alter table 表名drop primary key;
alter table 表名drop constraint pk_表名;
6.失效约束
alter table 表名disable primary key;
alter table 表名disable constraint pk_表名;
7.有效约束
alter table 表名enable primary key;
alter table 表名enable constraint pk_表名;
8.删除列
alter table 表名drop column列名;
9.设置某列不可用,然后删除
alter table 表名set unused(列名);
alter table 表名drop unused columns;
10.修改表名
rename 表名1to表名2
alter 表名1rename to表名2;
11.截断表
truncate table 表名;
12.截断表保留行空间
truncate table 表名resue storage;
13.查看表结构
desc table 表名;
14.删除表
drop table 表名;
15.插入记录
例:insert into表名values(内容1,内容2,内容3,内容4);
16.带参数对话方式插入行
例:insert into表名values(&列名1,&列名2);
insert into 表名values(内容1,内容2);
17.插入某几列记录
insert into 表名(列名1,列名2)values(内容1,内容2);
18.为列插入空值(其列不能为notnull)
insert into 表名values(内容1,null,null);
19.创建表(包括主键及外键设置)方法一
create table 表名(
列名1
类型
constraint pk_表名primary key,
列名2
类型 not null,
列名3
类型
constraint fk_表名reference表名(列名),
列名3
类型
constraint ck_表名check(列名3 in(''内容1'',''内容2'',''内容3''))
);
20.查询所有行
select * from 表名;
21.查询某几列
select 列名1,列名2from表名;
22.重复行消除
select distict 列名from表名;
23.where语句查询
select * from 表名where条件 order by列名;
(注:如number类型查出自动按升序排列,如要按降序排列,则select* from表名
where 条件order by
列名 desc;)
24.创建表,方法二
create table 表名(
列名1
类型 primary key,
列名2
类型 not null,
列名3
类型 check(列名3in('''','''','''')),
列名4
类型 refernce
表名(列名)
);
25.修改列=‘?’的数据
update 表名set (列=?)
where 列=‘?’;
26.删除行
delete from 表名where条件;
27.事务处理
--事务处理
update 表名
set 列名(日期)= ''30-5月-98''
where 条件;
savepoint mark1;
delete from 表名where条件;
savepoint mark2;
rollback to savepoint mark1;
rollback;
28.建立用户user1,密码为password
授予用户connect,resource的权限
connect角色用于登录
resource角色用于建表等.
connect system/manager
create user user1 identified by password;
grant connect,resource to password;
29.数据控制语言
connect scott/tiger
30.把对表1查询和修改的权限授予user1
grant select,update on 表1to user1;
31.把对表表1中列1和列2修改的权限授予user1
grant update(列1,列2)on表1
to user1;
32.把对表表1查询的权限授予用户user1
并且user1用户还可以把这个权限授予别的用户(withgrant option)
grant select on 表1 to user1 with grantoption;
33.从用户user1撤销对表1查询和修改的权限
revoke select,update on 表1from user1;
<查dataguide日志同步时间>
alter session setnls_date_format='yyyy-mm-dd hh24:mi:ss';
SELECTSEQUENCE#,APPLIED,COMPLETION_TIME,status FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# desc;
<常用Sql参考> 1. oracle安装完成后的初始口令? 2. oracle9ias web cache的初始默认用户和密码? 3. oracle 8.0.5怎么创建数据库? 4. oracle 8.1.7怎么创建数据库? 5. oracle 9i 怎么创建数据库? 6. oracle中的裸设备指的是什么? 7. oracle如何区分 64-bit/32bit 版本??? 8. svrmgr什么意思? 9. 请问如何分辨某个用户是从哪台机器登陆oracle的? 10. 用什么语句查询字段呢? 11. 怎样得到触发器、过程、函数的创建脚本? 12. 怎样计算一个表占用的空间的大小? 13. 如何查看最大会话数? 14. 如何查看系统被锁的事务时间? 15. 如何以archivelog的方式运行oracle。 16. 怎么获取有哪些用户在使用数据库 17. 数据表中的字段最大数是多少? 18. 怎样查得数据库的sid ? 19. 如何在oracle服务器上通过sqlplus查看本机ip地址 ? 20. unix 下怎么调整数据库的时间? 21. 在oracle table中如何抓取memo类型字段为空的数据记录?
23. p4计算机安装方法 24. 何查询server是不是ops? 25. 何查询每个用户的权限? 26. 如何将表移动表空间? 27. 如何将索引移动表空间? 28. 在linux,unix下如何启动dba studio? 29. 查询锁的状况的对象有? 30. 如何解锁? 31. sqlplus下如何修改编辑器? 32. oracle产生随机函数是? 33. linux下查询磁盘竞争状况命令? 33. linux下查询cpu竞争状况命令? 34. 查询当前用户对象? 35. 如何获取错误信息? 36. 如何获取链接状况? 37. 查看数据库字符状况? 38. 查询表空间信息? 39. oracle的interal用户要口令? 40. 出现java.exe的解决办法? 41. 如何给表、列加注释? 42. 如何查看各个表空间占用磁盘情况? 44. 如何才能得知系统当前的scn号 ? 45. 请问如何在oracle中取毫秒? 46. 如何在字符串里加回车? 47. 中文是如何排序的? 48. oracle8i中对象名可以用中文吗? 49. 如何改变win中sql*plus启动选项? 50. 怎样修改oracel数据库的默认日期? 51. 如何将小表放入keep池中? 52. 如何检查是否安装了某个patch? 53. 如何使select语句使查询结果自动生成序号? 54. 如何知道数据裤中某个表所在的tablespace? 55. 怎么可以快速做一个和原表一样的备份表? 55. 怎么在sqlplus下修改procedure? 56. 怎样解除procedure被意外锁定? 57. sql reference是个什么东西? 58. 如何查看数据库的状态? 59. 请问如何修改一张表的主键? 60. 改变数据文件的大小? 61. 怎样查看oracle中有哪些程序在运行之中? 62. 怎么可以看到数据库有多少个tablespace? 63. 如何修改oracle数据库的用户连接数? 64. 如何查出一条记录的最后更新时间? 65. 如何在pl/sql中读写文件? 66. 怎样把“&”放入一条记录中? 67. exp 如何加query参数? 68. 关于oracle8i支持简体和繁体的字符集问题? 69. data guard是什么软件? 70. 如何创建spfile? 71. 内核参数的应用? 73. 如何单独备份一个或多个表? 74. 如何单独备份一个或多个用户? 75. 如何对clob字段进行全文检索? 76. 如何显示当前连接用户? 77. 如何查看数据文件放置的路径 ? 78. 如何查看现有回滚段及其状态 ? 79. 如何改变一个字段初始定义的check范围? 80. oracle常用系统文件有哪些? 81. 内连接inner join? 82. 如何外连接? 83. 如何执行脚本sql文件? 84. 如何快速清空一个大表? 85. 如何查有多少个数据库实例? 86. 如何查询数据库有多少表? 87. 如何测试sql语句执行所用的时间? 89. 字符串的连接 90. 怎么把select出来的结果导到一个文本文件中? 91. 怎样估算sql执行的i/o数 ? 92. 如何在sqlplus下改变字段大小? 93. 如何查询某天的数据? 94. sql 语句如何插入全年日期? 95. 假如修改表名? 96. 如何取得命令的返回状态值? 97. 如何知道用户拥有的权限? 98. 从网上下载的oracle9i与市场上卖的标准版有什么区别? 99. 怎样判定数据库是运行在归档模式下还是运行在非归档模式下? 100. sql>startup pfile和ifile,spfiled有什么区别? 101. 如何搜索出前n条记录? 102. 如何知道机器上的oracle支持多少并发用户数? 103. db_block_size可以修改吗? 104. 如何统计两个表的记录总数? 105. 怎样用sql语句实现查找一列中第n大值?
107. used_ublk为负值表示什么意思? 108. connect string是指什么? 109. 怎样扩大redo log的大小? 110. tablespace 是否不能大于4g? 111. 返回大于等于n的最小整数值? 112. 返回小于等于n的最小整数值? 113. 返回当前月的最后一天? 114. 如何不同用户间数据导入? 115. 如何找数据库表的主键字段的名称? 116. 两个结果集互加的函数? 117. 两个结果集互减的函数? 118. 如何配置sequence? 日期的各部分的常用的的写法 120>.取时间点的月份的写法: 121>.取时间点的日的写法: 122>.取时间点的时的写法: 123>.取时间点的分的写法: 124>.取时间点的秒的写法: 125>.取时间点的日期的写法: 126>.取时间点的时间的写法: 127>.日期,时间形态变为字符形态 128>.将字符串转换成日期或时间形态: 129>.返回参数的星期几的写法: 130>.返回参数一年中的第几天的写法: |
<查mview同步时间>
SELECT MVIEW_NAME, LAST_REFRESH_DATE, STALENESSFROM USER_MVIEWS;