Oracle数据库学习笔记

时间:2021-03-08 08:37:34

Oracle学习笔记

一、Oracle数据库结构

实例由内存和进程构成;

数据库是文件,由存储结构构成;

Oracle内存结构:

Oracle不直接操作磁盘,而是通过映射页的方式操作缓冲区高速缓存

Oracle进程:

具体的进程:

通过Ckeckpoint将缓存中的数据向磁盘进行刷新,也就是Oracle操作磁盘的方式

缓存:

物理数据库结构:

表空间:

段是存放同一类数据的集合,比如索引段、数据段、还原段等

区是连续的块的集合,保证其读写

数据块映射一到多个磁盘块

这样做的原因都是性能问题。减少IO操作,一次性多读几个块,而块也不能太大(一般32k),原因是块大了记录就多了,对同一个数据块的操作也就多了,容易引起块冲突增加,等待一个用户执行完之后再响应另外一个用户的请求,这就使得速度会降下来。

检查点由MTTR来控制的,取决于备份的快慢

归档模式必须开启,否则数据无法恢复

启动和停止数据库:

启动数据库、控制台和isqlplus的步骤

1、  lsnrctl start 启动数据库监听程序(PGA即一组内存缓存区,程序全局区存放服务器进程数据和控制信息,如会话信息、sort信息等,被Oracle创建);

2、  sqlplus sys as sysdba 输入密码后,执行startup启动Oracle数据库实例(此时,SGA即系统全局区,是一组共享内存结构, 其中包含一个 Oracle 数据库的数据和控制信息。启动 Oracle 数据库实例时, 将在内存中分配 SGA。)

3、  emctl start dbconsole 启动控制台程序 http://主机ip地址:1158/em

4、  isqlplusctl start 启动isqlplusctl start   http://主机ip地址:5560/isqlplus

 

Spfileorcl.ora

 

 

 

 

 

一、多久回家

二、试试

二、SQL学习

Distinct表示唯一的,过滤掉相同的列

 

三、遇到问题及解决办法

1、 http://hostname:1158/em无法打开问题

问题原因:1158端口没有

解决办法:使用emctl start dbconsole开启管理台em服务进程,之后再打开Oracle监听服务,即lsnrctl start即可

2、  Connected to: Oracle Database 10g Enterprise Edition Release10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Miningoptions问题和没有emp表和视图的问题

3、ORA-19815问题,通过metalink查询,是闪回区空间耗尽,解决的方法我使用增大闪回区的存储空间,来解决此问题
现在先查看一下v$recovery_file_dest试图select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable, number_of_files as "number" from v$flash_recovery_area_usage;   
 
FILE_TYPE      USED RECLAIMABLE number  
------------ ---------- ----------- ----------  
CONTROLFILE       0       0      0  
ONLINELOG         0       0      0  
ARCHIVELOG    98.65       0     51  
BACKUPPIECE       0       0      0  
IMAGECOPY         0       0      0  
FLASHBACKLOG          0       0      0  
 
6 rows selected.  

发现已经使用了98.65%
下面为解决此问题的方法
登陆数据库
[oracle@master ~]$ sqlplus / as sysdba  
 
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 10 22:41:54 2012  
 
Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
 
 
Connected to:  
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production  
With the Partitioning, OLAP and Data Mining options  

先查看当前的闪回区大小
SQL> show parameter db_recovery_file_dest   
NAME                     TYPE    VALUE  
------------------------------------ ----------- ------------------------------  
db_recovery_file_dest            string  /home/oracle/flash_recovery_area  
db_recovery_file_dest_size       big integer 2G  
SQL> archive log list;  
Database log mode          Archive Mode  
Automatic archival         Enabled  
Archive destination        USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     53  
Next log sequence to archive   53  
Current log sequence           55  

可以看得闪回区的大小为2g,所以我把他扩展为10g
SQL> alter system set db_recovery_file_dest_size=10G scope=both;   
System altered.  

然后在查看闪回区的使用情况
SQL>  select * from v$recovery_file_dest;   
NAME                      SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES  
---------------------------------------- ------------ ---------- ----------------- ---------------  
/home/oracle/flash_recovery_area      10737418240 2383963648         0      57   
SQL>  show parameter db_recovery_file_dest   
NAME                     TYPE    VALUE   
db_recovery_file_dest            string  /home/oracle/flash_recovery_area  
db_recovery_file_dest_size       big integer 10G  

在查看一下闪回区的使用率
SQL> select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable, number_of_files as "number" from v$flash_recovery_area_usage;   
 
FILE_TYPE      USED RECLAIMABLE number  
------------ ---------- ----------- ----------  
CONTROLFILE       0       0      0  
ONLINELOG         0       0      0  
ARCHIVELOG     22.2       0     57  
BACKUPPIECE       0       0      0  
IMAGECOPY         0       0      0  
FLASHBACKLOG          0       0       
6 rows selected.  

从之前的98.65%降到了22.2%,在查看一下告警日志
db_recovery_file_dest_size of 10240 MB is 20.14% used. This is a 
user-specified limit on the amount of space that will be used by this 
database for recovery-related files, and does not reflect the amount of 
space available in the underlying filesystem or ASM diskgroup. 
Sun Jun 10 23:12:12 2012  
ALTER SYSTEM SET db_recovery_file_dest_size='10G' SCOPE=BOTH;
Sun Jun 10 23:12:15 2012  
Archiver process freed from errors. No longer stopped 
Sun Jun 10 23:12:15 2012  
Thread 1 advanced to log sequence 56  
  Current log# 1 seq# 56 mem# 0: /home/oracle/oradata/BGTP/redo01.log 
Thread 1 advanced to log sequence 57  
  Current log# 2 seq# 57 mem# 0: /home/oracle/oradata/BGTP/redo02.log 
Sun Jun 10 23:12:27 2012  
Thread 1 cannot allocate new log, sequence 58 
Checkpoint not complete  
  Current log# 2 seq# 57 mem# 0: /home/oracle/oradata/BGTP/redo02.log 
Thread 1 advanced to log sequence 58  
  Current log# 3 seq# 58 mem# 0: /home/oracle/oradata/BGTP/redo03.log 
Sun Jun 10 23:12:52 2012  
Thread 1 advanced to log sequence 59  
  Current log# 1 seq# 59 mem# 0: /home/oracle/oradata/BGTP/redo01.log 
Sun Jun 10 23:12:52 2012  
Trying to expand controlfile section 11 for Oracle Managed Files 
Expanded controlfile section 11 from 56 to 112 records 
Requested to grow by 56 records; added 2 blocks of records 

4、  >解决没有EMP表或者视图的问题:

 

5、  顶顶顶

四、尚观-Oracle DBA培训笔记

 

 

4.1 Oracle数据库体系结构

上图为专用模式下的图形

select具体执行步骤:

如果数据不在data buffer cache中,则服务器进程将从磁盘中读入数据到data buffer cache缓存下来,然后undo缓存块会对该块做镜像,然后读镜像中的数据得到行的结果,用户就会看到执行结果。

如果在库缓冲区中的数据以commit方式提交时,数据将通过后台进程DBWR进程将数据写入到磁盘中,此时注意一般Redo Log Buffer已经记录完所有的更改数据后方可通过进程DBWR写入到磁盘中。特殊情况下,就是redo log buffer忙不过来时也可通过DBWR写入到磁盘中。

Redo Log Buffer中的日志缓存记录会定时通过LGWR进程写入到物理磁盘中的Redolog files中。   其主要是用于恢复数据。

CKPT-àLGWR--àDBWR 一旦commit触发了CKPT后,LGWR将Redo Log Buffer缓存日志写入到redo log files 中,最后将通过DBWR进程将数据写入到磁盘中的data files中。

五个核心进程:

PMON 程序进程  SMON系统进程 DBWR数据库写入进程 LGWR缓存日志写入进程 CKPT触发点检查进程 一个都不能kill掉,否则会出现数据库无法正常工作的现象。

Oracle server 的组成:

4.1.2用户进程讲解

 ORACLE两种连接方式:

1、  不在本地安装Oracle客户端直接连接远程服务器

SERVER=DEDICATED 表示用专用服务器连接ORACLE数据库。

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =subenjiang)(PORT = 1521))

    (CONNET_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

       )

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=subenjiang)(PORT=1521)))

启动Oracle服务监听时:

 

TNSLSNRfor Linux: Version 10.2.0.1.0 - Production

Systemparameter file is/usr/local/service/oracle/product/10.2.0/network/admin/listener.ora

Logmessages written to /usr/local/service/oracle/product/10.2.0/network/log/listener.log

Listeningon: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=subenjiang)(PORT=1521)))

Listeningon: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

 

Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=subenjiang)(PORT=1521)))

STATUS ofthe LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version10.2.0.1.0 - Production

StartDate                08-JUN-2014 19:28:37

Uptime                    0 days 0 hr. 0 min. 0 sec

TraceLevel               off

Security                  ON: Local OS Authentication

SNMP                      OFF

ListenerParameter File  /usr/local/service/oracle/product/10.2.0/network/admin/listener.ora

ListenerLog File        /usr/local/service/oracle/product/10.2.0/network/log/listener.log

ListeningEndpoints Summary...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=subenjiang)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

ServicesSummary...

Service"PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", statusUNKNOWN, has 1 handler(s) for this service...

The command completed successfully

2、在本地安装Oracle客户端 Oracle SQL*Net要配置

4.1.3服务器进程讲解

Pga 程序全局区:

Sga系统全局区:

需要单独对shared pool large pool 等大小进行设置,即动态设置,如果不设置则可能出现数据库严重抖动的现象。

修正上图的中错误sga_terget 为sga_target

 

 

 

 

 

 

2、  机会很少

 

4.2 用户进程访问数据库的方式

4.3 各个池的介绍

Shared pool 作用:1、缓存语句

设置其大小操作:

到底设置多大?

总结一下:

分配方案:

数据高速缓冲区:

保证数据读写在高速缓冲区中进行,提高性能和效率

避免大批量的物理读写,提高性能

Keep池保持SQL语句不被lru清空掉

1、可写列表(被修改过的,需要的数据,会写到磁盘去)2、干净部分

分配多大的db_cache_size比较合理?

根据需要去设置大小

 

总结:

1、  defualt池一般是数据库默认的

2、  如果想长期保存在高速缓冲区中而不被lru删除的,就要设置keep池的大小;

3、  如果想要内存区域不想重复的分配内存而是想直接利用内存资源的话,就使用recycle池,并设置其大小

重做日志缓冲区:

Large pool池:

如果sga_max_size>1G则32M,否则是24M

Stream pool在10g时不被自动管理,10g R2时才被sga自动管理

初始大小:

这些都可以被自动管理,但是需要设置一个初始大小,log buffer需要手动设置大小

后台进程:

五个核心进程必须都正常运行才能保证Oracle数据库正常工作

查看Oracle后台进程:

Ora_表示实例名称

还可以使用这种查看后台进程:

可以设置屏幕上显示多少行的命令

各个进程的作用:

什么时候做实例恢复?

此时需要恢复

原因是:Startup force 没有关闭数据库实例,需要先执行关闭数据库实例的操作,即:

然后再重新正常启动数据库实例,实例恢复自动完成

可以重启死掉的进程等

32位操作系统,可以有10个进程在运行,从dbw0开始到dbw9

64位可以运行20个

可以修改配置文件:

最多只有20个

按顺序循环写

杀掉LGWR进程后会出现的问题:

很重要的进程

CKPT  -àDBRW(要执行需要LGWR运行)--àLGWR 三个时钟,必须正常运行

 非归档模式,需要关闭实例,再重新mount下

切换一个就会多出一个归档文件

归档进程跑多少个呢?由一个参数决定:

可以调整,最多只能跑30个归档进程

11g新特性:

数据库名的查找:

实例名:

数据库文件:

4.4 Oracle数据库的安装

安装前的准备:

-e表示后面还有其他命令,-e 即-exec

‘s/32768/1024/’表示将32768第一次出现的改为1024

Sed表示替换

以上就是修改内核参数

让修改生效:

Xhost + 注意

修改版本号,如果不修改则需要安装其他的一些软件包

安装有两种方式:1、基本安装 2、高级安装(可以选择一些东西)

接下来就是基本安装步骤,与之前的文档安装步骤差不多

登陆操作:

先停止sqlplusctl stop

再重启

我本机为

纠正上图标记错误的地方为:

exportPATH=/usr/local/service/oracle/product/10.2.0/jdk/bin/:$PATH

cd /usr/local/service/oracle/product/10.2.0/oc4j/j2ee/isqlplus/application-deployments/isqlplus/

java-Djava.security.properties=/usr/local/service/oracle/product/10.2.0/sqlplus/admin/iplus/provider-jar /usr/local/service/oracle/product/10.2.0/oc4j/j2ee/home/jazn.jar -user"iSQL*Plus DBA/admin" -password welcome –shell

JAZN:> listusers "iSQL*PlusDBA"

Admin

adduser "iSQL*Plus DBA"subenjiang oracle

grantrole webDba "iSQL*Plus DBA"subenjiang

4.5 Oracle数据库卸载方法

 

另外通过安装程序去卸载

4.6 在无图形界面下安装Oracle数据库

方法一:

安装前准备略过,下面是开始安装

以上的阴影部分是模板

录制脚本方式安装:首先需要在具有图形界面的Linux操作系统中完成录制,实际上是将图形界面安装的步骤录制下来

接下就出现Oracle图形化界面的安装过程

关键部分:

选建库----选通用安装

根据需要来选择

根据需要设置密码

注意不要选择install,而是直接退出

之后会在这些目录出现一些文件:

在这个文件中只要出现u01都根据自己的实际目录进行修改

其他的相应的文件也需要根据实际情况修改

第二个步骤:拷贝脚本到目的地

 

查看:

开始安装

查看后台进程

接下来查看配置文件

最后检查端口等

最后是否让Oracle自启动,根据需要去设置(不会百度)

4.7、创建数据库

手动建库:

第5步和第六步换下顺序

 

指定一个实例去启动

总结:

4.8 升级数据库

升级前,先使用rman备份

为了让sqlplus上下翻页,需要安装如下三个软件

将上述文件解压,比如IO这个软件需要使用命令perl Makefile.PL解压,然后得到一个Makefile文件,然后使用make和make instal进行安装即可

使用这种方式去登陆Oracle,但是这个很不方便,需要定义一个别名

总结:

准备:需从网上下载3个包

            1)IO-Tty-1.07.tar.gz

            2)Term-ReadLine-Gnu-1.16.tar.gz

            3)uniread-1.01.tar.gz

 

安装:

[root@oracleDesktop]# tar -xvf IO-Tty-1.07.tar.gz

[root@oracleDesktop]# tar -xvf Term-ReadLine-Gnu-1.16.tar.gz

[root@oracleDesktop]# tar -xvf uniread-1.01.tar.gz

    --解压三个包

 

[root@oracleDesktop]# cd IO-Tty-1.07

[root@oracleIO-Tty-1.07]# perl Makefile.PL

[root@oracleIO-Tty-1.07]# make

[root@oracleIO-Tty-1.07]# make install

    --装第一个

 

[root@oracleIO-Tty-1.07]# cd ../Term-ReadLine-Gnu-1.16

[root@oracleTerm-ReadLine-Gnu-1.16]# perl Makefile.PL

[root@oracleTerm-ReadLine-Gnu-1.16]# make

[root@oracleTerm-ReadLine-Gnu-1.16]# make install

    --装第二个

 

[root@oracleTerm-ReadLine-Gnu-1.16]# cd ../uniread-1.01

[root@oracleuniread-1.01]# perl Makefile.PL

[root@oracleuniread-1.01]# make

[root@oracleuniread-1.01]# make install

    --装第三个

 

使用:

    在命令前加 uniread

 

    原来登录是 sqlplus"/as sysdba"

    现在是    uniread sqlplus "/as sysdba"

 

查看数据库版本号:

Select * from v$version查看Oracle数据库的版本号

4.9 一条sql语句的执行过程的解析

如上图所示,比如一条查询语句select *from emp;这条语句

1、  首先通过客户端程序(如PL/SQL)写入执行脚本,运行后将该语句发送给服务端程序PGA

2、  PGA接收到该语句并将其发送给instance中的shared pool中的library cache进行软硬分析,如果之前已经执行过该语句则进行软分析即按照之前执行的步骤执行语句,否则按照硬分析进行;

3、  语句中需要访问的数据,通过datadict cache数据字典进行分析需要访问哪个文件中的哪个数据块中的数据,然后通过服务器进程把数据读入data buffer cache中,作为镜像存储起来,然后通过undo把语句中所要查询的数据展现出来;

4、  最后根据要执行的具体方法(如select、insert、update、delete)调用后台程序进行增删改查操作

 

五、尚观-Oracle DBA培训笔记

5.1、 如何查看Oracle的alert.<sid>.log文件的位置

         cd$ORACLE_HOME/admin/$ORACLE_SID/bdump

         ls

就可以看到了

5.2 密码文件

        

1、  操作系统认证:

2、  密码文件认证

密码文件存在哪啊?

如何选择认证方式:?

细节问题需要注意技巧

密码文件的建立:

 

修改你的dba用户密码:

 

3、  打交道核对和