Oracle 数据库学习
1. Oracle数据库
1.1 简介
- Oracle是用户创建模式空间,区别于MySQL
- 用户用于连接数据库,并管理用户下的对象(tables,views,indexes等)
- Oracle可以通过角色授权
- 进入Oracle环境:
su - oracle - 进入SQL环境:
sqlplus /as sysdba
1.2权限分类:
- DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
- RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
- CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
例:select,update,alter,index,delete都是权限
2. 用户管理
2.1用户操作
- 创建用户:
create user 用户名 identified by 密码 - 查询用户:
select username,default_tablespace,temporary_tablespace from dba_users - 视图:dba_xxxs,user_xxxs数据字典视图 v$xxx 动态性能视图
select tablespace_name from dba_tablespaces - 查用户:
查看用户会话信息: select username,sid,serial#,machine from v$session ’ 删除用户会话信息: alter system kill session ‘sid,serial#’ - 创建表空间:
create tablespace 名字 - 授权用户:
grant ... to 名字 - 修改用户密码:
alter user 名字 identified by 密码 - 锁定用户:
alter user 用户名 account lock - 解锁用户:
alter user 用户名 account unlock - 删除用户
drop user 用户名 - 取消用户授权
revoke RESOURCE from 用户名
2.2表操作
- 创建表:
create table 表名(id member(7),name varchar(11)) - 插入数据:
insert into TEST(id,name) values (33,'Jihome') - 查看角色权限:
select * from dba_sys_privs where grantee in ('RESOURCE','CONNECT') order by 1 select * from dba_role_privs a where a.grantee ='用户名' - 查看对象权限:
select * from dba_tab_privs a where a.grantee = '用户名' - 查询系统权限:
select * from dba_sys_privs a where a.grantee = '用户名'
2.3关闭数据库
- 立即关闭数据库(最快)
shutdown immediate - 正常关闭数据库
shutdown normal - 直接关闭数据库(一般不操作)
shutdown abort
2.4其他操作
- 设置输出格式:
set linesize 200 - 重复上一行语句:
sql > / - 指定列显示长度
col member for a30
3. Oracle 重要文件
3.1参数文件
- spfile:动态的二进制参数文件,在线参数文件
spfile<sid>.ora - pfile:静态的文本类型参数文件,离线的
init<sid>.ora 注:这两个文件可以相互转换 - 查看:
show parameters spfile 注:如果有值,说明基于spfile启动的,如果无值,说明基于pfile启动的。 - 互相转换:
create pfile from spfile create spfile from pfile - 一般修改,维护,主要是操作pfile
SQL>shutdown immediate
SQL>create spfile='/uo1/app.../dbs/spfileorcd.ora’ from pfile = '/tmp/initorcd.ora'
SQL>startup
注:sfile参数文件里,包含了控制文件路径,归档文件路径,进程数量等重要参数
- 数据库启动的三个阶段
nomount --> mount -->open 注:读完参数文件进入nomount状态;读完控制文件进入mount状态 - 手动制定pfile启动数据库
shutdown immedate
startup pfile='/tmp/aa.ora'
注:如果参数文件丢失,可以手动创建参数文件,指明控制文件路径,启动数据库
- 修改参数文件的三种模式
alter system set process = 300 scope spfile 注:scope=both(默认,立即启动,全部修改);spfile(下次启动修改);memory(立即生效,但下次启动失效)
3.2控制文件
- 主要内容
- 数据文件和日志文件列表
- 表空间信息
- 当前重做日志文件序列号(SCN)
- 归档日志信息
- 数据库名称和SID标识
- 检查点信息
- 备份数据文件信息
- 回滚段的起始和结束
- 查看控制文件
SQL> select name from v$controlfile
SQL> show parameter controlfiles
注:控制文件一般有多个,每个都是一样的
-
控制文件备份 cp control01.ctl /u01/controlbak/control02.ctl 注:先shutdown,然后拷贝文件至其他目录即可。控制文件很重要,一定要做好备份。控制文件存放在多个地方,放入启动参数文件中更安全,不怕会丢失启动不了数据库。 -
查看数据文件
SQL> desc dba_data_files
SQL> select file_name from dba_data_files
- 查看日志文件
SQL> desc v$logfile
SQL> select group#,member from v$logfile
3.3 Redo日志管理
- 查看日志组信息
select * from v$log 注:redo是在线日志,不能直接备份,需刷写到ARC中,才可备份,用于恢复 ARC是离线日志,可以理解为redo的副本 - 添加日志组
alter database add logfile group4('/oradata/orcl/redo04a.log','/oradata/orcl/redo04b.log) size 200M - 添加日志成员
alter database add logfile member '/oradata/redo04c.log' to group4 注:为什么添加日志?实际工作中,随着业务量增大,操作数据库变得频繁,日志文件读写切换太快,导致出现检查点等待问题,一般通过增加或增大重做日志文件,或者直接一起增加日志文件组来解决性能问题。 - 实例:全库备份脚本
vim fullbak.sh
export ORACLE_BASE = /u01/app/oracle/
export ORACLE_HOME = $ ORACLE_BASE/product/11.3/db_1
export ORACLE_SID = testdb
export NLS_LANG = AMERICAN_AMERICA.ZHS16GBK
export PATH = $ORACLE_HOME/bin:$PATH
rman target /log/u01/backup/rman_full.log append<<EOF
run
{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database filesperset 4 format '/u01/backup/full_%d_%T_%s_%p';
sql' alter system archive log current;
sql' alter system archive log current;
sql' alter system archive log current;
backup archivelog all format 'u01/backup/arch_%d_%T_%s_%p' delete input;
backup current controlfile format 'u01/backup/arch_%d_%T_%s_%p' delete input;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt exired archivelog all;
}
EOF
|