================安装过程================
1、下载rpm包:
ftp://195.220.108.108/linux/ASPLinux/i386/updates/12.1/i386/sysstat-7.0.2-3.el5.asp121.i386.rpm
ftp://rpmfind.net/linux/fedora/releases/9/Everything/i386/os/Packages/libaio-0.3.106-4.2.i386.rpm
ftp://rpmfind.net/linux/fedora/releases/9/Everything/i386/os/Packages/libaio-devel-0.3.106-4.2.i386.rpm
ftp://fr.rpmfind.net/linux/fedora/releases/10/Everything/i386/os/Packages/unixODBC-2.2.12-9.fc10.i386.rpm
ftp://fr.rpmfind.net/linux/fedora/releases/10/Everything/i386/os/Packages/unixODBC-devel-2.2.12-9.fc10.i386.rpm
2、配置内核参数
修改/etc/systl.conf,增加以下参数
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
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
fs.aio-max-nr = 1048576
修改完后运行sysctl -p
3、创建安装数据库所需要的组
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba Oracle
passwd Oracle
修改/etc/sudoers文件
增加一行,使得Oracle用户有sudo权限,否则用Oracle用户登录无法进行一些操作
%oinstall ALL=(ALL) NOPASSWD: ALL
4、添加Oracle限制参数
修改/etc/security/limits.conf,增加
Oracle soft uproc 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
设置Oracle环境变量
vi /home/Oracle/.bash_profile,修改
umask 022
TMP=/mnt/Oracle/tmp
TMPDIR=/mnt/Oracle/tmp
export TMP TMPDIR
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/mnt/Oracle/app/Oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_UNQNAME=orcl
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:${PATH}
export ORACLE_PATH=$ORACLE_HOME:$ORACLE_HOME/rdbms/admin:.
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
export LIBPATH=${LIBPATH}:$ORACLE_HOME/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jlib:$ORACLE_HOME/network/jlib:$ORACLE_HOME/jdk
/jre
5、创建安装目录
mkdir -p /mnt/Oracle/app
chown -R Oracle:oinstall /mnt/Oracle/app
chmod -R 755 /mnt/Oracle/app
创建临时目录
mkdir /mnt/Oracle/tmp
chmod a+wr /mnt/Oracle/tmp
6、解压安装包
unzip linux_11gR2_database_1of2.zip
unzip linux_11gR2_database_2of2.zip
cd database
sh runInstaller
安装过程如果遇到管理口令无法输入的情况,先在全局数据名里面点一下,再点管理口令就可以输入了
================启动过程================
「em启动过程」
1、emctl start dbconsole
2、打开浏览器输入:
3、启动监听程序
点击启动,输入操作系统的用户名和密码:Oracle(000000)
4、启动数据库
主机身份证明:Oracle(000000)
数据库身份证明:sys(Xxxxx000000), 连接身份:SYSDBA
「数据库启动过程」
1、启动数据库实例
sqlplus /nolog
SQL> connect /as sysdba
Connected.
SQL> startup
2、启动Oralce监听进程
lsnrtl start
[错误提示]
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to
database unique name.
[解决办法]
export ORACLE_UNQNAME=orcl
emctl start dbconsole
[错误提示]
TNS-12541: TNS:no listener
[解放办法]
lsnrctl start
[错误提示]
ORA-12505: TNS:listener does not currently know of SID given in connect
descriptor (DBD ERROR: OCIServerAttach)
[解决办法]
要先启动数据库,启动数据库的方法是:,点击数据库实例右方的启动,输入:
操作系统用户名:Oracle
密码:000000
用户名:sys
密码:Nsfocus000000
连接身份:SYSDBA
================数据库操作================
创建数据库:
CREATE TABLE "SCOTT"."COUNTRIES" ("COUNTRY_ID" CHAR(2 BYTE) NOT NULL, "COUNTRY_NAME" VARCHAR2(40 BYTE) NOT NULL, "
COUNTRY_SUBREGION" VARCHAR2(30, BYTE), "COUTRY_REGION" VARCHAR2(20 BYTE) NOT NULL);
提示 ORA-00907: missing right parenthesis
[错误原因]
30后面多了一个逗号,语法错误,注意出错的地方有个星号提示
[解决办法]
CREATE TABLE "SCOTT"."COUNTRIES" ("COUNTRY_ID" CHAR(2 BYTE) NOT NULL, "COUNTRY_NAME" VARCHAR2(40 BYTE) NOT NULL, "
COUNTRY_SUBREGION" VARCHAR2(30 BYTE), "COUTRY_REGION" VARCHAR2(20 BYTE) NOT NULL);
如下的语句没有问题:
CREATE TABLE dept(deptno number(2), loc varchar2(20), PRIMARY KEY (deptno));
数据插入:
INSERT INTO dept VALUES(1, 'beijing');
[错误提示]
INSERT INTO dept VALUES(1, "beijing");
ORA-00984: column not allowed here
[解决办法]
把双引号改为单引号
[错误提示]
select * from dept;
明明插入了数据,却没有数据,原因可能是插入数据后没有commit,在另外的sqlplus中就查询不到
[解决办法]
insert后要commit
CREATE TABLE products (product_id INTEGER, product_name VARCHAR2(60), category varchar2(60));
INSERT INTO products VALUES (1501, 'VIVITAR 35MM', 'ELECTRANCS');
INSERT INTO products VALUES (1502, 'OLYMPUS IS50', 'ELECTRANCS');
INSERT INTO products VALUES (1601, 'PLAY GYM', 'TOYS');
INSERT INTO products VALUES (1606, 'LAMAZE', 'TOYS');
INSERT INTO products VALUES (1666, 'HAPPY POTTER', 'DVD');
COMMIT;
CREATE TABLE newproducts (product_id INTEGER, product_name VARCHAR2(60), category varchar2(60));
/* 这一行改变了 product_name */
INSERT INTO newproducts VALUES (1502, 'OLYMPUS CAMERA', 'ELECTRANCS');
INSERT INTO newproducts VALUES (1601, 'PLAY GYM', 'TOYS');
INSERT INTO newproducts VALUES (1666, 'HAPPY POTTER', 'DVD');
INSERT INTO newproducts VALUES (1700, 'WAIT INTERFACE', 'BOOKS');
COMMIT;
/* 合并 -- 匹配 */
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE
SET p.product_name = np.product_name,
p.category = np.category;
/* 合并 -- 不匹配 */
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category);
/* 带条件的更新和插入语句 */
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE
SET p.product_name = np.product_name,
p.category = np.category
WHERE p.category = 'DVD'
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category)
WHERE np.category != 'BOOKS';
/* 常量过滤谓词 */
MERGE INTO products p
USING newproducts np
ON (1=0)
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category)
WHERE np.category != 'BOOKS';
================SQL*Plus================
1、SQL*Plus行编辑命令
list或l 列出缓冲区的所有行
l后面跟数字N 设置N为当前行,例如l1,设置第1行为当前行
/ 执行最后输入的SQL语句
define_editor=vi 设置编辑器为vi,然后输入edit或者ed就会调用vi作为编辑器
save file_name 保存缓冲区的SQL语句
c/old/new 修改缓冲区当前行的old为new
c/text 删除text
a text 行尾增加text
2、注释
REMARK xxx
/* xxx */
-- xxx
3、运行命令
1)命令行方式
直接输入后加入分号
2)SQL缓冲区方式
r(un)
/
/和r的区别是不会显示缓冲区的sql语句,也不会是缓冲区的最好一行成为当前行
3)命令文件方式
START file_name [arg1, arg2]
@ file_name [arg1, arg2]
START和@的区别是@既可以在SQL*Plus会话内部运行,也可以在启动SQL*Plus时的命令行级别运行,而START命令只能在SQL*Plus会
话内部运行。后面的参数arg1 arg2 可以传递给下面的交互命令定义的用户变量。
4、交互命令
定义用户变量 DEFINE MYFRIEND=SMITH
使用用户变量 &MYFRIEND
用两个&表示在同一个SQL语句中,如果有两个或以上的同名变量,只需要输入一次,就可以赋值替换,如:
SELECT ename, &&col FROM scott.emp ORDER BY &&col;
SELECT * FROM emp_details_view WHERE job_id='&1' AND salary='&2';
SAVE select_details
START select_details PU_CLERK 3100
上面的START命令会把PU_CLERK和3100传递给&1和&2参数
PROMPT 提示用户信息
ACCEPT 接受用户的输入
PAUSE 暂停,等待用户敲回车才能继续