分类: Oracle
2009-03-05 10:07:23
控制文件:包含维护和验证数据库完整性的必要信息,用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件。
数据文件:存储数据的文件。
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件。
参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数。
归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
密码文件:认证哪些用户有权限启动和关闭Oracle例程。
[root@ORC_TEST orcl]# ll /orac/orahome/app/oracle/oradata/ACCOUNTDB
total 1072540
-rw-r----- 1 oracle oinstall 7061504 Jul 28 06:07 control01.ctl
-rw-r----- 1 oracle oinstall 7061504 Jul 28 06:07 control02.ctl
-rw-r----- 1 oracle oinstall 7061504 Jul 28 06:07 control03.ctl
-rw-r----- 1 oracle oinstall 52429312 Jul 28 02:17 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Jul 28 06:07 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Jul 27 22:19 redo03.log
-rw-r----- 1 oracle oinstall 104865792 Jul 28 02:22 example01.dbf
-rw-r----- 1 oracle oinstall 251666432 Jul 28 06:06 sysaux01.dbf
-rw-r----- 1 oracle oinstall 503324672 Jul 28 06:02 system01.dbf
-rw-r----- 1 oracle oinstall 23076864 Jul 28 04:16 temp01.dbf
-rw-r----- 1 oracle oinstall 31465472 Jul 28 06:06 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 28 03:59 users01.dbf
2、逻辑结构(表空间、段、区、块)
表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。
段:是对象在数据库中占用的空间
区:是为数据一次性预留的一个较大的存储空间
块:ORACLE最基本的存储单位,在建立数据库的时候指定
3、内存分配(SGA和PGA)
SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息, 它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收
4、后台进程(数据写进程、日志写进程、系统监控、进程监控、检查点进程、归档进程、服务进程、用户进程)
数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件
日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件
系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
进程监控:负责在一个Oracle 进程失败时清理资源
检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
归档进程:在每次日志切换时把已满的日志组进行备份或归档
服务进程:用户进程服务。
用户进程:在客户端,负责将用户的SQL 语句传递给服务进程,并从服务器段拿回查询数据。
5、oracle例程:Oracle 例程由SGA 内存结构和用于管理数据库的后台进程组成。例程一次只能打开和使用一个数据库。
6、SCN(System Change Number):系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
7、什么是 instance,和SID、DBName有什么区别:
Instance其实就是指的操作系统中一系列的进程以及为这些进程所分配的内存块。在Oracle中,我们可以新建一个Oracle的Instance,这个时候虽然有了进程还有SGA等一系列的内存快,但是这个时候并没有把数据库文件读取进来。所以只是一个实例,在后来,你可以通过命令手动或者自动地把数据库文件加载进我们的数据库Instance中,这个时候的数据库才可以让我们真正的开始访问操作。
数据库的应用如果想实现,数据库和数据库Instance是缺一不可的,如果只有数据库的那些文件,那么,只能代表数据在这个文件中,但是我们无法直接进行操作。而如果只有数据库Instance,那么我们虽然可以急性操作,但是也不知道操作哪些数据,操作生成的数据也无法保存等等。所以,当一个Oracle Instance真正Load了一个Oracle Database了以后,数据库才可以被我们使用。
SID主要用于区分同一台计算机上的同一个数据库的不同实例。
oarcle数据库服务器主要有两部分组成:物理数据库和数据库管理系统
数据库管理系统是用户和物理数据库之间的一个中间层,是软件层。这个软件层具有一定的结构,这个结构又被称为例程结构。
在启动数据库时,oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个例程(instance),然后由该例程装载、打开数据库,最后由这个例程来访问和控制数据库的各种物理结构。
在启动数据库并使用数据库的时候,实际上是连接到该数据库的例程,通过例程来连接、使用数据库。所以例程是用户和数据库之间的一个中间层。SID 是给用户环境变量使用,instance例程则是给服务使用的。
例程是由操作系统的内存结构和一系列进程所组成的,可以启动和关闭。
一台计算机上可以创建多个oracle数据库,当同时要使用这些数据库时,就要创建多个例程。为了不使这些例程相互混淆,每个例程都要用称为SID的符号来区分,即创建这些数据库时填写的数据库SID。
8、oracle认证方式:
oracle认证方式分为操作系统认证和口令文件认证2种方式,操作系统认证有时候也叫本地认证。
--操作系统认证:即oracle认为操作系统用户是可靠的,即既然能登陆到操作系统那么oracle数据库你也能登陆
--口令文件认证:oracle认证认为操作系统用户是不可信任的,如果要访问数据库,必须进行再次认证。
--操作系统认证:
sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NTS)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('NONE')
--口令文件认证:
sqlnet.ora文件中的参数:SQLNET.AUTHENTICATION_SERVICES=(NONE)
spfile(pfile)文件参数:REMOTE_LOGIN_PASSWORDFILE=('EXCLUSIVE')或('SHARED')
SQL*Plus 连接和ORACLE用户操作:
========================================
# su - oracle
$ sqlplus /nolog
SQL> conn /as sysdba
SQL> select * from v$version;
或:
# su - oracle
$ sqlplus zhaohang/ztgame;
SQL> select * from v$version;
用户管理:
========================================
SQL> create user zhaohang identified by ztgame;
SQL> grant dba to zhaohang;
SQL> conn zhaohang/ztgame;
# su - oracle
$ sqlplus /nolog
SQL> conn /as sysdba
SQL> alter user sys identified by ztgame;
SQL> conn sys/ztgame as sysdba
修改密码:
SQL> password zhaohang;
忘记旧密码的时候对用户密码的更改:
SQL> alter user USRNAME identified by USRPWD;
数据库实例的启动和关闭:
========================================
$ sqlplus /nolog
conn sys/change_on_install as sysdba;
SQL> shutdown immediate;
SQL> startup
ORACLE 基础操作:
========================================
-- 查看当前所有数据库:
SQL> select name from v$database;
-- 查看所有数据库实例及其详细信息:
SQL> select * from v$instance;
-- 查看当前数据库里所有表(包括系统表/不包括系统表):
SQL> select TABLE_NAME from all_tables;
SQL> select * from tab;
-- 查看表数据结构:
SQL> desc v$database;
-- 查看当前连接的用户:
SQL> show user;
-- 查看前 10 行:
SQL> select TABLE_NAME from all_tables where rownum <=10;
-- 查看以U开头的表名:
SQL> select TABLE_NAME from all_tables where TABLE_NAME like 'U%';
-- 查看记录,以-来分割两个字段:
SQL> select name||'-'||age from xinxi;
Oracle表操作:
========================================
SQL> create table t1(ID number(10),NAME char(20));
SQL> desc t1;
SQL> insert into t1(ID,NAME) VALUES('1','admin');
SQL> select * from t1;
SQL> alter table t1 add(NOTE varchar2(200));
SQL> alter table t1 drop column NOTE;
SQL> drop table t1;
SQL> delete from t1 where ID=1;
SQL> update t1 set NOTE='This is my home name!' where NAME='zhaohang';
-- sqlplus 建表并插入数据后,退出sqlplus再次进入查询,结果数据没有写入:
-- 通过SQL PLUS发送的最后一次SQL语句都会保存在SQL PLUS的一个数据缓冲区内,用/来重新写入!
create table xinxi (name char(10),age char(2));
begin
insert into xinxi values ('zhaohang','27');
insert into xinxi values ('zhouzhou','27');
insert into xinxi values ('Lovely','26');
insert into xinxi values ('Droney','27');
end;
/
其他应用:
========================================
-- Oracle底下的source:
@test.sql;
这样就可以把脚本里的内容插入到数据库了!
-- SQL*PLUS 执行系统命令:
Linux:
SQL> !hostname
SQL> host hostname
Windows:
SQL> $hostname
SQL> host hostname
-- 设置命令记录:
-- oracle 里边有一个和 mysql 里 tee/notee 相同功能 的命令:spool/spool off
SQL> spool sqlhist.txt;
SQL> spool off;
-- 设置spool到文本里的信息只要数据而不要列名:
SQL> set head off
-- 在Oracle中,当查询的数据较多时,显示的结果每显示10行,就会再显示一行列名,那么去除这些列名、只留最上面的列名的语句是什么呢?
-- 输出每页行数,缺省为24,为了避免分页,可设定为0,设成0的时候开始的那个列名也没了,建议设大点就可以了.
SQL>set pagesize 0;
-- 查看哪些用户拥有SYSDBA、SYSOPER权限:
SQL>select * from V_$PWFILE_USERS;
-- 设置每行显示500个字符:
SQL> set linesize 500;
oracle 查看表空间:
========================================
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
输出:(单位M)
TABLESPACE_NAME TS_SIZE
SYSAUX 240
UNDOTBS1 25
USERS 5
SYSTEM 470
查看oracle端口:
========================================
[oracle@ORC_TEST install]$ cat /orac/orahome/app/oracle/product/10.2.0/db_1/install/portlist.ini
iSQL*Plus HTTP port number =5560
Enterprise Manager Console HTTP Port (orcl) = 1158
Enterprise Manager Agent Port (orcl) = 3938
Enterprise Manager Console HTTP Port (ztgame) = 5500
Enterprise Manager Agent Port (ztgame) = 1830
netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3938 0.0.0.0:* LISTEN 20029/emagent
tcp 0 0 0.0.0.0:1830 0.0.0.0:* LISTEN 17911/emagent
tcp 0 0 0.0.0.0:36371 0.0.0.0:* LISTEN 28434/ora_d000_orcl
tcp 0 0 0.0.0.0:42107 0.0.0.0:* LISTEN 16265/ora_d000_ztga
tcp 0 0 0.0.0.0:1158 0.0.0.0:* LISTEN 28349/java
tcp 0 0 0.0.0.0:5580 0.0.0.0:* LISTEN 20480/java
tcp 0 0 0.0.0.0:5520 0.0.0.0:* LISTEN 28349/java
tcp 0 0 0.0.0.0:5521 0.0.0.0:* LISTEN 17410/java
tcp 0 0 0.0.0.0:5560 0.0.0.0:* LISTEN 20480/java
tcp 0 0 0.0.0.0:5500 0.0.0.0:* LISTEN 17410/java
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN 4024/Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 4024/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 4024/Xvnc