自己整理的oracle中常见的命令:
oracle11g已经不支持isqlplus了。内置了oracle sql developer
1-----用户多次登录错误,被锁定:
ALTER USER username ACCOUNT UNLOCK;
2-----修改用户密码:
alter user system identifid by manager;
3-----创建/删除用户:
create user lisi identified by lisi;
drop user lisi cascade;
4.1-----授予与收回系统权限:
grant create session to lisi;才能登录链接到数据库;
grant unlimited tablespace to lisi;才能建立表空间,但不能建表;
grant create table to lisi;在上述两个授权成功之后,授予建表权限,就能建表;
revoke create session to lisi;
revoke create unlimited tablepspace to lisi;
revoke create table to lisi;
###### grant create session to public;
###### select* from user_sys_privs;查询当前用户所拥有的系统权限
4.2------授予与回收对象权限:
grant select on test1 to lisi;授予查询另一个用户表的权限,授予delete,update,insert权限不再赘述;
grant all on test1 to lisi;授予对表test1的所用权限;
grant update(name) on test1 to lisi;对象权限控制到列;,insert不再赘述;
###### 查询,删除不能控制到列;
5------权限,角色,表空间查询:
select * from system_privilege_map order by name;查询oracle中所有的系统权限,一般是dba;208个
select * from dba_roles;查询oracle的所有角色:55个
select distinct privilege from dba_tab_privs;查询oracle所有对象权限;17个
select tablespace_name from dba_tablespaces; 查询数据库的表空间;
select * from dba_role_privs where grantee='用户名';查询某个用户具有的角色注意用户名区分大小写
select * from dba_sys_privs where grantee=dba’;查询某个角色所拥有的系统权限;
或者是select * from dba_sys_privs where grantee='dba’;查询某个角色所拥有的系统权限;
6------运行编辑,导出sql脚本文件:
start e:\oracle\aa.sal;运行sql脚本;
edit e:\oracle\aa.sql;编辑sql脚本;
spool e:\oracle\aa.sql;建立记录文件,开始记录,然后输入命令:
spool off;记录保存;
7------使用profile管理用户口令:
账户锁定:
创建profile文件:
create profile lock_account limit failed_login_attempts 3 password_lock_time 2;设置,三次登陆失败后,限制登录2天;
修改profile:alter user lisi profile lock_account;
给账户解锁:
ALTER USER username ACCOUNT UNLOCK;
8------事物处理之建立savepoint和rollback;
savepoint aa;建立保存点;
rollback to aa;回滚到保存点aa;
#######注意;回滚的条件是,事物没有提交(commit),如果事物提交了,回滚时,提示savepoint不存在;
9------分页
9.1-----根据rowid分页:
select * from test1 where rowid in
(select id from
(select rownum rn,rid from
(select rowid rid,cid from test1 order by cid desc)
where ronnum<1000)
where rn>9980)
order by cid desc;
9.2-----分析函数分页:
select * from
(select t.*,row_number() over (order by cid desc )rk from test)
where rk<1000 and rk>9980;
9.3-----使用rownum分页:
select * from
(select a.*,rownum rn from
(select ename,job from emp) a where rownum<=10)
where rn>=5;
#######:我自己的方法:select * from (select rownum rn,ename,job from emp ) where rn>5 and rn<=10 ;
10-------数据库的逻辑备份与恢复:
10.1----非交互式导出:
1.导出方案:
$exp scott/tiger@oracl owner=scott file=e:\oracle_workspace\scott.dmp;导出自己的方案;
$exp system/manager@orcl owner=(system,scott) file=e:\oracle_workspace\system.dmp;
注:如果要导出其他方案,则需要dba的权限或者是拥有exp_full_database的权限,例如system就可以导出任何方案;
2.导出数据库:
$exp userid=system/manager@orcl full=y inctype=complete file=e:\oracle_workspace\oracle.dmp;
注:导出数据库是指利用export导出所有数据库中的对象和数据,要求该用户具有dba的权限或者是exp_full_database的权限;
########注释:交互式在这里不做详细介绍:
其实交互式导出就是先输入:$exp scott/tiger@oracl,然后根据提示选择缓存,导出类型,文件等一系列,,,,
3.导出表:
$exp scott/tiger tables=emp,dept file=e:\oracle_workspace\scott_emp_dept.dmp grants=y
说明:把scott用户里两个表emp,dept导出到文件e:\oracle_workspace\scott_emp_dept.dmp
$exp scott/tiger tables=emp query=/"where job=/'salesman/' and sal/<1600/" file=e:\oracle_workspace\scott_emp_salesman.dmp
说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600
10.2----非交互式导入:
1.导入表:
$imp userid=scott/tiger@orcl tables=(emp) file=e:\oracle_workspace\emp.dmp;导入自己的表;
$imp userid=system/manager@orcl tables=(emp) file=e:\oracle_workspace\scott_emp.dmp;导入表到其他用户;
$imp userid=scott/tiger@orcl tables=(emp) file=e:\oracle_workspace\empstrcture.dmp rows=n;导入表的结构;
$imp userid=scott/tiger@orcl tables=(emp) file=e:\oracle_workspace\empdata.dmp ignore=y;导入数据;
2.导入方案:
$imp userid=scott/tiger file=e;\oracle_workspace\scott.dmp;导入自身的方案;
$imp userid=system/manager file=e:\oracle_workspace\system_scott.dmp;导入其他的方案,一般要求具有dba的权
限
3导入数据库:
$imp userid=system/manager full=y file=e:\oracle_workspace\oracle.dmp;
########注释:交互式在这里不做详细介绍:
11--------数据字典和动态性能视图:
select table_name from user_tables;显示当前用户所拥有的所有表;
select table_name from all_tables;显示当前用户可以访问的所有表;
select table_name from dba_tables; 显示所有方案拥有的数据库表,一般要求dba和有select any tables的系统权限才能生效;
12--------建立,使用表空间:
create tablespace data01 datafile 'e:\oracle_workspace\data01.dbf' size 20m unform 128k;
建立名称为data01的表空间,并为表空间建立data01.dbf的数据文件,区的大小为128K;
create table mydata(deptno number(4),dname varchar2(24)) tablespace data01;
使用表空间,在表空间建立表mydata;
alter tablespace data01 add datafile 'e:\oracle_workspace\test.dbf' size 20m;
增加数据文件;
alter database datafile 'e:\oracle_workspace\test.dbf'resize 20m;
增加2数据文件的大小;
alter database datafile 'e:\oracle_workspace\test.dbf' autoextend on next 10m maxsize 500m;
设置文件的自动增长;
13------查看错误:
show error;当输入语句或者命令提示错误时,使用此命令显示详细的错误信息;
14-----oracle查看数据文件, 控制文件, 及日志文件命令
一. 查看数据文件
SQL> select name from v$datafile;
二. 查看控件文件
SQL> select name from v$controlfile;
三. 查看日志文件
SQL> select member from v$logfile;
四查看所有的管理员:
SQL>select * from v$pwfile_users;
15------先查询空闲空间
select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space;
16------关于权限的传递问题(最好以自己数据库的测试为准),下面是我在orcle11g下测试的结果
一.系统权限
1).举例,sysdba授予scott用户的create session with admin option ,然后scott授予wangwu权限create session (没有加with admin option )
测试结果如下,
1.当sysdba revoke create session from scott时,wangwu任然可以登录,但不能将权限授予其他用户(没有加with admin option );
2).举例,sysdba授予scott用户的create session with admin option ,然后scott授予wangwu权限create session with admin option
1.当sysdba revoke create session from scott时,wangwu还可以把此权限授予其他用户。
二.对象权限
举例,scott授予lisi权限select on emp with grant option ,lisi授予xiaoming权限select on emp with grant option
1.当scott收回权限revoke select on emp from lisi,xiaoming的访问权限,和授予权限全部被收回。
17-----查看进程信息
1)、从v$process中查询启动的后台进程信息
2)、查看启动了几个DBWR进程
select * from v$process where program like '%DBW%';
查看DBWR进程个数: show parameter db_wr,DBWR进程个数跟脏数据的产生有一定的影响。
修改DBWR进程个数:
alter system set db_writer_processes=3 scope=memory; --会报"无法修改指定的初始化参数"错误
alter system set db_writer_processes=3 scope=spfile;--修改成功,下次启动时才生效
3)、查看启动了几个ARC进程
select * from v$process where program like '%ARC%';
4)查看是否有归档日志:archive log list;
5)查看表空间的具体信息
select * from dba_data_files;
6)查看表空间
select * from v$tablespace;
18-----11g中的自动内存管理
i1、自动内存管理,即AMM,Automatic Memory Management。只为Oracle的使用整体分配一个总的内存大小就可以了,不必像10g那样具体分配SGA和PGA的大小。
i2、初始化参数statistics_level为typical或all,才可以启动AMM。
show parameter statistics_level; --查看AMM
show parameter memory; --查看整个oracle占用了多大内存
alter system set memory_max_target=900m;--设置内存最大可以达到多大
i3、新的初始化参数memory_target来定义了整个内存的大小,即SGA加上PGA的总的大小。
alter system set memory_target=500m; --memory_target设置的值要不大于memory_max_target
i4、新的初始化参数memory_max_target来定义了memory_target最大可以达到的值。
alter system set memory_max_target=900m scope=spfile; --下次启动生效,scope=spfile不能省略否则报错
i5、注意:如果使用AMM,则sga_target和pga_aggregate_target的值应该设置成0。
show parameter sga_target;
show parameter page_aggregate_target;
alter system set sga_target=0m;
alter system set pag_aggregate_target=0;
i6、11g中的后台进程MMAN,用于进行自动内存管理。
19 ------打开显示操作时间的开关,在底部显示操作时间
set timing on/off;
eg、sql> insert into tb_stu values('0001', 'zhangsan', 24);
1 row inserted
executed in 0.015 seconds
20.设置只读事务。
SQL> set transaction read only;