Oracle数据库03-用户权限与数据库的连接一、oracle用户与权限管理1、用户管理
只有合法的用户账号才能访问Oracle数据库,Oracle有几个默认的数据库用户。
创建用户核对清单:
·选择用户名密码
·识别用户需要用于存储对象的表空间
·决定每个表空间的限额
·分配缺省表空间和临时表空间
·创建用户
·向用户授予权限和角色
(1)查看系统用户及状态
SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
—————————— ——————————–
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
EXFSYS EXPIRED & LOCKED
WMSYS EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
—————————— ——————————–
APPQOSSYS EXPIRED & LOCKED
APEX_030200 EXPIRED & LOCKED
OWBSYS_AUDIT EXPIRED & LOCKED
ORDDATA EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
ANONYMOUS EXPIRED & LOCKED
XDB EXPIRED & LOCKED
ORDPLUGINS EXPIRED & LOCKED
OWBSYS EXPIRED & LOCKED
SI_INFORMTN_SCHEMA EXPIRED & LOCKED
OLAPSYS EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
—————————— ——————————–
SCOTT EXPIRED & LOCKED
ORACLE_OCM EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
BI EXPIRED & LOCKED
PM EXPIRED & LOCKED
MDDATA EXPIRED & LOCKED
IX EXPIRED & LOCKED
SH EXPIRED & LOCKED
DIP EXPIRED & LOCKED
OE EXPIRED & LOCKED
APEX_PUBLIC_USER EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
—————————— ——————————–
HR EXPIRED & LOCKED
SPATIAL_CSW_ADMIN_USR EXPIRED & LOCKED
SPATIAL_WFS_ADMIN_USR EXPIRED & LOCKED
36 rows selected.
(2)解锁系统用户scott
SQL> alter user scott identified by tiger account unlock;
User altered.
SQL> select username,account_status from dba_users;
USERNAME ACCOUNT_STATUS
—————————— ——————————–
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
SCOTT OPEN
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
EXFSYS EXPIRED & LOCKED
……
(3)创建自定义用户
格式:
create user 用户名 identified by 密码 [default tablespace 缺省表空间] [temporary tablespace 临时表空间] [quota {integer [K|M] | unlimited} on 表空间] [password expire]
说明:
quota:用户对表空间的配额,默认为unlimited(不限制)
password expire:用户第一次使用密码失效,需重新设置
示例:
SQL> create tablespace benet datafile ‘/u01/oracle/oradata/test/benet01.dbf’ size 10m autoextend on;
SQL> create user tom identified by 123 default tablespace benet;
SQL> drop user 用户名 cascade; //删除用户
2、权限管理
权限指的是执行待定命令或访问数据库对象的权利。权限有两种类型,系统权限和对象权限。
系统权限:允许用户执行某些数据库操作,如创建表就是一个系统权限
对象权限:允许用户会数据库对象(如表、视图、序列等)执行特定操作
(1)角色管理
角色是一组相关权限的组合,可以将权限授权予角色,再把角色授权与用户,以简化权限管理。
常见的角色:
·connect:需要连接上数据库的用户,特别是那些不需要创建表的用户通常赋予此角色
·resource:更为可靠和正式的数据库用户可以授权此角色,可以创建表、触发器、过程等
·dba:数据库管理员角色,拥有管理数据库的最高权限。不要轻易授予给非管理员
(2)权限管理
格式:
grant 权限 to 用户;
grant 权限 on 用户.表 to 用户;
revoke 权限 from 用户;
revoke 权限on 用户.表 from 用户;
示例:
SQL> grant connect,resource to tom;
//授权给tom用户connect和resource角色权限
SQL> revoke connect,resource from tom;
//撤销tom用户的connect和resource权限
SQL> grant all on scott.dept to tom;
//给tom用户授权scott用户的dept表所有权限
SQL> revoke all on scott.dept from tom;
//撤销tom用户对于scott用户的dept表所有权限
二、配置和连接数据库1、Oracle网络配置
Oracle安装完成后,服务器和客户端都需要进行网络配置才能实现网络连接。客户端与服务器端连接过程如下:
(1)服务器端有一个监听器监听客户端发出的连接请求
(2)用户在客户端输入用户名、口令及网络服务名发送请求
(4)客户端根据连接描述符定位监听器,并通过网络将连接信息传递给监听器
(5)监听器查询监听配置文件listener.ora,找出所要连接的数据库服务器
(6)客户端和服务器开始通信
[oracle@oracle1 ~]$ cat /u01/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/dbhome_1//network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER = //监听器名称
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS= (PROTOCOL = TCP) //通信协议
(HOST = oracle1.amber.com) //服务器主机名或IP
(PORT = 1521)) //监听端口号
)
)
ADR_BASE_LISTENER = /u01/oracle
2、启动/关闭监听进程
lsnrctl {start|stop|status|reload|set|show|help|version|change_password}
set:设置响应参数
change_password:改变口令
3、客户端配置
此处我们在win7上安装win64_11gR2_client.zip软件包,加压到C:\,解压后生产client目录,进入后选择setup,开始安装
目前还没有生成tnsnames.ora
若测试失败检查服务器端和客户端防火墙是否拦截
[root@oracle1 ~]# /etc/init.d/iptables stop
[root@oracle1 ~]# setenforce 0
选择【文件】–【保存网络配置】,生成tnsnames.ora文件
用记事本打开可以看到:
进入DOS界面
4、监听和启动数据示例的顺序
√ 先启动监听,后启动实例
× 先启动实例,后启动监听。PMON还没来得及向监听注册示例服务
若先启动了实例,后启动的侦听,可以通过将实例的服务描述添加到listener.ora中,这样只要启动监听,对应的服务在监听中就注册了。
三、管理控制文件
控制文件是数据库创建的时候自动生成的二进制文件,其中记录了数据库的状态信息。其他任何用户都无法修改控制文件,只有数据库运行过程中,数据库实例可以修改控制文件中的信息。
1、控制文件相关信息
(1)获得控制文件的信息
方法一:
SQL> select name from v$controlfile;
NAME
——————————————————————————–
/u01/oracle/oradata/test/control01.ctl
/u01/oracle/flash_recovery_area/test/control02.ctl
方法二:
SQL> select name,value from v$parameter where name=’control_files’;
NAME
——————————————————————————–
VALUE
——————————————————————————–
control_files
/u01/oracle/oradata/test/control01.ctl, /u01/oracle/flash_recovery_area/test/con
trol02.ctl
2、控制文件内的内容
创建数据库的信息、重做日志信息、数据文件及归档日志文件记录等信息。
查看控制文件内容
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
3、存储多重控制文件
也称为控制文件的多路复用。
特点:要求控制文件不能只有一个,要存放在不同的磁盘上。
示例:
SQL> alter system set control_files=’/u01/oracle/oradata/test/control01.ctl’,’/u01/oracle/oradata/test/control03.ctl’,’/u01/oracle/oradata/test/control04.ctl’,’/u01/oracle/flash_recovery_area/test/control02.ctl’ scope=spfile;
//控制文件多路复用,指定控制文件存放位置
SQL> select name from v$controlfile;
NAME
——————————————————————————–
/u01/oracle/oradata/test/control01.ctl
/u01/oracle/flash_recovery_area/test/control02.ctl
此时v$controlfile并未增加添加内容,但是spfile已经增加
SQL> !strings $ORACLE_HOME/dbs/spfiletest.ora |grep control_files
*.control_files=’/u01/oracle/oradata/test/control01.ctl’,’/u01/oracle/oradata
SQL> !strings $ORACLE_HOME/dbs/spfiletest.ora
test.__db_cache_size=654311424
test.__java_pool_size=16777216
test.__large_pool_size=16777216
test.__oracle_base=’/u01/oracle’#ORACLE_BASE set from environment
test.__pga_aggregate_target=1644167168
test.__sga_target=989855744
test.__shared_io_pool_size=0
test.__shared_pool_size=251658240
test.__streams_pool_size=0
*.audit_file_dest=’/u01/oracle/admin/test/adump’
*.audit_trail=’db’
*.compatible=’11.2.0.0.0′
*.control_files=’/u01/oracle/oradata/test/control01.ctl’,’/u01/oracle/oradata
/test/control03.ctl’,’/u01/oracle/oradata/test/control04.ctl’,’/u01/oracle/flash_recovery_area/test/control02.ctl’
*.db_block_size=8192
*.db_domain=”
*.db_keep_cache_size=33554432
*.db_name=’test’
*.db_recovery_file_dest=’/u01/oracle/flash_recovery_area’
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest=’/u01/oracle’
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)’
*.log_archive_dest_1=’location=/u01/arch/’
*.memory_max_target=2621440000
*.memory_target=2634022912
*.open_cur
sors=300
*.processes=150
*.remote_login_passwordfile=’EXCLUSIVE’
*.undo_tablespace=’UNDOTBS1′
重启实例生效
SQL> shutdown immediate
SQL> !ls -lh $ORACLE_BASE/oradata/test/
总用量 1.6G
-rw-r—–. 1 oracle oinstall 11M 7月 6 10:33 benet01.dbf
-rw-r—–. 1 oracle oinstall 9.3M 7月 6 10:33 control01.ctl
-rw-r—–. 1 oracle oinstall 101M 7月 6 10:33 example01.dbf
-rw-r—–. 1 oracle oinstall 51M 7月 6 07:00 redo01.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 10:33 redo02.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 05:59 redo03.log
-rw-r—–. 1 oracle oinstall 531M 7月 6 10:33 sysaux01.dbf
-rw-r—–. 1 oracle oinstall 681M 7月 6 10:33 system01.dbf
-rw-r—–. 1 oracle oinstall 30M 7月 6 06:01 temp01.dbf
-rw-r—–. 1 oracle oinstall 101M 7月 6 10:33 undotbs01.dbf
-rw-r—–. 1 oracle oinstall 5.1M 7月 6 10:33 users01.dbf
SQL> !cp $ORACLE_BASE/oradata/test/control0{1,3}.ctl
SQL> !cp $ORACLE_BASE/oradata/test/control0{1,4}.ctl
SQL> !ls -lh $ORACLE_BASE/oradata/test/
总用量 1.6G
-rw-r—–. 1 oracle oinstall 11M 7月 6 10:33 benet01.dbf
-rw-r—–. 1 oracle oinstall 9.3M 7月 6 10:33 control01.ctl
-rw-r—–. 1 oracle oinstall 9.3M 7月 6 10:35 control03.ctl
-rw-r—–. 1 oracle oinstall 9.3M 7月 6 10:36 control04.ctl
-rw-r—–. 1 oracle oinstall 101M 7月 6 10:33 example01.dbf
-rw-r—–. 1 oracle oinstall 51M 7月 6 07:00 redo01.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 10:33 redo02.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 05:59 redo03.log
-rw-r—–. 1 oracle oinstall 531M 7月 6 10:33 sysaux01.dbf
-rw-r—–. 1 oracle oinstall 681M 7月 6 10:33 system01.dbf
-rw-r—–. 1 oracle oinstall 30M 7月 6 06:01 temp01.dbf
-rw-r—–. 1 oracle oinstall 101M 7月 6 10:33 undotbs01.dbf
-rw-r—–. 1 oracle oinstall 5.1M 7月 6 10:33 users01.dbf
SQL> startup
SQL> select name from v$controlfile;
NAME
——————————————————————————–
/u01/oracle/oradata/test/control01.ctl
/u01/oracle/oradata/test/control03.ctl
/u01/oracle/oradata/test/control04.ctl
/u01/oracle/flash_recovery_area/test/control02.ctl
4、备份和恢复控制文件
在数据文件或日志文件位置信息发生变化时(如新增数据文件到表空间等),对控制文件进行备份。(不建议使用此方法备份)
备份:
SQL> show parameter sql_trace;
NAME TYPE VALUE
———————————— ———– ——————————
sql_trace boolean FALSE
SQL> alter session set sql_trace=true;
SQL> alter database backup controlfile to trace;
SQL> show parameter sql_trace;
NAME TYPE VALUE
———————————— ———– ——————————
sql_trace boolean TRUE
SQL> show parameter user_dump_dest; //查看追踪文件存放位置
NAME TYPE VALUE
———————————— ———– ——————————
user_dump_dest string /u01/oracle/diag/rdbms/test/test/trace
SQL> !ls -lh /u01/oracle/diag/rdbms/test/test/trace
恢复:
在nomount方式下启动数据库,show parameter user_dump_dest;
利用最终文件重建控制文件
四、管理重做日志文件
重做日志也成为联机重做日志,记录对数据库进行的更改,日志写入进程(LGWR)写入重做日志文件的时间为以下几种情况:
·事务提交时
·日志缓冲区三分之一已满时
·每隔3秒
·在DBWn写入之前
应多路复用以避免文件丢失
1、读取重做日志文件信息
SQL> select group#,sequence#,bytes,members,archived,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS ARC STATUS
———- ———- ———- ———- — —————-
1 10 52428800 1 YES INACTIVE
2 11 52428800 1 NO CURRENT
3 9 52428800 1 YES INACTIVE
当前使用的是group2,还没有归档,其他两个已归档
2、多路复用重做日志
为了提高磁盘效率和防止重做日志文件的损坏,Oracle引入了一种重做日志结构。Oracle规定每个数据库只少有2个日志文件组,每组只少包含1个或者多个日志成员。
上图包含3个重做日志文件组,每组包含2个重做日志成员,存放在不同磁盘上,当第一个日志组写满后,就会停止写入,而转向第2个日志组,第2个写满后转向第3个日志组,第3个写满后转向第1个日志组写入。Oracle以这种循环方式使用重做日志组。
(1)创建重做日志文件组
格式:
alter database [数据库名] add logfile [group 组号] 文件名 [size K|M] [reuse];
示例:
SQL> select group#,members,status,bytes/1024/1024 MB from v$log;
GROUP# MEMBERSSTATUS MB
———- ———- —————- ———-
1 1 INACTIVE 50
2 1 CURRENT 50
3 1 INACTIVE 50
SQL> alter database add logfile group 4 ‘$ORACLE_BASE/oradata/test/redo04.log’ size 10m;
SQL> select group#,members,status,bytes/1024/1024 MB from v$log;
GROUP# MEMBERSSTATUS MB
———- ———- —————- ———-
1 1 INACTIVE 50
2 1 CURRENT 50
3 1 INACTIVE 50
4 1 UNUSED 10
(2)删除重做日志文件组
格式:
alter database drop logfile [group 组号];
删除文件组的限制条件:
·当前日志组不可删,若要删除先alter system switch logfile;进行日志组的切换
·活动的日志组不可删
·没有归档的日志组不可删除(前提是已运行在归档模式下)
示例:
SQL> alter database drop logfile group 4;
Database altered.
SQL> select group#,members,status,bytes/1024/1024 MB from v$log;
GROUP# MEMBERSSTATUS MB
———- ———- —————- ———-
1 1 INACTIVE 50
2 1 CURRENT 50
3 1 INACTIVE 50
(3)添加/删除重做日志文件
SQL> alter database add logfile member ‘/u01/oracle/oradata/test/redo01a.log’ to group 1,’/u01/oracle/oradata/test/redo02a.log’ to group 2;
//为group 1添加redo01a.log新成员,为group 2 添加redo02a.log新成员
SQL> select group#,members,status,bytes/1024/1024 MB from v$log;
GROUP# MEMBERSSTATUS MB
———- ———- —————- ———-
1 2 INACTIVE 50
2 2 CURRENT 50
3 1 INACTIVE 50
SQL> !ls -lh $ORACLE_BASE/oradata/test/*.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 11:19 /u01/oracle/oradata/test/redo01a.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 10:56 /u01/oracle/oradata/test/redo01.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 11:19 /u01/oracle/oradata/test/redo02a.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 11:20 /u01/oracle/oradata/test/redo02.log
-rw-r—–. 1 oracle oinstall 51M 7月 6 10:56 /u01/oracle/oradata/test/redo03.log
-rw-r—–. 1 oracle oinstall 11M 7月 6 11:12 /u01/oracle/oradata/test/redo04.log
SQL> alter database drop logfile member ‘/u01/oracle/oradata/test/redo01a.log’;
//删除重做日志redo01a.log
(4)切换日志
强制切换日志:
SQL> alter system switch logfile;
五、管理归档日志文件1、归档模式概述
(1)归档进程
是可选的后台进程,为数据库设置archivelog(归档)模式会自动回档联机重做日志文件。保留对数据库所有更改的记录。
(2)归档日志文件
数据库在允许覆盖重做日志信息之前生成联机重做日志组的副本,这些副本又称为“归档日志。”
2、配置数据归档日志
(1)查询是否开启日志回档:archive log list;
(2)关闭数据库实例:shutdown immediate;
(3)启动到mount阶段:startup mount;
(4)开启回档日志:alter database archivelog;
(5)转到open模式:alter database open;
(6)再次查询:archive log list;
示例:
SQL> archive log list;
//查看当前是否开启归档日志
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 7
Current log sequence 9
SQL> !mkdir /u01/arch //创建存放归档日志的目录
SQL> alter system set log_archive_dest_1=’location=/u01/arch/’;
//更改归档日志状态为开启,并指定存放位置为/u01/arch/目录。重启实例生效
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2213896 bytes
Variable Size 956303352 bytes
Database Buffers 687865856 bytes
Redo Buffers 7135232 bytes
Database mounted.
SQL> alter database archivelog;
//开启归档日志(启动归档日志必须将实例启动为mount状态)
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/arch/
Oldest online log sequence 7
Next log sequence to archive 9
Current log sequence 9
3、获取归档日志信息
(1)查看回档日志存放路径
SQL> col destination format a20
SQL> col dest_name format a20
SQL> select dest_id,dest_name,status,destination from v$archive_dest where status=’VALID’;
DEST_IDDEST_NAME STATUS DESTINATION
———- ——————– ——— ——————–
1 LOG_ARCHIVE_DEST_1 VALID /u01/arch/
(2)获取已归档的日志文件信息
SQL> select name from v$archived_log;
NAME
—————————————-
/u01/arch/1_9_916277239.dbf
/u01/arch/1_10_916277239.dbf
/u01/arch/1_11_916277239.dbf
六、数据字典1、数据字典的定义
数据字典是Oracle存储关键信息的表和视图的集合,是数据库的说明,包含数据库中所有对象的名称和属性。
2、数据字典的分类
(1)数据字典表
属于sys用户,由数据库服务器维护,只能查看。普通用户不可以直接访问。表中的数是Oracle系统存放的系统数据,这些表的名称都用“$”结尾
(2)数据字典视图
为了方便用户对数据字典表的查询,所以建立了数据字典视图,分为:静态数据字典(静态性能视图)、动态数据字典(动态性能视图)
dictionary数据字典视图包含数据字典中一切对象的名称和说明
SQL> col comments for a40;
SQL> select * from dictionary;
(3)静态数据字典视图
静态的含义是这些视图在数据库运行期间不会发生变化
视图分类
版本
内容
DBA_
DBA
一切对象
ALL_
每个用户
用户有权查看的一切对象
USER_
每个用户
用户拥有的一切对象
示例:
SQL> select table_name,tablespace_name from user_tables;
//查询当前用户所拥有的表和所在表空间
SQL> select index_name from user_indexes;
//查询当前用户有哪些索引
SQL> select view_name from user_views;
//查看当前用户有哪些视图
SQL> select * from user_users;
//主要描述当前用户的信息
SQL> select object_name from user_objects;
//查询当前用户拥有的数据库对象
SQL> select owner,object_name,object_type from all_objects;
//查询当前用户能够访问的所有数据库对象
(4)动态数据字典视图
用于记录当前数据库的活动,会不断的进行更新,可以反应出当前实例和数据库的运行状态。只存在于数据库运行期间,实际信息都会取自内存和控制文件。DBA可以使用动态视图来监视和维护数据库。以v$或者gv$开头。
示例:
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
//查看控制文件内容
SQL> select group#,members,archived,status from v$log;
//查看日志组状态信息
SQL> select name,created,log_mode from v$database;
//查看当前数据库的信息
NAME CREATED LOG_MODE
—————————————- ———— ————
TEST 04-JUL-16 ARCHIVELOG