Oracle基本知识(开发人员必须了解的)
******************************************
第一章 安装数据库
******************************************
1.登录root账号
******************************************
su - root
service iptables stop
vim /etc/sysconfig/selinux
把SELINUX=enforcing 改为 SELINUX=disabled
******************************************
2.检查内存与交换分区的大小,推荐交换分区是内存的2倍
******************************************
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
******************************************
如果发现没有交换分区,执行如下命令,手工创建交换分区,执行如下命令
******************************************
dd if=/dev/zero of=/home/swap bs=1024 count=5120000
mkswap /home/swap
echo "/home/swap swap swap defaults 0 0" >> /etc/fstab
******************************************
3.修改内核参数
******************************************
vim /etc/sysctl.conf
******************************************
在文件底部添加如下内容
******************************************
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
******************************************
4.执行如下命令使其修改内核参数生效
******************************************
sysctl -p
******************************************
5.创建Oracle用户
******************************************
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
******************************************
6.修改用户限制
******************************************
vim /etc/security/limits.conf
******************************************
在文件末尾添加如下内容
******************************************
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
******************************************
7.修改用户验证选项
******************************************
vim /etc/pam.d/login
******************************************
在文件末尾添加
******************************************
session required /lib/security/pam_limits.so
session required pam_limits.so
******************************************
8.修改用户配置文件
******************************************
vim /etc/profile
******************************************
在文件末尾添加如下内容
******************************************
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
******************************************
9.创建安装目录配置
******************************************
mkdir -p /u01/oraInventory
chown -R oracle:oinstall /u01/
chmod -R 775 /u01/
******************************************
10.登录oracle账号,设置环境变量
******************************************
su –oracle
vim .bash_profile
******************************************
在文件末尾添加如下内容
******************************************
umask 022
export ORACLE_BASE=/u01
export ORACLE_HOME=$ORACLE_BASE/oracle
export ORACLE_SID=oris
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
******************************************
11.检查oracle安装前提
******************************************
su - root
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc- gcc-c++ libaio-devel libaio libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel pdksh
******************************************
如果发现缺少包,下载安装包,安装命令如下
******************************************
rpm -ivh ***.rpm
******************************************
******************************************
第二章 维护数据库
******************************************
1.创建数据库
******************************************
dbca
******************************************
2.配置数据库监听
******************************************
netca
******************************************
3.查看监听(在oracle账号)
******************************************
lsnrctl - status
emca -config dbcontrol db -repos recreate 配置OEM
emctl start dbconsole
******************************************
4.启动数据库
******************************************
sqlplus /nolog 本地模式
sqlplus bi/vbih@oris as sysdba 远程模式
conn / as sysdba
show user
startup | shutdown immediate
说明:数据启动模式存在两种,一种是热启动,另一种是冷启动
正常模式是先启动监听,让后启动数据库
******************************************
5.查看数据库进程
******************************************
ps -ef | grep oracle
******************************************
6.创建表空间
******************************************
create temporary tablespace YNZLBI_TEMP
tempfile '/u01/oradata/oris/YNZLBI_TEMP.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
create tablespace YNZLBI
logging
datafile '/u01/oradata/oris/YNZLBI.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
注意:临时表空间主要用于排序等,其次表空间里面的文件最好设置最大值,否则
文件会一直增大(最大文件大小与具体的文件系统有关)
******************************************
7.创建用户并指定表空间
******************************************
create user bi identified by vbih
default tablespace YNZLBI
temporary tablespace YNZLBI_TEMP;
******************************************
8.给用户授予权限
******************************************
grant connect,resource,dba to bi;
******************************************
9.数据库备份恢复(不压缩)
******************************************
imp bi/vbih fromuser=bi touser=bi ignore=y file='YNZLBI.dmp'
exp system/manager file=seapark log=seapark owner=seapark
******************************************
10.数据库备份恢复(压缩)
******************************************
create directory dpdata as '/home/oracle/bak';
select * from dba_directories;
grant read,write on directory dpdata to vbi;
expdp vbi/vbih@orcl schemas=vbi dumpfile=bi.dmp compression=all DIRECTORY=dpdata;
impdp vbi/vbih DIRECTORY= dpdata DUMPFILE=expdp.dmp SCHEMAS=vbi;
说明:这种模式好处就是文件oracle会压缩,不用我们之后手动压缩
******************************************
11.删除用户以及表空间
******************************************
drop user BI cascade;
drop tablespace YNZLBI_TEMP INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE YNZLBI INCLUDING CONTENTS AND DATAFILES;
******************************************
12.给表空间添加数据文件
******************************************
alter tablespace YNZLBI
add datafile '/home/oracle/bi/oradata/YNZLBI2.dbf'
size 50M
AUTOEXTEND ON
NEXT 50M MAXSIZE 20480M;
注意:表空间的文件大小可以扩大或者可以缩小(主要要不能损坏数据的前提下)
******************************************
13.收缩表空间
******************************************
alter tablespace YNZLBI coalesce
******************************************
14.查看表空间的使用情况
******************************************
select a.file_id,--文件编号
a.file_name,--文件名称
a.filesize,--数据文件占用磁盘空间大小
b.freesize,--文件中被标记为free的空间大小
(a.filesize - b.freesize) usedsize,--使用的空间大小。
c.hwmsize,--已经分配出去的空间大小
c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,--可以回收的空间大小
a.filesize - c.hwmsize canshrinksize--没有分配出去的空间大小
from (select file_id, file_name, round(bytes / 1024 / 1024) filesize
from dba_data_files) a,
(select file_id, round(sum(dfs.bytes) / 1024 / 1024) freesize
from dba_free_space dfs
group by file_id) b,
(select file_id, round(max(block_id) * 8 / 1024) HWMsize
from dba_extents
group by file_id) c
where a.file_id = b.file_id
and a.file_id = c.file_id
order by unsedsize_belowhwm desc
******************************************
15.释放表空间的文件
******************************************
select a.file#,
a.name,
a.bytes / 1024 / 1024 CurrentMB,
ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,
(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,
'alter database datafile ''' || a.name || ''' resize ' ||
ceil(HWM * a.block_size / 1024 / 1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id, max(block_id + blocks - 1) HWM
from dba_extents
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM * block_size) > 0
order by 5
******************************************
16.添加控制文件
******************************************
alter system set control_files = '/u01/oracle/oradata/oris/control01.ctl','/u01/oracle/oradata/yoon/control03.ctl' scope=spfile;
shutdown immediate;
cp control01.ctl control03.ctl
statup
select name from v$controlfile;
说明:控制文件主要是保证数据库启动时初始化相关的信息
******************************************
16.添加日志文件
******************************************
select group#,member from V$logfile;
alter database add logfile group 4
('/opt/oracle11g/oradata/oracl/redo401.log','/opt/oracle11g/oradata/oracl/redo402.log')
size 20M;
select group#,member from V$logfile;
说明:日志文件最好在一个组下设置多个日志文件,分别存储在不同的存储介质,防止数据丢失
******************************************
17.查询oracle日志模式
******************************************
select name,log_mode from v$database;
alter system set log_archive_dest_1='location=/oracle/oracle10g/log/archive_log';
shutdown immediate
startup mount;
alter database archivelog;
alter database open;
alter system set log_archive_max_processes = 5;
alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile;
说明:设置数据库处于归档模式,可以保证数据库按照时间点恢复,备份也可以增量备份。
******************************************
******************************************
第三章 oracle内置视图
******************************************
1.了解oracle的一些内置视图
******************************************
select * from v$**
select * from dba_**
show paramter *
说明:显示oracle的一些参数以及内置的动态性能视图
******************************************
2.数据启动文件
******************************************
pfile:文本可以编辑
spile:只能使用alert命令修改
create spfile from pfile
说明:里面就是启动oracle的一些具体的参数
******************************************
3.查看数据库的归档模式
******************************************
SELECT created, log_mode, log_mode FROM v$database;
******************************************
4.查看数据库的版本
******************************************
SELECT version
FROM product_component_version
WHERE substr(product, 1, 6) = 'Oracle';
******************************************
5.查看数据库库对象
******************************************
SELECT owner, object_type, status, COUNT(*) count#
FROM all_objects
GROUP BY owner, object_type, status;
******************************************
6.oracle游标
******************************************
SQL执行过程时,在数据库中分配一个session私有区域,执行SQL的过程中,里面存储一些数据,
如果访问这些数据,就需要游标。所以DML或者DDL都在内存,存在一个内存标示,它就是游标。
游标有两种:显示游标、隐式游标
隐式游标:SQL%ROWCOUNT、SQL%FOUND、SQL%NOTFOUND、SQL%ISOPEN,已经内置好的指标
显示游标:需要自己声明
******************************************
隐式游标的属性 返回值类型 意 义
SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功
SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
******************************************
第四章 oracle基本概念
******************************************
1.什么是数据库
******************************************
oracle是一个软件,它的数据存储在文件系统里面,存储的形式的文件的形式,但是这个文件
格式我们不能直接看,只能通过oracle软件的后天进程来读取给我们看。所以oracle称为数据库软件。
2.什么实例
******************************************
oracle软件启动之后,后台会运行一些列服务,我们把这些实例称之为实例。所以数据库应该是物理文件(存储文件的介质
,比如数据文件、日志文件、参数文件、控制文件等)和实例。
3.什么事SID
******************************************
oracle启动之后,一个物理存储介质对应一个实例(如果对应多个实例,就是RAC,多实例对应一个数据库物理文件),而SID是数据库
实例在内存中的一个标示,类似身份证。
4.oracle主要进程:数据读写进程、日志读写进程、检查点进程、检测进程,这些都是oracle实例的后台进程,此外还
有就是监听进程、服务进程(对应用户)。
注意:一个会话对应一个服务进程,后台进程与会话无关,仅仅与oracle程序有关,是专业操作数据库的程序。
5.oracle启动状态
******************************************
1.nomount 启动实例
2.mount 读取控制文件,初始化相关参数
3.open 读取数据文件、日志文件,数据库正式启动成功。
而数据库关闭则顺序刚好相反。
6.介质恢复与实例恢复
******************************************
介质恢复就是把备份文件恢复
实例恢复是oracle自动进行的,为什么那?因为oracle存在在线的日志文件,每次oracle数据库
启动都会检查数据文件与在线的日志文件受否一直,不一致就运行后台服务保证数据库文件与在线日志文件
以及控制文件一直,而看是否一致的条件就是SCN。
注意:实例恢复与归档日志文件无关。
数据库启动---后台进程启动--实例启动---自动运行实例恢复---打开数据库。
所以实例恢复是自动运行的与使用数据库的人无关
******************************************
7.增量备份与全量备份
******************************************
全量备份:就是每次全部备份,备份到数据库当前时间,有点完整备份
增量备份:基于时间段做备份,有点备份的文件小速度快。
一般情况下,各一段时间做一个全量备份,之后做增量备份.....
恢复是:先做全量恢复,之后做增量恢复。
******************************************
8.系统表空间
******************************************
记录oracle的元数据信息,比如create创建对象等
******************************************
9.oracle如何分配存储
******************************************
oracle里面的存储的最小单位是block的逻辑结构,而磁盘分配的都是在段的基础上进行
分配,一个段是逻辑上连续的block,通常是4M或者8M,一般情况下,表存储在一个段中,而
索引存储在另一个段中,BLOB以及CLOB存在一个段中,一个段仅能在一个物理数据文件里面。
oracle的操作都是基于block操作。一个block里面可以存储多行,里面有存储事务信息的事务槽
SLOT
******************************************
10.什么是HWM高水位线
******************************************
oracle执行插入数据是需要申请数据块,数据块从磁盘申请之后,HWM就越大,但是如果删除数据,oracle占用的
block就会减少,但是HWM不会减少,因为block已经分配给了oracle,文件系统无法回收,oracle以后插入少量数据
时候可以使用这些快而不用到磁盘申请block。一般truncate可以降低水位线HWM。所以HWM与oracle插入数据放到那些
快有关系。这就是oracle的磁盘申请磁盘空间的方法。
从HWM下查找block插入数据,如果没有空闲block,从磁盘申请。
一个segmemnt下面存在分配的freelist
******************************************
10.什么是undo、redo
******************************************
redo:就是oracle的事务日志,数据库先写数据到日志文件(连续写),功能块,之后写到数据文件(非连续写),主要就是commit
undo:rollback的操作基于undo,也就是说oracle修改数据以后,原先的数据保存在undo段里面
******************************************