Oracle
- 环境设置
1
2
3export ORACLE_SID=orcl
export ORACLE_BASE=oracle_install_dir
export ORACLE_HOME=oracle_install_dir/oracle12c - 启动
1
2oracle> startup open
bash# lsnrctl start- startup nomount
非安装启动,这种方式启动下可执行:重建控制文件、重建数据库,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 - startup mount dbname
安装启动,这种方式启动下可执行:数据库日志归档、数据库恢复、重新命名一些数据库文件
如:系统表空间或日志文件。
执行“nomount”,然后打开控制文件 - startup open dbname
先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据库中的数据。 - startup,等于以下三个命令
startup nomount
alter database mount
alter database open - startup restrict
约束方式启动
这种方式能够启动数据库,但只允许具有一定特权的用户访问
非特权用户访问时,会出现以下提示:
ERROR:
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 - startup force
强制启动方式
当不能关闭数据库时,可以用startup force来完成数据库的关闭
先关闭数据库,再执行正常启动数据库命令 - startup pfile=参数文件名
带初始化参数文件的启动方式
先读取参数文件,再按参数文件中的设置启动数据库
例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora - startup EXCLUSIVE
- startup nomount
- 关闭
1
2bash# lsnrctl stop
oracle> shutdown immediate- Normal 需要等待所有的用户断开连接
normal需要在所有连接用户断开后才执行关闭数据库任务,所以有的时候看起来好象命令没有运行一样!在执行这个命令后不允许新的连接 - Immediate 等待用户完成当前的语句
immediate在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。数据库并不立即关闭,而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源)。 - Transactional 等待用户完成当前的事务
transactional 在用户执行完当前事物后断开连接,并不允许新的用户连接数据库。 - Abort 不做任何等待,直接关闭数据库
abort 执行强行断开连接并直接关闭数据库。直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。
- Normal 需要等待所有的用户断开连接
sqlplus中使用其他帐户连接
- conn system/manager;
- conn sys/change_on_install as sysdba;
- show user 显示此时连接的是哪个帐户
授权
grant dba to USER;
grant connect,resource to USER;
用户成功创建,但是还不能正常的登录Oracle数据库系统,因为该用户还没有任何权限。如果用户能够正常登录,至少需要CREATE SESSION系统权限。
介绍几个常用角色:
CONNECT角色,主要应用在临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECT role。CONNECT是使用Oracle的简单权限,拥有CONNECT角色的用户,可以与服务器建立连接会话(session,客户端对服务器连接,称为会话)。
RESOURCE角色,更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)等。
DBA角色,DBA role拥有所有的系统权限—-包括无限制的空间限额和给其他用户授予各种权限的能力。用户SYSTEM拥有DBA角色。
一般情况下,一个普通的用户(如SCOTT),拥有CONNECT和RESOURCE两个角色即可进行常规的数据库开发工作。drop user user_name USER;
在以超级管理员sys登陆时必须加 as sysdba 否则连接不上
如果以system 或 sys登陆时 输入 select * from emp;会出错 因为system和 sys没有emp这张表
如果此时想在不同用户下访问emp表 则需加上该表所在的用户名 例如 select * from scott.emp;
sqlplus中对于表的信息的查看
- 查看所有表名,会列出该帐户权限下的所有的表名
select table_name from cat; select table_name from tab; select table_name from user_tables; select owner,table_name from dba_tables;
- 查看表的结构
describe 表名;
3./ 要想继续使用上一次的正确的指令 可以直接 / 即可重复执行上一条指令 - 查看当前用户的缺省表空间
select username,default_tablespace from user_users;
- 查看当前用户的角色
select * from user_role_privs;
- 查看当前用户的系统权限和表级权限
select * from user_sys_privs; select * from user_tab_privs;
- 查看用户下所有的表的列属性
select * from USER_TAB_COLUMNS where table_name=:table_Name;
- 显示用户信息(所属表空间)
select default_tablespace,temporary_tablespace from dba_users where username='GAME';
- 查看当前用户的系统权限和表级权限
select * from user_sys_privs; select * from user_tab_privs;
- 显示当前会话所具有的权限
select * from session_privs;
- 显示指定用户所具有的系统权限
select * from dba_sys_privs where grantee='GAME';
- 显示特权用户
select * from v$pwfile_users;
- 显示用户信息(所属表空间)
select default_tablespace,temporary_tablespace from dba_users where username='GAME';
- 显示用户的PROFILE
select profile from dba_users where username=’GAME’;
表
- 查看用户下所有的表
select * from cat; select * from tab; select table_name from user_tables;
- 查看名称包含log字符的表
select object_name,object_id from user_objects where instr(object_name,'LOG')>0;
- 查看某表的创建时间
select object_name,created from user_objects where object_name=upper('&table_name');
- 查看某表的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&table_name');
- 查看放在Oracle的内存区里的表
select table_name,cache from user_tables where instr(cache,'Y')>0;
索引
- 查看索引
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;
- 查看索引个数和类别
select index_name,index_type,table_name from user_indexes order by table_name;
- 查看索引被索引的字段
select * from user_ind_columns where index_name=upper('&index_name');
- 查看索引的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segmentswhere segment_name=upper('&index_name');
序列号
- 查看序列号,last_number是当前值
select * from user_sequences;
视图
- 查看视图的名称
select text from user_views where view_name=upper('&view_name'); select view_name from user_views;
- 查看创建视图的select语句
set view_name,text_length from user_views; set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 select text from user_views where view_name=upper('&view_name');
同义词
- 查看同义词的名称
select * from user_synonyms;
约束条件
查看某表的约束条件
`
select constraint_name, constraint_type,search_condition, r_constraint_name
from user_constraints where table_name = upper(‘&table_name’);select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper(‘&table_owner’) and c.table_name = upper(‘&table_name’)
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;
`
存储函数和过程
- 查看函数和过程的状态
select object_name,status from user_objects where object_type='FUNCTION'; select object_name,status from user_objects where object_type='PROCEDURE';
- 查看函数和过程的源代码
select text from all_source where owner=user and name=upper('&plsql_name');
系统表
ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYSYTEM进行查询。几个重要的表或者视图如下:
1 | v$controlfile:控制文件的信息; |
上面的视图名中的‘v$’,只是视图名字中的字符。类似于上面的视图或表还有很多,位于: $ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL文件中。
这些视图或表可以在SQLPLUS中用SELECT语句进行查询。
数据字典视图
1 | 动态字典 |
1 | SET AUTOTRACE OFF 此为默认值,即关闭Autotrace |