X86_64平台下Oracle 11g R2 X64 for Linux的软件安装、数据库安装、服务配置、数据库启动和停止、SQLPLus使用

18 篇文章 1 订阅

X86_64平台下Oracle 11g R2 X64 for Linux的软件安装、数据库安装、

服务配置、数据库启动和停止、SQLPlus使用

平台: CentOS-5.5 Linux

1. 数据库软件安装

(1)创建oracle用户和用户组
root用户登录后,执行user.sh脚本,创建用户和用户组,脚本如下

#!/bin/bash

#
# Author: zhankunlin
# Description: 创建oracle 用户和用户组
#

curUser=`who am i | awk '{print $1}'`;
if [ "$curUser" != "root" ]; then
        echo "This script must be executed by user 'root' "
        echo "Error! exit"
        exit
fi

groupadd oinstall ;
groupadd dba ;
useradd -m -g oinstall -G dba oracle ;
mkdir /sdd1/oracle ;
mkdir /sdd1/oracle/11gR2_database_X64 ;
mkdir /sdd1/oracle/11gR2_Inventory ;
chown -R oracle:oinstall /sdd1/oracle ;
chmod -R 775 /sdd1/oracle ;
id oracle ;
passwd oracle ;

(2)设置内核参数
root用户登录后,执行kernel_parameter.sh脚本,设置内核参数,脚本如下
#
# Author: zhankunlin
# Date: 2011/11/17
# Description: set the kernel parameters for oracle 11g R2
#


curUser=`who am i | awk '{print $1}'`;
if [ "$curUser" != "root" ]; then
	echo "This script must be executed by user 'root' "
	echo "Error! exit"
	exit
fi

# 修改后当即生效
sysctl -w kernel.sem='250 32000 100 128' ;
sysctl -w fs.file-max=6815744 ;
sysctl -w net.ipv4.ip_local_port_range='9000 65500' ;
sysctl -w net.core.rmem_default=262144 ;
sysctl -w net.core.rmem_max=4194304 ;
sysctl -w net.core.wmem_default=262144 ;
sysctl -w net.core.wmem_max=1048576 ;
sysctl -w fs.aio-max-nr=1048576;

# 修改配置文件,重启后生效
echo '

# oracle require
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
' >> /etc/sysctl.conf

附:如果不知道内核参数的全名是什么,可以使用命令 sysctl -a 查看所有的内核参数,然后从中grep自己想要的参数。

(3) 设置oracle用户的环境变量
oracle用户登录后,执行env.sh脚本,设置环境变量,脚本如下:
#!/usr/bin/env bash


#
# Author: zhankunlin
# Date: 2011/11/17
# Description: set environment variables of 'oracle' user for oracle 11g R2
#              user 'oracle' execute

curUser=`who am i | awk '{print $1}'`;
if [ "$curUser" != "oracle" ]; then
	echo "This script must be executed by user 'oracle' "
	echo "Error! exit"
	exit
fi

echo "
# oracle env
export ORACLE_BASE=/sdd1/oracle/11gR2_database_X64
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0.1.0/db_1
export NLS_LANG='simplified chinese'_china.ZHS16GBK
export PATH=\$PATH:\$ORACLE_HOME/bin
export LANG=zh_CN.GB18030
export EDITOR=vi
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
" >> ~/.bash_profile

(4) 安装相关软件包
相关的软件包都在CentOS-5.5光盘1中能找到,拷贝出来,使用root用户登录,安装即可,这些包均是Oracle 安装所需:
libaio-devel-0.3.106-5.i386.rpm
libaio-devel-0.3.106-5.x86_64.rpm
unixODBC-devel-2.2.11-7.1.i386.rpm
unixODBC-devel-2.2.11-7.1.x86_64.rpm
pdksh-5.2.14-36.el5.x86_64.rpm
sysstat-7.0.2-3.el5.x86_64.rpm 
安装:rpm -ivh *.rpm 

(5) 安装
root 解压下载的软件包 linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip

oracle用户登录系统,

执行 /sdd1/11gR2_database_X64/database/runInstaller 进行安装。

执行先决条件检查,若存在问题,可以先进行解决,解决后,"重新检查",若硬件限制的错误不能解决,忽略。


使用 root 执行脚本,这一步很重要,一定要执行,执行完后点击确定,进行下一步。

[root@gd47 oraInventory]# cd /sdd1/oracle/11gR2_Inventory/oraInventory
[root@gd47 oraInventory]# ./orainstRoot.sh 
[root@gd47 db_1]# cd /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1
[root@gd47 db_1]# ./root.sh 

(6) 参考资料:

http://greatdeer007.blog.163.com/blog/static/16366517420105331141251/

2. 网络服务配置

       若安装Oracle数据库软件时选择的是只安装数据库软件,不创建数据库,则我们需要在安装完毕后使用dbca创建数据库,创建数据库之前,必须使用netca工具配置监听程序。
[oracle@gd47 oracle]$ netca 
Oracle Net Services 配置:

打开工具后,选择监听程序配置,设置时,端口一般设置为 1521

正在配置监听程序:ORACLELISTENER
监听程序配置完成。
Oracle Net 监听程序启动:
    正在运行监听程序控制: 
      /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/bin/lsnrctl start ORACLELISTENER
    监听程序控制完成。
    监听程序已成功启动。
成功完成 Oracle Net Services 配置。退出代码是0

查看监听进程
[oracle@gd47 oracle]$ netstat -an | grep 1521
tcp        0      0 :::1521                     :::*                        LISTEN      
[oracle@gd47 oracle]$ ps -ef | grep oracle
oracle   11664     1  0 17:13 ?        00:00:00 /sdd1/oracle/11gR2_database_X64/product/11.2.0.1.0/db_1/bin/tnslsnr ORACLELISTENER -inherit

3. 数据库安装

       使用 dbca 工具可以创建oracle数据库,注意字符集,创建数据库前注意当前终端 LANG 的设置.

       若 LANG=zh_CN.GB18030,数据库字符集会默认设置为simplified chinese_china.ZHS16GBK。

       中文Windows 默认是 simplified chinese_china.ZHS16GBK 字符集。
       

4. 数据库启动和停止

       (1) 首先启动 listener 进程
      

#!/bin/bash

#
# Author: zhankunlin
# Date: 2011-11-29
# Desc: start/stop LISTENER of oracle database
#

case $1 in
   "start")
   lsnrctl start
   ;;
   "stop")
   lsnrctl stop
   ;;
   "status")
   lsnrctl status
   ;;
   *)
   echo "Usage: $0 <start|stop|status>"
   exit
   ;;
esac

       (2) 启动数据库实例
       注意  ORACLE_SID 是一个重要的环境变量,在启动数据库实例时起作用,它指数据库ID号。

#!/bin/bash

#
# Author: zhankunlin
# Date: 2011-11-29
# Desc: start/stop oracle database service
#

function usage()
{
	echo "$0 <dbSID> <start|stop>"
	echo "use: start/stop oracle database service"
}

if [ $# -lt 2 ]; then
	usage;
	exit
fi

dbSID=$1
op=$2

### function region ###

function start()
{
	echo "start database $dbSID"
	export ORACLE_SID=$dbSID # 只有 ORACLE_SID 环境变量设置后, 才可使用 conn / as sysdba 来登录, 否则提示错误
	#lsnrctl start
	sqlplus /nolog <<EOF
	conn / as sysdba
	startup
EOF
	echo "start finished"
}

function stop()
{
	echo "stop database $dbSID"
	export ORACLE_SID=$dbSID
	#lsnrctrl stop
	sqlplus /nolog <<EOF
	conn / as sysdba 
	shutdown immediate
EOF
	echo "stop finished"
}

### function region end ###

case $op in
     "start")
	start
     ;;
     "stop")
	stop
     ;;
     *)
	usage
     ;;
esac


 (3) 启动 OEM
      注意  ORACLE_UNQNAME 是一个重要的环境变量,在启动数据库实例时起作用,它指数据库名。

#!/bin/bash

#
# Author: zhankunlin
# Date: 2011-11-29
# Desc: start/stop OEM of oracle database
#

function usage()
{
	echo "$0 <dbName> <start|stop|status>"
	echo "use: start/stop OEM of oracle database"
}

if [ $# -lt 2 ]; then
	usage;
	exit;
fi

dbname=$1
op=$2

## function region start ##

function oemOp()
{
	dbname=$1 #函数的第一个参数,并不是整个脚本的第一个参数
	op=$2
	echo "$op OEM of database $dbname"
	export ORACLE_UNQNAME=$dbname # 只有 ORACLE_UNQNAME 环境变量设置后, 才可使用 emctl start/stop dbconsole 来启动和停止OEM
	emctl $op dbconsole
}

## function region end ##

oemOp $dbname $op

5. SQLPlus使用

(一) 让SQLPlus支持上下左右按键

Oracle SQLPLus 是不支持上下左右,查阅历史键的,通过 rlwrap 软件可以使sqlplus使用非常方便。

下载安装 rlwrap 软件,然后使用 rlwrap sqlplus 命令启用 sqlplus,使得支持上下左右,delete 等命令。

建议 alias sqlplus='/usr/local/bin/rlwrap sqlplus'

(二) 常用命令

【1】 登陆和连接

(1) Windows SQLPlus连接远程Oracle数据库
    连接字符串写成:192.123.456.2:1521/orcl

(2) Linux SQLPlus 连接远程Oracle数据库
方式一:简易连接,不用进行网络配置(其实就是tnsname.ora文件),但只支持oracle10G以上。
命令【所有都适应】:sqlplus 用户名/密码@ip地址[:端口]/service_name [as sysdba]
命令【本地】: sqlplus zkl/zkl@orcl as sysdba  用户名/密码 @网络服务名 as 身份
示例:sqlplus sys/pwd@ip:1521/test as sysdba 
备注:使用默认1521端口时可省略输入
方式二:进行网络配置 oracle9i和以前的版本
2.1图形化操作:Net Configuration Assistant--> 本地Net服务名配置-->添加->服务名->协议(选tcp)->主机名称->端口->完成。
2.2文本化操作:编辑$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora文件
test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ip或主机名称)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 数据库的服务名称)
    )
  )

参考:http://www.cnblogs.com/zhou__zhou/archive/2010/03/19/sqlplus.html

(3) 常用连接命令
    sqlplus /nolog
    conn zkl/zkl @orcl
    conn sys/zkl @orcl as sysdba
    或者
    export ORACLE_SID=orcl
    sqlplus /nolog
    conn / as sysdba  《必须首先设置环境变量ORACLE_SID》
    conn  zkl/zkl 

【2】用户和权限

(1)创建用户并赋予权限

SQL> CREATE USER "ZKL" IDENTIFIED BY "zkl" //密码是 zkl ,注意密码大小写
SQL> GRANT "CONNECT" TO "ZKL";
SQL> GRANT "RESOURCE" TO "ZKL";
SQL> alter USER "ZKL" IDENTIFIED BY "zkl"  //修改密码
SQL> commit;

//创建用户并指定表空间
create user testserver_user identified by testserver_user
default tablespace test_data
temporary tablespace test_temp;

(1)
使用SYS用户登陆数据库,在OEM中创建了一个新用户zkl,并授予了系统权限SYSDBA。
然后使用该用户登陆数据库(以normal身份和sysdba身份都可登陆),使用该用户创建表和插入数据到表中时,出现了“ORA-01950: 表空间'USERS'中无权限”错误。
到网上找了一下,原来是没有把resource和connect角色赋给用户,使用SYS用户登陆,执行语句grant resource,connect to zkl。解决了问题。 
此外,通过OEM查看用户zkl权限,还有一个 UNLIMITED TABLESPACE 系统权限没有赋给用户,以防万一,这里也赋予一下。
grant resource,connect to zkl;
GRANT UNLIMITED TABLESPACE TO ZKL WITH ADMIN OPTION;
参考:http://youchenglin.iteye.com/blog/631202

Oracle 11g 下这两个角色的权限
  CONNECT角色:  
  CREATE   SESSION   --建立会话   
 
     
  RESOURCE角色:   --是授予开发人员的   
    
  CREATE   CLUSTER   --建立聚簇
  CREATE   INDEXTYPE
  CREATE   OPERATOR   
  CREATE   PROCEDURE   --建立过程   
  CREATE   SEQUENCE   --建立序列   
  CREATE   TABLE   --建表   
  CREATE   TRIGGER   --建立触发器   
  CREATE   TYPE   --建立类型
(2) 
在PL/SQL中,使用zkl用户,以normal身份登陆数据库后,
创建 INDUSTRY 表,并插入数据,commit。

然后在 sqlplus 中,使用zkl用户,以sysdba身份登陆(conn zkl/zkl @zkl as sysdba),查询不到INDUSTRY表,而以普通身份登陆,能查询到(conn zkl/zkl @zkl)。
在C++程序中也可以访问到数据表。

(3) Oracle 11g 中 scott用户(密码tiger)的角色和权限
CONNECT, RESOURCE 角色
UNLIMITED TABLESPACE 系统权限

(4) scott 用户解锁

新装完Oracle10g后,用scott/tiger用户登录,会出现以下错误提示: 
conn scott/tiger 
error:    
oracle10g the account is locked     
oracle10g the password has expired 
原因: 
默认Oracle10g的scott不能登陆。被禁用了。 

解决方法: 
(1)以DBA的身份登录 
      conn sys/password @orcl as sysdba; 
(2)解锁 
      alter user scott account unlock; 
(3)使用scott用户登陆,弹出一个修改密码的对话框,修改密码 
      conn scott/tiger 

SQL> conn sys/sys as sysdba; 
      Connected. 
SQL> alter user scott account unlock; 
      User altered. 
SQL> commit; 
      Commit complete. 
SQL> conn scott/tiger    请输入新密码,并确认后OK 
Password changed 
Connected. 

【3】表和表空间

(1) 创建表

create table TerminalStatus 
(
   TerminalStatusID   NUMBER(6)            not null,
   TerminalStatus     VARCHAR2(10),
   constraint PK_TERMINALSTATUS primary key (TerminalStatusID)
);

(2) 修改表

alter table goods modify ( INVOICE_ID NUMBER(20) NOT NULL );

(3) 查看表结构
SQL> desc industry;

(4) 列出某个用户建立的所有表
SQL> conn sys/zkl @zkl as sysdba
已连接。
SQL> select  OWNER, TABLE_NAME from dba_tables where owner ='ZKL';

(5) 创建表空间 HELLO

CREATE SMALLFILE TABLESPACE "HELLO" DATAFILE '/sdd1/oracle/11gR2_database_X64/oradata/orcl/hello_table_space' SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

表空间已创建。

(6) 在表空间HELLO上创建数据表,
注意数据表是用户拥有的,并不是表空间所拥有的,指定表空间只是指定数据表中数据对应的存储文件的位置,同一个用户创建的表的表名必须唯一。

语句:create table Student ( StuID   varchar2(10) primary key, StuName varchar2(30) not null ) tablespace HELLO;

(7) 查询表空间 HELLO 上的所有表

SQL>  select table_name, tablespace_name from dba_tables where TABLESPACE_NAME = 'HELLO';

TABLE_NAME       TABLESPACE_NAME
------------------------------ ------------------------------
STUDENT       HELLO

【4】其它命令

(1) edit 命令保存缓存命令


使用edit命令可以将缓冲区中保存的所有历史命令写入文件中,若配置了 EDITOR 环境变量为vi,则会自动调用vi编辑器。 export EDITOR=vi

SQL> edit


(2) 执行本地SQL脚本

登陆进入 sqlplus 后,使用如下命令:

@文件路径

SQL> @/usr/test.sql




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值