您的位置:首页 > 数据库 > Oracle

oracle系统管理常用sql语句

2013-05-24 17:58 615 查看
user_XXX all_XXX dba_XXX --数据字典保存的是oracle系统信息,分为这三个。

---

----------------------------------系统用户、表、索引信息-----------------------------------

select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name');—— 查看某表的大小

select table_name,cache from user_tables where instr(cache,'Y')>0;——查看放在ORACLE的内存区里的表

select * from user_synonyms;——查看同义词的名称

查看函数和过程的状态

  SQL>select object_name,status from user_objects where object_type='FUNCTION';

  SQL>select object_name,status from user_objects where object_type='PROCEDURE';

select text from all_source where owner=user and name=upper('&plsql_name');——查看函数和过程的源代码

select * from dba_objects; 数据对象

select * from user_objects;

select username from dba_users;--查看系统的全部用户了,注意,在表里面都变成了大写。

select table_name from user_tables;--查看该用户的表

select table_name from all_tables;--查看该用户可以访问的表

select * from user_tablespaces;--查看表空间

select * from dba_tablespaces;--查看表空间

select * from user_indexes;--查看索引 dba_indexs is not exist

select * from dba_users;--88A2B2C183431F00 查看系统用户 崔钟

select length(t.password) from dba_users t where rownum <2;--16,not 32.

select distinct(t.GRANTEE) from dba_sys_privs t;

select * from dba_role_privs t where t.GRANTEE=upper('lele');--查看乐乐拥有的角色

select * from dba_roles;--oracle roles

select * from global_name;--全局数据库名==sid==主机字符串==实例名

-------------------------------------表空间与数据文件-----------------------------------

create tablespace test02 datafile 'd:\ykdatefile03.dbf' size 100m uniform size 64k; --数据文件1g,区大小64k。error,是因为语法错误,datafile、size丢失。。。

select table_name from dba_tables where tablespace_name=upper('users');--查看属于某个表空间的表

drop tablespace 'biaomingzi' including contents and datafiles;--删除表空间及其对象

--alter tablespace datefileyk add datafile 'd:\adddatafile02.dbf' size 50m uniform size 128k;--扩展表空间方法一:增加数据文件(error by 'uniform size 128k')

alter tablespace datefileyk add datafile 'd:\adddatafile02.dbf' size 50m;--扩展表空间方法一:增加数据文件

alter tablespace test01 'd:\ykdatefile02.dbf' resize 150m;--扩展表空间方法二:增大数据文件--error

alter database datafile 'd:\ykdatefile02.dbf' resize 150m;--扩展表空间方法二:增大数据文件--right!

alter database datafile 'd:\ykdatefile02.dbf' autoextend on next 100m maxsize 200m;--扩展表空间方法三:设置数据文件自动增长--righit!

alter database datafile '/u01/app/oracle/oradata/cmsdb/users01.dbf' autoextend on next 100M MAXSIZE UNLIMITED;--扩展表空间四,不限制增长。该方法不宜使用!魔屏资讯、users。fchen

alter tablespace users online;--offline,脱机状态,当移动数据文件时执行脱机。

--修改数据文件,不需要指明表空间,因为数据文件肯定属于一个特定的表空间,而创建、增加数据文件的时候,则必须指明这些文件是属于哪个tablespace的。

--datafile

select * from dba_data_files;--查看表空间和它的数据文件的位置!!!

--执行命令mv 移动数据文件,执行命令rename 修改datafile名字。

SELECT tablespace_name 表空间,sum(blocks*8/1024) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;--查看剩余表空间

select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;

------------------------------------oracle中的约束-----------------------------------

not null,primary key,foreign key,check,unique.

---------index---------

1.大表上建立索引才有意义

2.在where子句或者是连接条件上经常使用的列上建立索引

3.索引不要超过4层

--

4.单索引,即建立在单列上的索引,一个表可以建立多个索引

5.符合索引,建立在两个列或者更多列上的索引,但要求组合(排列)必须不同,如

create index ind_dpixuqiu on dpixuqiu(id,name);

create index ind_dpixuqiu on dpixuqiu(name,id);

这是两个不同的索引,建议写sql的时候,记住列上的索引是如何建立的!

6.修改表结构,维护成本高。。。

---

SQL> conn sys/zhangle as sysdba;--使用sys登录,必须as sysdba或者sysoper,不能是normal!!!搞了一天,也问了浩伟,原来是这个情况。。。what a fucking things!

grant update on dpixuqiu(name) to xiaoshuai;--select delete update insert和alter,可以具体到某个字段。

-------------------------------------拜神测试-----------------------------------

---
select *
from (select * from tadmin where rownum < 10) t
where rownum > 2;
select rownum rn, t.* from tadmin t where rownum < 5;
select *
from (select t.*, rownum rn from tadmin t where rownum < 5) t
where rn > 2;
--
insert into test2 values (1, '测试数据1....1', sysdate, 'y');
insert into test2 values (2, '百胜', sysdate, 'N');
insert into test2 values (5, '测试数据1....3', sysdate, 'Y');
insert into test2 values (11, '测试数据1....3', sysdate, 'Y');
commit;
update test2 set testname='百胜凯哥' where id=1;
select * from test2;
--
update test1
set testname =test2.testname
where exists (select 1 from test2 where test1.id=test2.id);

(select s.testname from test1 t, test2 s where t.id = s.id);
--
update test1 t
set t.testname =
(select s.testname from test1 t, test2 s where t.id = s.id)
where t.id in (select t.id from test1 t, test2 s where t.id = s.id);
--
--正确的
update test1 t
set testname =
(select s.testname
from test2 s
where t.id = s.id)
where t.id in (select t.id from test1 t, test2 s where t.id = s.id);
----
commit;
rollback;
where t.id = 2;
select * from test1;

update test1 t set t.testname = test2.testname where t.id = test2.id;
select lower(t.cadduser) from tadmin t;--upper lower
select upper(substr(t.cadduser,1,1))||lower(substr(t.cadduser,2,length(t.cadduser)-1)) from tadmin t;

create table addr02(iid2 number(2),cname2 char(8));

alter table addr02 modify iid2 number(2) primary key;

alter table addr01 add ttime date;

insert into addr02 values ('1','kai01');

insert into addr02 values ('2','kai02');

insert into addr02 values ('4','kai03');

insert into addr01 values ('4','kai01',sysdate);

select * from addr01;

commit;

rollback;

update addr01,addr02 set addr01.cname1=addr02.cname2 where addr01.iid=addr02.iid2;--mysql下可以

update addr01 t set t.cname1=(select s.cname2 from addr02 s where t.iid=s.iid2) where t.iid in (select s.iid2 from addr02 s where t.iid=s.iid2);

create table addr02(iid2 number(2) primary key,cname2 char(8));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: