一、Oracle安装优化
1.1 启动Oracle
netca #设置listener.org,设置监听,远程连接必须要开启监听
netmgr #设置tnsnames.ora,远程连接的别名,一般设置在client
lsnrctl start/stop/status #查看oracle的监听,开启/停止/状态
sqlplus / as sysdba #本地无验证登录sys用户
startup #启动Oracle实例
tnsping xinxin #检测lsnrctl是否启动
检查Oracle是否启动
[oracle@oracle ~]$ ps -ef | grep smon
oracle 3295 1 0 10:28 ? 00:00:00 ora_smon_orcl
1.2 查看是否开机归档的两种方式
SQL> select log_mode from v$database;
LOG_MODE
------------------------
ARCHIVELOG
--------------------------------------------------------------------------------------
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Next log sequence to archive 8
Current log sequence 8
1.3 开启归档(需要停止业务,相当于mysql-binlog)
mkdir -p /data/oracle_arch/arch
aqlplus / as sysdba
archive log list;
show parameter dest #查看归档文件
alter system set log_archive_dest_1='location=/data/oracle_arch/arch'; #指定归档的路径(归档路径满了之后数据库会夯住)
shutdown immediate; #关闭数据库
startup mount; #启动数据库,加载实例但数据库关闭
alter database archivelog; #打开归档日志,执行命令成功后返回数据库已更改的消息
alter database open; #打开数据库
select log_mode v$database #验证归档是否打开
tablespaces
dba_tablespaces 数据字典信息,保存了数据库的源数据信息
v$database 动态性能视图 ------>show status
show parameter ------->show variables
user_xxxs/dba_xxxs -----> information_schema
二、Oracle用户、权限、角色管理
2.1 简介
用户:对数据库的访问需要以适当的身份通过验证,这就是用户的作用;每个Oracle用户都有自己的用户名和密码,并且拥有他们所创建的任意表、视图和其他资源,需要注意的是新创建的用户连最基本的访问登入Oracle的权限都没有,所以后续需要授予不同的权限和角色来达成不同的操作目的;
实体权限:权限一般分为系统权限和对象权限,系统权限可以通俗地理解为将数据库对象从无到有或从有到无的创建操作,比如说创建和删除表、视图、存储过程、session等这些操作都可以认为是系统权限;对象权限赋予了你在不同的数据库对象上操作的能力,比如DELETE权限允许你对表和视图删除行,SELETE权限允许你对表、视图、序列等进行查询操作!至于系统权限和对象权限分别有哪些,具体请参照Oracle官网,这里不再详细解释!
角色:如果多个新建用户需要后续赋予10不等的不同权限,一般方法是需要将10个不等的权限分别列出来进行授予,不但麻烦而且重用性不高,角色的出现就是为了解决这个问题。Oracle角色是一组权限的集合。正常情况下我们可以授予角色一些权限,然后将角色分配给适当的用户;
2.2 权限分类
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)
2.2.1 系统权限
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
1、系统权限授权命令
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询用户拥有哪里权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
删除用户:SQL> drop user 用户名 cascade; //加上cascade则将用户连同其创建的东西全部删除
2、系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect,resorce to user50 with admin option; //可以传递所获权限。
3、系统权限回收:系统权限只能由DBA用户回收
命令:SQL> Revoke connect, resource from user50;
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
2.2.2 实体权限管理
实体权限分类:select,update,insert, alter,index,delete,all //all包括所有权限 execute------>执行存储过程权限
1、实体权限分类:select,update,insert,alter,index,delete, all //all包括所有权限
execute //执行存储过程权限
user01:
SQL> grant select,update,insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。
>>创建用户及授权管理权限
SQL> create table t1(id int,name varchar2(20));
Table created.
SQL> insert into t1 values(1,'zs');
1 row created.
SQL> commit
2 ;
Commit complete.
2. 将表的操作权限授予全体用户:
SQL> grant all on product to public; // public表示是所有的用户,这里的all权限不包括drop。
[实体权限数据字典]:
SQL> select owner,table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables; // 用户创建的表
SQL> select grantor,table_schema,table_name,privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee,owner,table_name,privilege from user_tab_privs; // 授出权限的表(授出的权限)
>创建用户及授权管理权限
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
DBA用户:
SQL> Create table stud02.product(
id number(10),
name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
as
select * from scott.emp;
4. 实体权限传递(with grant option):
user01:
SQL> grant select,update on product to user02 with grant option; // user02得到权限,并可以传递。
5. 实体权限回收:
user01:
SQL>Revoke select,update on product from user02; //传递的权限将全部丢失。
说明
1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
2.3 Oracle 用户管理
2.3.1 创建用户的Profile文件
SQL> create profile student limit #student为资源文件名file
FAILED_LOGIN_ATTEMPTS 3 #指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 #指定用户被锁定天数
PASSWORD_LIFE_TIME 30 #指定密码过期时间
2.3.2创建用户
SQL> Create User username
Identified by password
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile #指定profile名字
Quota integer/unlimited on tablespace;
------------------------------------------
>>例:
SQL> Create user acc01
identified by acc01 #如果密码是数字,请用双引号括起来
default tablespace users #指定表空间users
temporary tablespace temp #临时表空间
profile student #指定profile名字(用户限制)
quota 50m on users; #限制最多使用多少空间,一般不用
SQL> grant connect, resource to acc01;
查看表空间(存储的表空间,用户下所见的表存储的位置)
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------------------------------------
SYSTEM #系统表空间
SYSAUX #系统表空间
UNDOTBS1 #undo表空间
TEMP
USERS #用户表空间
EXAMPLE
TABLE_TEST
DATA
8 rows selected.
2.3.3 查询用户缺省表空间、临时表空间
SQL> select username,default_tablespace,temporary_tablespace from dba_users;
2.3.4 查询系统资源文件名
SQL> select * from dba_profiles; #用户限制的表,一般不限制
>>>资源文件类似表,一旦创建就会保存在数据库中
SQL> select username,profile,default_tablespace,temporary_tablespace from dba_users;
>>>修改用户的profile
SQL> create profile common limit
failed_login_attempts 5
idle_time 5;
SQL> Alter user acc01 profile common;
查询profile文件
SQL> select distinct profile from dba_profiles;
PROFILE
------------------------------------------------------------
MONITORING_PROFILE
COMMON
DEFAULT
查询profile-name=common的配置
SQL> select * from dba_profiles where profile='COMMON';
2.3.5修改用户
SQL> Alter User 用户名
Identified 口令
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
>>修改口令字:
SQL>Alter user acc01 identified by "12345";
>>修改用户缺省表空间:
SQL> Alter user acc01 default tablespace users;
>>修改用户临时表空间
SQL> Alter user acc01 temporary tablespace temp_data;
>>强制用户修改口令字:
SQL> Alter user acc01 password expire;
>>将用户加锁
SQL> Alter user acc01 account lock; // 加锁
SQL> Alter user acc01 account unlock; // 解锁
>>删除用户
SQL>drop user 用户名; //用户没有建任何实体
SQL> drop user 用户名 CASCADE; // 将用户及其所建实体全部删除
**1. 当前正连接的用户不得删除
2.3.6监视用户
>>查询用户会话信息
SQL> select username,sid,serial#,machine from v$session;
>>删除用户会话信息
SQL> Alter system kill session 'sid, serial#';
>>查询用户SQL语句
SQL> select user_name,sql_text from v$open_cursor;