help index:
SQL*Plus所特有的命令,它将显示SQL*Plus所支持的所有命令。

查看命令,以查看SET命令为例:
①? set
②help set
上面任意一个都可以。

在SQL*Plus上大小写是不区分的。只是习惯上将关键字大写。

set sqlblanklines on;

这个命令可以支持在SQL*Plus上输入多个空行。

为了提高Oracle的执行效率,应该使用替代变量的执行方式输入。举个例子:
·1 SELECT * FROM dept WHERE deptno=&tt;
Enter value:10,20
·2 SELECT * FROM dept WHERE deptno=10;
·3 SELECT * FROM dept WHERE deptno=20;
1与2,3不同的方式在于,1只执行一个执行计划,而2和3要执行两个执行计划。如果选择1,自然会有效的提高语句的执行效率。

利用list或者l可以查看在Oracle缓冲区中执行过的命令。

缓冲区中的命令用/表示执行。

如果打错了关键字的话,可以使用c或者change来修改
SQL>SELECT * FRON v$logfile;
SQL>c /N/M
SQL>SELECT * FROM v$logfile;

删除缓冲区的信息。DEL 4就是删除第四行的信息。删除多行的时候,DEL 2 5,则删除了第二行到第五行的信息。

SQL>L;
1* SELECT *
追加:
Append或A
SQL>A FROM dept;
1* SELECT * FROM dept;

将SQL语句保存到磁盘:
sava c:\oracle\test.txt

执行的话:
SQL>@c:\oracle\test.txt
查看内容:
SQL>get c:\oracle\test.txt

在SQL*Plus中可以使用edit命令来进行编辑。在windows中会自动调用记事本工具进行编辑。

DESC (describe)

COL bytes FORMAT 999,999,999
SELECT bytes FROM v$datafile;

SQL*Plus是Oracle允许输入和执行SQL语句以及PL/SQL块的一个交互工具。它能够运行脚本运行,生成一些简单的报表,以格式化方式来输出。在Oracle8i以后,可以利用SQL*Plus来启动和停止数据库。我们可以利用SQL*Plus执行一些数据库定义语言和操作语言的工作。在Oracle中,SQL*Plus是一个利用广泛,非常实用的一个工具。

利用SQL*Plus登录:
sqlplus sys/password as sysdba

如果没有打开实例,则可以以nolog登录:
sqlplus /nolog
然后再连接到数据库的实例:
connect sys/password as sysdba
(以sys用户登录时一定要用sysdba的身份)

接下来可以启动数据库,正常情况下输入以下命令就可以了:
SQL>startup
这个命令包括三个环节:
①首先启动数据库实例
②接着打开控制文件 database mounted
③然后打开数据文件 database opened

但是我们进行热备份的时候,是非归档方式的(可以通过archive log list来查看)。我们要修改在归档方式进行热备份,但是在数据库已经启动的情况下是不允许做修改的。这个时候要将数据库关闭,然后重新启动实例,然后打开控制文件,但是不打开数据文件,所以需要采用如下的命令:
1,SQL>startup mount
此选项表示,在启动数据库实例的时候,同时启动控制文件,但是不启动数据文件。
2,SQL>alter database archivelog;
3,SQL>alter database open;
这样就可以将数据库的非归档方式改为归档方式。

除此以外还有另外的一个命令:
SQL>startup nomount
此命令表示首先启动实例,但是连控制文件都不打开。
此命令的使用场合:就是当控制文件丢失一个或多个的时候,就用这个命令,以便于启动时重新创建控制文件。

关闭Oracle数据库的命令
SQL>shutdown immediate
这个是最常用的Oracle推荐的选项。迫使每个用户执行完当前的SQL语句后立即断开连接。

SQL>shutdown
这个表示正常关闭,等待所有用户断开连接后才真正的把数据库实例关闭掉。如果有空闲用户没有断开连接则会造成长时间无法关闭。

SQL>shutdown transactional
表示迫使用户在当前执行完成后断开连接,中止实例。恢复破坏的文件和数据文件不能同其他的数据库文件保持一致。

SQL>shutdown abort
这是一个比较严厉的手段。强行关闭数据库和实例。可能会造成文件的破坏,不到万不得已和不可抗力的时候不利用此手段。

在对数据库的操作中,尤其是对数据库表的drop,create时,需要将删除前和重建后的数据库表进行差分比较,这个时候往往需要将数据库表导出到csv文件里面。

以下面的test表为例说明如何将一个数据库表导出到CSV文件里面。

首先DESC一下表,看一下表结构是什么样的:
=================================================DESC test

Name Null? Type
------------------------ --------- -------------------
id NUMBER
name VARCHAR2(10)
age NUMBER
birthday DATE
address VARCHAR2(50)
email VARCHAR2(25)
=================================================

然后,将下面的语句保存为SQL文件,进入SQLPlus并执行。
=================================================
set heading off
set verify off
set feed off
set linezise 1024
set pause off
set echo off
set tab off
set timing off
set pagesize 0
set trimspool on
set termout off
spool test.csv

select
''||id||'|'||
''||name||'|'||
''||age||'|'||
''||birthday||'|'||
''||address||'|'||
''||email||'|'||
' '
from test
ordey by id;

spool off
=================================================
操作的时候,在Unix或者Linux系统下一般会将文件保存到当前用户所在的目录。

Oracle数据库的逻辑空间一般有一下的一些概念所组成(按照逻辑范围由大到小):

表空间(tablespace),段(segment),盘区(extent)<有的翻译成扩展或者范围>,块(block)。

一个表空间对应一个或者多个数据文件(datafile)。从数据文件中并不能解读对应的表的信息,这也是数据库一个共同的特点。

一个表空间可以包括多个段,段与数据文件之间并没有映射关系。

Oracle存储数据的最基本的存储单位是块,在Windows平台下,默认的块大小是8K(8192字节),可以在安装全局数据库之前设置块的大小,但是oracle的块大小一定是操作系统块大小的整数倍。

Oracle中,若干个块组成一个盘区,若干个盘区组成一个段,若干个段组成一个表空间,我们真正指定表存储的时候,只能指定这个表存储在哪个表空间。

这就是Oracle的一个整体布局。

当一个Oracle实例开始运行的时候,会分配一个称为SGA(系统全局区)的大的内存块(如下所示数据库启动时显示的数据信息)。

=========================================
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 83888372 bytes
Database Buffers 79691776 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
=========================================

系统的SGA被该实例的所有后台进程共享。在SGA中,包括以下的几个缓存池。
①数据库高速缓冲区DBbuffer②大共享区③共享池④日志缓冲池Redo buffer⑤固定SGA

数据库高速缓冲区:
如果每次执行一个SQL查询的时候,Oracle都必须从磁盘读取数据块,并且每个改变都需要写入磁盘的话,那么Oracle的执行效率将非常的低。而DBbuffer经常能够使用内存中的数据块,在那里就能很快的得到访问。内存中用来频繁访问的区域就被称之为数据库高速缓冲区。

数据库高速缓冲区是SGA的区域里面最大的部分,包括以下的三个缓存池:
①保持缓存池:想在内存中长期保存和频繁访问(如代码表)而使用的缓存池。此缓冲池在关闭数据库之前一直保留,并不从内存中释放空间。
②再生缓存池:想尽快从内存中排除的对象使用此缓存池。(如频繁访问的大表)
③默认缓存池:除以上两种情况外的选择。

共享池也是Oracle当中一个非常重要的缓存区域,主要由库缓冲区和字典缓冲区所构成。用来缓存PL/SQL的程序单元,SQL语句的执行版本和相关的执行计划。共享池规模对数据库的性能有着重要的影响。

在库缓冲区又包括共享SQL区和PL/SQL区。在SQL区中保留了SQL语句的解释版本,以便再次使用的时候不必重新解释,目的是使这些语句再次执行的时候,能够提高进程的速度。PL/SQl区保留了PL/SQL的过程,函数等编译版本,以便于所有的用户能够共享。当程序执行一个PL/SQL的执行单元的时候,当有两个或者两个以上用户需要执行相同的过程,函数或者触发器等相关内容的时候,Oracle并不缓存两个或者两个以上的内存区域。Oracle的处理是,把相同的代码做一个拷贝,被不同的用户所缓存。

字典缓存区是用来缓存数据字典信息的一个区域。当分析SQL语句来校验表名,列名,数据类型等信息的时候,Oracle将频繁的提到数据字典。通过把对最频繁使用的信息存储到内存中,Oracle减少了相关SQL语句所引起的相关性能上的冲突。

Redo日志缓冲池是用来放置写入磁盘的Redo日志记录。循环方式,先进先出。

大共享区是Oracle的一个可选的特征。它提供了大内存块的隔离内存区。如果选择多线程的服务器,或者进行备份和相关的RMN等相关操作的时候,需要这个区域。

固定SGA区不能人为设定大小,是Oracle数据库自己控制的。

Oracle的文件系统主要分成以下的三大块:

控制文件(.CTL),数据文件(.DBF),日志文件(.LOG)

这三种文件系统一般在以下路径可以找到:
/u01/app/oracle/oradata/oracleSID

除此三种文件还有一种参数文件,参数文件不是数据库系统中的有效组成部分,在启动数据库时,参数文件不直接参与工作,只是控制文件是由参数文件寻找的。
参数文件位置:
/u01/app/oracle/product/10.2.0/db_1/dbs/spfileoracleSID.ora
控制文件的内容会显示在参数文件中。参数文件的作用起到寻找控制文件的作用。

Oracle中有两种日志文件,一种为联机日志文件(重做日志文件),一种为归档日志文件。
REDO01.DBF和REDO02.DBF,REDO03.DBF是典型的联机日志文件,特点是顺序写文件,写满后写下一个,写满第三个循环写第一个,并且覆盖掉不做备份。
归档日志文件,在热备份的时候要选择的一种归档方式。

由控制文件控制数据文件和日志文件。数据库启动时启动对应实例后,首先启动控制文件,在由控制文件打开数据文件。例如在Linux启动数据库时可以看到的动作现象是:数据库装载:Database Mounted,然后打开数据库:Database Opened。其实就是先打开控制文件,在打开数据文件的过程。

用Sqlplus直观的可以看见:

以Oracle用户登录Sqlplus:
① sqlplus /nolog
② conn / as sysdba

如果是首次从Linux界面登录,需要启动Oracle数据库应用。

① sqlplus / as sysdba
② startup

查看控制文件
DESC v$controlfile
查看控制文件的状态和名称(显示路径)
SELECT status,name FROM v$controlfile;

查看数据文件
DESC v$datafile
比如查看数据文件的文件号和状态
SELECT file#,status FROM v$datafile;

看日志文件
DESC v$logfile
查看日志文件路径信息
SELECT member FROM v$logfile;

注:此安装过程同样适用于Oracle10g在Linux32上的安装。略有改动地方已注明。

1 视频下载地址 2 视频在线观看地址

<作者:遥远>

到 otn.oracle.com 网站上下载 oracle 11g

将上一次中已经安装好的虚拟机拷贝到一个新的目录,启动新的虚拟机。

编辑 /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144

生效 /sbin/sysctl -p

编辑 /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

编辑 /etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so

编辑 /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

创建相关的用户和组:
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd -g oinstall -G dba oracle
passwd oracle

创建目录:
mkdir -p /u01/app/
chown -R oracle:oinstall /u01/app/
chmod -R 775 /u01/app/

从windows网络邻居中mount oracle 11g的安装软件到linux

mount //192.168.2.1/oracle11g /mnt

切换成ORACLE用户 修改/home/oracle/.bash_profile,加入:

umask 022
ORACLE_BASE=/u01/app/oracle
ORACLE_SID=gaoyu
ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_SID ORACLE_HOME
export LC_CTYPE=en_US.UTF-8(如果是安装oracle10g的情况需要添加这行语句,防止安装画面汉语集字符出现“口”字,oracle11g不需要)

然后执行如下命令使之生效:
source .bash_profile

运行runInstaller 运行安装。
在安装过程中,会提示缺少下面的包,从Centos的安装盘中安装:
rpm -ivh libaio-0.3.105-2.i386.rpm
rpm -ivh libaio-devel-0.3.105-2.i386.rpm
rpm -ivh elfutils-libelf-devel-0.97.1-4.i386.rpm
rpm -ivh unixODBC-devel-2.2.11-1.RHEL4.1.i386.rpm
rpm -ivh unixODBC-2.2.11-1.RHEL4.1.i386.rpm
rpm -ivh sysstat-5.0.5-14.rhel4.i386.rpm

运行netca创建listener,选一路选默认即可

用dbca创建数据库,注意密码的大小写,选sample schema,字符集要选unicode。

订阅: 博文 (Atom)