Ubuntu10.4安装oracle 11gR2

1、安装Ubuntu并升级至最新
安装省略
升级:
sudo su -(-必须的,重新启动一个新回话,主要就是环境变量)
apt-get update
apt-get dist-upgrade
reboot—-完成后重启

2、安装必要的包(不知道在deb中是否叫做包)
sudo su –
apt-get install build-essential libaio1 gawk ksh libmotif3 alien libtool lsb-rpm

3、建立一些链接
sudo su –
ln -sf bash /bin/sh
ln -s /usr/bin/awk /bin/awk
ln -s /usr/bin/rpm /bin/rpm
ln -s /usr/bin/basename /bin/basename
mkdir /etc/rc.d
for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done

4、创建组、用户和相关文件夹
addgroup oinstall
addgroup dba
addgroup nobody
usermod -g nobody nobody
useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle
passwd -l oracle
mkdir /home/oracle
chown -R oracle:dba /home/oracle
mkdir -p /u01/oracle
chown -R oracle:dba /u01

5、相关参数修改
1)/etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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 = 1048586
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304

2)/etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535

3)/etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so

4)执行sysctl -p,使得刚刚修改的参数生效

6、修改环境变量/etc/profile文件中添加
ORACLE_SID=orcl
ORACLE_BASE=/u01
ORACLE_HOME=/u01/oracle
NLS_LANG=AMERICAN_AMERICA.UTF8
PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_BASE ORACLE_SID ORACLE_HOME PATH NLS_LANG

7、oracle11g安装文件准备
unzip解压
chown -R oracle:dba database(解压的安装文件夹)

8、开始安装
sudo su –
xhost +127.0.0.1(或者使用oracle图形化界面登录安装)
su – oracle
export LANG=en_US(采用英文界面安装,中文乱码,因为jdk问题,不想配置)
./runInstaller -ignoreSysPrereqs(忽略安装时的版本检查)

9、安装过程中
检查的时候,会有错误和警告,全部忽略(不是oracle支持的版本,没有办法)
注意选择数据库编码为utf8,不然会出现乱码(因为在环境变量中设置了数据库客户端编码为utf8)
还有选择地区等信息(建议先安装数据库软件,然后使用dbca创建数据库)
信息比较多,如果不能选择清楚,在网上找些资料,配置起中文正常显示(这样很多变量不用人工去选择)

10、安装结束后执行提示脚本
提示:使用root用户权限执行

11、总体感觉:
因为Ubuntu不是oracle官方支持的linux版本,所以在安装过程中会有很多多于的步骤,如有些是采用链接方式进行的;还在版本检查被强行忽略,安装检查错误提示被忽略,还有和jdk不一致产生乱码问题等。因为在安装过程中忽略了很多警告和错误,到底会不会产生什么影响现在还不知道,只是做了简单的测试工作正常。个人感觉,Ubuntu不是很适合做oracle服务器,至少是在oracle官方没有正式支持前不是很时候,很多东西都是靠网友总结出来的。
我对比了下上次在centos上安装oracle的过程,感觉这里有些东西就是为了模仿redhat的操作系统而执行的操作,而且有些就算是模仿了,也还是没有redhat下面好,如环境变量的地方,在Ubuntu中是全局的(所有用户都有效),而redhat中是oracle单个用户(感觉更安全),当然我linux功底有限,也许说了很多错话。
CentOs 5安装oracle 11g R2数据库

创建Logical Standby

1、Create a Physical Standby Database
具体见linux下使用rman配置standby data guard(11gR2版)

2、Stop Redo Apply on the Physical Standby Database
在primary database上执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

3、修改primary上的参数文件并建立LogMiner字典

LOG_ARCHIVE_DEST_1=
'LOCATION=/archive/orcl/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_3=
'LOCATION=/archive/standby/orcl/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
--LOG_ARCHIVE_DEST_2未作修改没有列出

执行EXECUTE DBMS_LOGSTDBY.BUILD;

4、Physical Standby Database Convert to a Logical Standby Database(standby上执行)
ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name;

5、修改Logical standby database参数

LOG_ARCHIVE_DEST_1=
'LOCATION=/archive/orcl/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2=
'SERVICE=orcl ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_3=
'LOCATION=/archive/standby/xff/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=xff'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE

6、重启logical standby database
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;

7、添加standby logfile文件
具体见oracle之data guard(2)——物理standby和primary切换中的添加standby redo部分

8、开启和关闭应用
alter database start logical standby apply immediate;–开启
alter database recover managed standby database cancel;–关闭

9、相关事宜说明
主要参考oracle 的online documentation 11g release 2文档中的data guard部分
注意11g这部分中和10g的不同,多了些新特新,不用新建密码文件

oracle之data guard(2)——物理standby和primary切换

一、primary库上操作
1、查看primary库转换状态
select switchover_status from v$database
如果是TO STANDBY可以直接进入步骤3
如果是SESSIONS ACTIVE进入步骤2

2、强制把primary设置为standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
如果更加强制性,则使用
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN NOWAIT;

3、正常方式进入standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

4、重启数据库,置于mount状态
5、再次查看witchover_status状态
如果为TO PRIMARY ,表示primary切换成standby成功,如果不是请查看配置文件

二、在原standb库上配置
1、查看witchover_status状态
select switchover_status from v$database
如果是TO PRIMARY正常
如果是SESSIONS ACTIVE在2的命令后面加上 WITH SESSION SHUTDOWN ( nowait)

2、standby库切换为primary库
alter database commit to switchover to primary;

3、关闭再打开数据库
shutdown immediate;
startup;

三、测试
在现在的primary库上切换日志,在standby上查看
主库:alter system switch logfile;select name from v$archived_log;
备份库: select name from v$archived_log;
如果两者结果一致,表示切换成功

四、从MAXIMUM PERFORMANCE到MAXIMUM PROTECTION的切换
1、添加standby redo
数量:(maximum number of logfiles for each thread + 1) * maximum number of threads
alter database add standby logfile thread 1 ‘C:\oracle\product\10.2.0\oradata\orcl\redo04.log’ size 50m;
note:和redo log等大,数量每个thread比redo log多一个,最好standby和primary都添加,因为要转换

2、关闭数据库,置于mount状态
log_archive_dest_2修改为
alter system set log_archive_dest_2=’service=orcl lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl’;
主要是: lgwr sync affirm

3、设置为maximize protection
alter database set standby database to maximize protection;

4、open数据库并测试
测试 主要是通过v$archived_log视图实现
使用select protection_mode from v$database;查看数据库保护状态

五、MAXIMUM PROTECTION模式下primary、standby 库的相互切换
1、在primary库上配置
1)关闭除本操作连接外的所有数据库连接
2)alter database commit to switchover to physical standby;
3)select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;

如上图表示成功

2、在standby上操作
1)alter database commit to switchover to physical standby;
2)ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
3)shutdown immedate;startup mount;
4)alter system set log_archive_dest_2=’service=xff lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=xff’;(修改为同步传输)
5)alter database open;

如上图表示成功

oracle之data guard(1)——物理standby建立

一、primary数据库配置及相关操作
1、数据库启动强制归档模式
alter database force logging;
2、确保数据库是archivelog模式

--archive log list查看是否已经归档
--如果不是使用下面语句进行设置
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

3、创建standby 数据库控制文件
alter database create standby controlfile as ‘c:\orcl.ctl’;
4、修改初始化参数文件,并重新创建spfile

*.db_name='orcl'
db_unique_name='orcl'
log_archive_config='dg_config=(orcl,xff)'
*.log_archive_dest_1='location=C:\archive\orcl\ valid_for=(all_logfiles,all_roles) db_unique_name=orcl'
*.log_archive_dest_2='service=xff lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=xff'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
fal_server=xff
fal_client=orcl
db_file_name_convert='c:\xff\data\','C:\oracle\product\10.2.0\oradata\orcl'
log_file_name_convert='c:\xff\data\','C:\oracle\product\10.2.0\oradata\orcl'
standby_file_management=auto

5、配置listener 及net service names(我建议使用net manager)
最好 执行lsnrctl stop lsnrctl start重新启动监听程序
6、关闭数据库并备份。

二、Standby数据库配置及相关操作
1、创建进程和密码文件(注意密码要和primary中的sys的密码一致)
oradim -new -sid xff -intpwd oracle(密码为oracle)(当然也可以把primar中的密码文件改名拷贝过来)
2、创建文件夹,并拷贝备份的归档文件和数据库文件
3、修改初始化参数文件(使用刚刚修改的primary中的参数文件进行修改)

*.control_files='c:\xff\data\xff.ctl'
*.db_name='orcl'
db_unique_name='xff'
log_archive_config='dg_config=(orcl,xff)'
*.log_archive_dest_1='location=C:\archive\xff\ valid_for=(all_logfiles,all_roles) db_unique_name=xff'
*.log_archive_dest_2='service=orcl lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
fal_server=orcl
fal_client=xff
db_file_name_convert='C:\oracle\product\10.2.0\oradata\orcl','c:\xff\data\'
log_file_name_convert='C:\oracle\product\10.2.0\oradata\orcl','c:\xff\data\'
standby_file_management=auto
--注意修改一些dump文件路径

4、启动数据库到mount状态
startup mount;
5、启动redo 应用
alter database recover managed standby database disconnect from session;(redo apply)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;(real-time apply)
三、检查配置结果
1、首先连接到primary 数据库
alter system switch logfile;
select name from v$archived_log;
2、连接到standby数据库
select name from v$archived_log;
如果和primary一致,再重复1、2操作,并且还是保持一致,说明配置成功
3、暂停redo应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
4、执行read only状态
执行3只是暂时redo 应用,并不是停止Standby 数据库,standby 仍会保持接收只不过不会再应用
接收到的归档,直到你再次启动redo 应用为。
在暂停redo应用的状态中可以把数据库至于read only状态用于查询
alter database open read only;(在11g中没有这个限制)
5、解决redo 不能被读取或者不能正常open
把standby数据库至于mount状态,执行
recover standby database until cancel;
选择cancel
再alter database open确保数据库中的所有文件scn号一致
然后添加临时文件
alter tablespace temp add tempfile ‘c:\xff\data\tm.dbf’ size 5m reuse;
确保数据库可以进行一般正常的操作
虚拟机中的pfile配置文件

oracle数据库复制

oracle数据库复制就是对当前的库进行拷贝(使用拷贝库用于测试、还原操作等)
1、本实验规划
使用的是同一个数据库服务器上做的拷贝试验
原数据库oracle_sid=orcl,准备新建数据库oracle_sid=xff,新建的数据库的文件放置符合ofm标准,也就是说,数据文件、控制文件、联机归档日志文件放置oradata/xff下面,一些日志记录文件放置在admin/xff下

2、用户管理方式复制数据库:
1)新建相关文件夹mkdir(省略)
2)准备xff的pfile文件
在orcl数据库中执行create pfile=’c:\orclpfile.txt’ from spfile;
修改orclpfile.txt文件,使用替换法,把所有的orcl替换成xff(替换的时候大致看下哦)
3)准备xff的控制文件
在orcl数据库中执行alter database backup controlfile to trace as ‘c:\b.txt’;
选择Set #2. RESETLOGS case部分,除掉其中的注释,把reuse修改为set处理后的大概结果如下:

CREATE CONTROLFILE set DATABASE "XFF" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO01.LOG'  SIZE 50M,
  GROUP 2 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO02.LOG'  SIZE 50M,
  GROUP 3 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO03.LOG'  SIZE 50M
DATAFILE
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\UNDOTBS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSAUX01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\USERS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\XFF01.DBF'
CHARACTER SET AL32UTF8
;

4)alter database begin backup;
开始把orcl中的数据库文件,复制到xff的文件夹中
alter database end backup;
5)在dos下执行oradim -new -sid xff -intpwd oracle(建立oracle_sid=xff,并创建用户名为sys,密码为oracle的秘密文件)(删除oradim -DELETE -SID xff )
6)在dos下执行set oracle_sid=xff,因为没有配置tns的相信,手工设置oracle_sid
7)sqlplus sys/oracle as sysdba;连接到xff数据库
8)使用startup pfile=’c:\orclpfile.txt’ nomount 把xff数据库至于nomount状态
9)使用刚刚(3)中准备的创建控制文件的脚步,创建控制文件
10)使用在xff的sqlplus 环境下使用set logsource ‘path’指定归档日志位置(path为归档日志路径),
然后使用recover database using backup controlfile until cancel;
按照提示看看对应的文件是否存在,如果不存在查找下硬盘上是否有该文件,如果都不存在,尝试着使用联机日志文件恢复
11)使用alter database open resetlogs 打开数据库
12)建立临时文件
ALTER TABLESPACE TEMP ADD TEMPFILE ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\xff\TEMP01.DBF’
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
13)配置listener和tns,数据库复制工作完成

3、rman复制数据库
1)备份数据库rman
backup database include current controlfile plus archivelog format=’c:\%U.bak’;
2)创建spfile文件
create spfile=’%oracle_home%\database\spfilexff.ora’ from pfile=’c:\b.txt’;
3)登录xff把数据库设置到nomount模式
4)

run{
set newname for datafile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF';
set newname for datafile 2 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\undotbs01.DBF';
set newname for datafile 3 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\sysaux01.DBF';
set newname for datafile 4 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\users01.DBF';
set newname for datafile 5 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\xff01.DBF';
set newname for tempfile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\\TE.DBF'; 
duplicate target database to xff logfile
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo01.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo02.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo03.log' size 10m;
}
--note:1、需要加上temp表空间的转换,不然会报错
--2、在运行run之前,要确保在xff中的除本rman之外的所有用户均以退出

其他与用户复制oracle操作一致。和用户操作比起来,这个不用手工创建控制文件,只要创建spfile或者pfile(注意默认路径和名称)就可以了,其他的均有rman帮我们搞定