??xml version="1.0" encoding="utf-8" standalone="yes"?>
׃我们l常做不同数据库的导出导入时遇到的服务器的字W集不同Q导致我们原有的无法正常导入工作Q?br />
q时需要我们做数据库字W集的更改工作,
字符集是在安装数据库旉定的,一旦数据库创徏之后Q数据库的字W集是不能改变的Q如果要改变数据库的字符集, 只有重新创徏数据库?br />
但通常也可以在特定的条件下通过一些其他途径来完成字W集的{换(q里强烈创徏数据库时p考虑好字W集Q?br />
单字?>单字?br />
多字?>多字?br />
且是子集到超集时Q可以用alter database CHARACTER set 新的字符?
通常对于单字节向多字节{换和非子集到集转换旉用exp/imp+internal_use的方?br />
q里只介lWE8ISO8859P1Q?gt;ZHS16GBK的步骤方?
查当前的字符集ؓWE8ISO8859P1Q?br />
SQL> set wrap off
SQL> select * from v$nls_parameters;
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET WE8ISO8859P1
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected.
SQL>
数据库启动到RESTRICTED模式下做字符集更改:
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字W集Q新字符集必Mؓ旧字W集的超集,q时我们可以跌集的检查做更改Q?/p>
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL> select * from v$nls_parameters;
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected.
重启查是否更改完成:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> select * from v$nls_parameters;
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
---------------------------------------------------------------- ---------------
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI
NLS_DUAL_CURRENCY $
NLS_NCHAR_CHARACTERSET UTF8
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
19 rows selected.
SQL>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1465644
错误提示1Q?br />
Message file RMAN<lang>.msb not found
Verify that ORACLE_HOME is set properly
。。。。。?/p>
错误原因Q?br /> 自动执行的不能够识别相应的命令,需要在自动备䆾脚本中显式的声明oracle的环境变量?/p>
错误提示2Q?br />
standard in must be a tty
。。。。。?/p>
错误原因Q?br /> 不能在cron使用su或者管道等操作Q必dsu命oUd到相关的shell脚本中?/p>
错误提示3Q?br />
Argument Value Description
-----------------------------------------------------------------------------
target quoted-string connect-string for target database
catalog quoted-string connect-string for recovery catalog
nocatalog none if specified, then no recovery catalog
cmdfile quoted-string name of input command file
log quoted-string name of output message log file
trace quoted-string name of output debugging message log file
append none if specified, log is opened in append mode
debug optional-args activate debugging
msgno none show RMAN-nnnn prefix for all messages
send quoted-string send a command to the media manager
pipe string building block for pipe names
timeout integer number of seconds to wait for pipe input
checksyntax none check the command file for syntax errors
-----------------------------------------------------------------------------
Both single and double quotes (' or ") are accepted for a quoted-string.
Quotes are not required unless the string contains embedded white-space.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00556: could not open CMDFILE "backup_ar.rcv"
。。。。。?/p>
错误原因Q?br />
需要在cmdfile中指明绝对\径,不能因ؓshell脚本调用的cmdfile是在同一个目录下可以直接用文件名
或者直接?/
正确CZ代码Q?/p>
1?cron文g
0 12,18 * * * /home/oracle/bak_sh/backup_ar.sh
#表示每天12,18点对数据库归日臌行全备䆾
2、入口shell文gQ文件名Qbackup_ar.sh
export ORACLE_HOME=/home/u01/app/oracle/oracle/product/10.2.0/db_1
export ORACLE_SID=test
export LANG=en_US.UTF-8
/home/u01/app/oracle/oracle/product/10.2.0/db_1/bin/rman cmdfile = backup_ar.rcv
3、rman备䆾脚本
connect target /
connect catalog rman/rman@rman
run{
allocate channel d1 device type disk;
sql 'alter system archive log current';
backup archivelog all delete input
format '/opt/rmanback/full_%u_%p_%c.ac' filesperset = 3;
release channel d1;
}
学习入口Q来自论坛)Q?br />
1、两U办?br />
一是用root的crontabQ?/2 * * * * a.sh --》su - oracle -c a.sh
一是在a.sh里加上oracle的环境?/p>
2、我们做的cron试Q?br />
实例Q?br />
Vi /etc/cron.minly/new.sh
内容Q?br />
Su – oracle –c “/home/oracle/mginfo.sh”
Vi /home/oracle/mginfo.sh
内容Q?br />
Exp mginfotech/mginfotech file=mginfotech.dmp log=mginfotech.log
Vi /etc/crontab
内容Q?br />
59 23 * * * root run-parts /etc/cron.minly
每晚23Q?9分钟执行
cron中无法读取环境变?br />
在shell中显C地export环境变量
export ORACLE_HOME=/opt/ora9/product/9.2
export ORACLE_SID=oracle
export NLS_LANG=xxxxx
我们计划让数据库在晚?23 点做 export 导出备䆾Q在凌晨 2 点将备䆾文g拯到磁带上Q在凌晨 4 点将备䆾文g拯到另一?UNIX 机器上,为此我们可进行如下操作:
一、导出数据库
export 命o数据库中的数据备䆾成一个二q制文gQ它通常有三U模式:用户模式、表模式和整个数据库模式。本文拟采用用户模式Q备份之前,应先建立一个备份目录,以容U_份文Ӟ比如可徏一?/backup 目录。接着我们可在 UNIX ?Oracle 目录下(也可以是其它目录Q分别徏立两个文?ora ?backup Q?tar ?backup 。需要说明的是,前一个文仉要对 Oracle 的参数进行初始化Qؓ了方便v见,我们不妨初始化命o攑ֈ一个文件中Q文件名姑且定ؓ ora ?env Q,再由W一个文件调用它?
1. ora ?env 文g?Oracle 的参数进行初始化Q其内容如下Q?
ORACLE ?HOME= Q?ORACLE ?HOME;export ORACLE ?HOME
ORACLE ?SID=ora73;export ORACLE ?SID
ORACLE ?TERM=sun;export ORACLE ?TERM
LD ?LIBRARY ?PATH= Q?ORACLE ?HOME/lib;export LD ?LIBRARY ?PATH
ORA ?NLS32= Q?ORACLE ?HOME/ocommon/nls/admin/data;export ORA ?NLS
PATH=.:/usr/ccs/bin:/usr/ucb: Q?ORACLE ?HOME/bin: Q?PATH;export PATH
DISPLAY=host1:0;export DISPLAY
NLS ?LANG=american ?america.zhs16cgb231280;export NLS ?LANG
2. ora ?backup 文gҎ(gu)据库?export 导出Q导出的文g名可以Q意定Q本文定为字?xx 加当天日期,卛_如当天日期是 12 ?10 P则导出的文g名ؓ xx1210.dmp Q以区别于其它日期的备䆾文g?
ora ?backup 文g内容Q?
./oracle/ora ?env
Q初始化 Oracle 数据?
rq= ′ date Q?#8243;Q?m Q?d ″ ′
Q把当天日期赋予变量 rq
rm /backup/ ?
Q?清空 /backup 目录
exp test/test file=/backup/xx Q?rq.dmp log=/backup/xx Q?rq.log
本命令用于在Q提C符下,导出 test 用户的数据(其口令亦?test Q,导出文g及日志均攑֜ /backup 目录下?
二、磁带备?
tar ?backup 文g用 export 命o导出的数据文件拷贝到带上?
tar ?backup 文g内容Q?
tar rvf /dev/rmt/0n/backup/ ?
本命令可?/backup 目录下当天生的文g备䆾到磁带上。本文g中, tar 命o使用了三个参敎ͼ其中 r 选项表示向磁带上拷入文g而不破坏带原来内容Q?v 选项表示在拷贝过E中昄文g信息Q?f 选项后面加上带讑֤名,指定文g向何处拷贝, n 选项表示带Z倒带?/dev/rmt/0 表示 UNIX LW一个磁带驱动器Q同理, /dev/rmt/1 则表C?UNIX LW二个磁带驱动器Q依此类推?
ora ?env ?ora ?backup ?tar ?backup 文g~写完成后,分别使用下述命oQ?
chmod 755 ora ?env
chmod 755 ora ?backup
chmod 755 tar ?backup
q样Q三个文件就都变成了可执行文件?/p>
三、异地备?
我们知道Q通常可用 FTP 命o在两C机间传输数据Q但一般是通过交互方式实现的,即需要手工输入目标主机的 IP 地址、用户名、口令等。显Ӟq不W合自动备䆾的要求。所q的是,我们可以通过~写一?.netrc 的文件来辑ֈ目标。这一文g必须命名?.netrc Q且必须存放在启?FTP 命o的机器上的用h册目录中Q该文g的权限应止l内或其它用戯行读讉K。这P当用户?FTP 命o的时候,pȝ会在该用户的注册目录中L .netrc 文gQ如果能够寻扑ֈQ将会首先执行该文gQ否则,会交互式地提C用戯入用户名、口令等?
在?FTP 命o之前Q应先在另一C备䆾用的 UNIX 机器上徏一目录Q以容纳备䆾文gQ本文徏的目录是 /pub 。需要指出的是,Z加快备䆾速度Q两CZ间的传输速率应尽可能的高Q最好位于同一局域网上?
.netrc 文g内容如下Q?
machine host2
Q?host2 Z备䆾用的L?
login oracle
Q?oracle 为备份主Z的一个用?
password oracle
Q?oracle 用户的口令ؓ oracle
macdef init
Q定义一个名?init 的宏Q它?yu)在自动注册q程的最后被执行
bin
Q文件的传输方式设ؓ二进?
lcd /backup
Q?q入本地工作目录 /backup
cd /pub
Q?q入备䆾L目录 /pub
mput
Q??/backup 目录下的所有文件传输至备䆾L
bye
Q退?FTP 会话q程
.netrc 文g~写完成后,使用下述命oQ?
chmod 600 .netrc
q样Q?.netrc 文g只能被该用h讉K?
四、启动备份进E?
Cron 是一个永久进E,它由 /etc/rc.local 启动执行?Cron ?/var/spool/cron/crontabs/ 目录中的文Ӟ扑ֈ所要执行的d和执行Q务的旉?
Crontab 文g的每一行由六个?(minutes ?hours ?day of month ?month ?day of week ?command) l成Q域之间用空格或 Tab 分开Q其中:
minutes Q分钟域Q值的范围?0 ?59
hours Q小时域Q值的范围?0 ?23
day of month Q日期,值的范围?1 ?31
month Q月份,值的范围?1 ?12
day of week Q星期,值的范围?0 ?6 Q星期日gؓ 0
command Q所要运行的命o
如果一个域是,表明命o可以在该域所有可能的取D围内执行?
如果一个域是由q字W隔开的两个数字,表明命o可以在两个数字之间的范围内执行(包括两个数字本nQ?
如果一个域是由逗号隔开的一pd值组成的Q表明命令可以在q些值组成的范围内执行?
如果日期域和星期域都有|则这两个域都有效?
现在Q我们编写一个文Ӟ用以启动自动备䆾q程。值得注意的是Q该文g只能?Oracle 用户名下?crontab Q?e 命o来编辑,否则不会被定时执行Q文件名定ؓ Oracle Q文件将攑֜ /var/spool/cron/crontabs 目录下。编辑完成后Q可以在 Oracle 的$提示W下Q用 crontab Q?l 命o来查看?
Oracle 文g内容Q?
0 23 ???/oracle/ora ?backup
Q?每天 23 点对数据库执行备?
0 2 ???/oracle/tar ?backup
Q?每天 2 点将文g备䆾到磁带上
0 4 ???ftp Q?i host2
Q?每天 4 点将文g备䆾到另一CZ
l过以上的操作后Q系l每天晚上将自动产生一个备份,q且自动备份文件分别拷贝到带上和另一CZ。系l管理员需要做的是Q隔几天换一盘磁带(更换带的周期取决于备䆾文g的大和带的容量)和清理备份目录。这P他们可以从备䆾数据的繁琐中解脱出来Q去做其它更有意义的工作。而数据库既实C带备䆾Q又实现了异地备份,相应的安全性也大大提高了?/p>
本文转自:http://www.host01.com/article/database/00060004/065422285427604.htm