as4+ora9204

 

3、        vi /etc/pam.d/login文件,在 auth required /lib/security/pam_securetty.so 前面加一个#号,注释掉就行了。

5、要做到单网卡多ip:  1Linux网络设备配置文件存放在/etc/sysconfig/network-scripts里面,对于以太网的第一个网络设备,配置文件名一般为 ifcfg-eth0 如果需要为第一个网络设备绑定多一个IP地址,只需要在/etc/sysconfig/network-scripts目录里面创建一个名为ifcfg-eth0:0的文件,内容样例为:

 

#

DEVICE="eth0:0"

IPADDR="211.100.10.119"

NETMASK="255.255.255.0"

ONBOOT="yes"

 

 

其中的DEVICE为设备的名称,IPADDR为此设备的IP地址,NETMASK为子网掩码,ONBOOT表示在系统启动时自动启动。如果需要再绑定多一个IP地址,只需要把文件名和文件内的DEVICE中的eth0:x加一即可。LINUX最多可以支持255IP别名。

 

2、首先需要给一个网卡绑定多个ip,方法如下:

 

 

#

#ifconfig eth0:0 202.198.131. netmask 255.255.255.0

#ifconfig eth0:1 202.198.131. netmask 255.255.255.0

 

以此类推。

 

然后,在/etc/sysconfig/network-scripts/目录下建立名为ifcfg-eth0:0ifcfg-eth0:1文件

 

内容可以直接cp ifcfg-eth0 ifcfg-eth0:0建立就可以,然后修改里面对应的ip地址。

 

6、中文显示乱码linux字符集设置问题:

1.vi /etc/sysconfig/i18n 将内容改为

LANG="zh_CN.GB18030" (试一下en_us.iso885915

LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"

SYSFONT="lat0-sun16"

这样中文在SSH,telnet终端就可以正常显示了。

 

2.安安装LINUX的时候选择的是中文字,但是使用的时候出现了乱码解决方法是在命令提示下输入

export LANG=C

 

3.export LC_ALL=zh_CN.GBK

export LANG=zh_CN.GBK

注:用telnet的一个用户登陆后不能正确显示中文,只要用export LANG=’zh_CN.gb18030’就能正确显示了,或更改该用户中的文件.bash_profile 加入export LANG=’zh_CN.gb18030’就可以了

 

7、如何了解系统里面分区情况:用命令:df –Th; 如果向查看每个目录的大小使用du du /* 根目录下的所有文件夹

8运行命令locale能看语言环境, Locale –a查看系统所支持的语言信息

  设置lang的变量 lang=zh_cn.gb2312 在运行date看到显示的是中文的格式

  在改回到英语lang=en_us.utf-8运行date

9、查看已安装的软件:1、列出已安装的所有软件包:rpm  -qa

 2、查找指下软件包的名称:rpm –qa |grep ‘telnet’

  3、查找某个文件属于哪个软件包:rpm –qf  filename :filename 为准备查找的文件名

4、查找软件包的功能:rpm –qi packagename :packagename 为软件包名

 

10rpm 安装:1rpm –i *.rpm   安装*.rpm

               2rpm –iv   *.rpm   安装*.rpm ,并显示安装信息

3rpm –ivh   *.rpm   安装*.rpm ,并显示安装信息和进度

 

11、重启xinetd服务:service xinetd restart

 

12、在as5中的telnet无法进入的问题提示Unencrypted connection refused. Goodbye.

其实出现这种问题是因为无意间启用了一个叫ekrb5-telnet的进程.它是一个需要加密的telnet服务.把这个启动当然要加密了.也就出现了上面的没有输入信息的错误提示(不加密的数据当然直接DROP,也就没有输入了).
解决方法:
编辑/etc/xinetd.d/ekrb5-telnet文件,disable=no改成disable=yes.重启xinetd服务,问题解决!

 

13、改变文件的所有者和组:chown  new_ownername filename

                           Chgrp  new_groupname   filename

14、手工更新locate 数据库:以root 用户登陆后执行:/etc/cron.daily/updatedb.cron

15、显示当前时间date,clock,cal;改变当前时区:timeconfig;改变日期和时间:system-config-date

 

16、查看swap分区:/sbin/swapon –s

17find 的命令使用:$ find startdirectory options matchcriteria [actionoptions] (find 开始目录  -name ‘test*’) 

如果您知道文件的名称、或者甚至名称的一部分,但不知道它所处的目录,您可以这么做:

$ find .-name 'test*'   //开始目录为 ‘.’意思为当前目录 
./test
./jdevhome/mywork/EmpWS/EmpBC4J/test

与经典的 UNIX 系统不同,在 Linux 中不需要在末尾添加 -print 操作,因为如果没有指定其它的操作选项,就将假定执行这个操作。在目录起始位置上的一个点 ( . ) 将使 find 在您的工作目录中开始搜索。两个点, ..,在父目录中开始搜索。您可以在任意目录下开始搜索。

注意,您可以使用通配符作为搜索准则的一部分(只要用单引号将整个项目括起来)。

 

18、查看linux版本号:uname -r 或用uname –rm
 

19、有关telnet的设置:

1、设置telnet端口

# vi /etc/services

进入编辑模式后查找telnet(vi编辑方式下输入/telnet)

会找到如下内容:

telnet 23/tcp

telnet 23/udp

23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。

 

2Telnet服务限制

telnet是明文传送口令和数据的,如果你对其默认的设置不满意,有必要对其服务范围进行限制。假设你的主机的ip210.45.160.17,就可以按如下方式设置了,^_^!

 

#vi /etc/xinetd.d/telnet

service telnet

{

disable = no #激活 telnet 服务,no

bind = 210.45.160.17 #your ip

only_from = 210.45.0.0/16 #只允许 210.45.0.0 ~ 210.45.255.255 这个网段进入

only_from = .edu.cn #只有教育网才能进入!

no_access = 210.45.160.{115,116} #这两个ip不可登陆

access_times= 8:00-12:00 20:00-23:59 # 每天只有这两个时间段开放服务

......

}

 

3Telnet root用户的登入

telnet 不是很安全,默认的情况之下不允许 root telnet 进入 Linux 主机 。若要允许root用户登入,可用下列方法:

[root @root]# vi /etc/pam.d/login

#auth required pam_securetty.so #将这一行加上注释!

[root@wljs root]# mv /etc/securetty /etc/securetty.bak

这样, root 就可以直接进入 Linux 主机了。不过,建议不要这样做。也可以在普通用户进入后,切换到root用户,拥有root的权限。

 

20关于SSH服务
1).
ssh登入系统实行白名单(允许某些人)和黑名单(拒绝某些人)过滤
如果想只允许某些人用ssh登入系统,而其他人都不可以登入,我们可以称之为白名单。则编辑/etc/ssh/sshd_config,加入这条:

AllowUsers user1 user2 user3 ……


如果想限制某些人不可以ssh登入系统,而其他人都可以登入,我们可以称之为黑名单。同样编辑/etc/ssh/sshd_conf,加入这条:

DenyUsers user1 user2 user3……


如果白名单黑名单同时使用,则以黑名单优先,比如如果同时加入zmt这个用户,那么zmt还是会被服务器拒绝登入的。

注:/etc/ssh下面有sshd_confssh_conf2个配置文件,sshd指的是系统本身的ssh服务,也就是让外面客户端登入本机的;而ssh则是ssh客户端,用来登入别的sshd服务的。

2).ssh客户端格式:
一般我们在Linux下直接用 ssh hostname/ipadder 来登入别的服务器,然后是不需要输入用户名的,用户名为客户机本身的用户身份,端口是22。如果想要指定用户名和端口,可以使用下面命令,用 ssh -?可以查询详细的指令。

$ssh username@hostname -p port

 

21、关于Linux下截屏
1)Xwindow
下截屏:
图形界面下有2中截屏方式,一种是直接按Prt Sc SysRq键,会弹出一个直接保存当前桌面的对话框,选择路径保存即可,格式为png

直接按Prt Sc SysRq键: 截取当前整个桌面
Alt + Prt Sc SysRq
键:截取当前程序窗口,只获取当前激活显示的程序窗口。



另一种是用Gimp软件,打开Gimp之后,文件 >> 获取 >>屏幕抓图即可打开截屏菜单,也有2个选项:单个窗口和整个屏幕。并有延时设置,延时是为了你选取抓取按钮后,最小化Gimp本身程序,然后选择需要抓取的屏幕等操作的,以便正确截取屏幕。
截屏后的画面会直接打开Gimp操作界面,可以编辑,也可以直接保存。

2).
文本界面下截屏
文本界面下截屏用script命令,其实我们可以把script看成是一个录制过程,因为它可以无限录制你的操作过程(当然我也没有试过录制超长过程),直到你按“ctrl + D”键为止,但是它截取后的过程与你操作时候一模一样,连文字颜色都一样的,步骤如下:

先输入 script filefile为保存操作过程的文件
然后开始操作,直到按 ctrl + D键,截屏终止
cat 命令查看刚才的文件。

 

22Linux默认启动模式的更改

开始安装的Red Hat 9.0太旧了,今天把它卸载了,重新安装了Red Hat Enterprise Linux AS4.0,也顺便把X-Windows安装上了以防万一。安装完之后,就有个设置向导,根WindowsXP一样,之后就进入图形桌面。
但是我们一般安装AS,肯定是学习或者做服务器用,那么一般肯定是用文本模式了,怎么让他启动之后自动进入文本模式呢?我们可以修改/etc/inittab 这个文件。

图形模式下如果你安装了文本编辑器,找到这个文件直接双击就可以打开编辑了;文本模式下就直接打#vi /etc/inittab
打开后找到这段代码:  id:5:initdefault:
5修改成3,然后保存退出就可以,下次重启后就自动进入文本模式了。

 

23Linux访问NTFS分区使用比较方便的支持软件,叫ntfs-3g,安装

1).安装ntfs-3g
首先需要下载安装fuse,地址为:http://sourceforge.net/projects/fuse。下载最新版本 fuse-2.7.3.tar.gz,然后安装:

[root@sounix01 ~]#tar zxf fuse-2.7.3.tar.gz
[root@sounix01 ~]#cd fuse-2.7.3
[root@sounix01 fuse-2.7.3]#./configure
[root@sounix01 fuse-2.7.3]#make
[root@sounix01 fuse-2.7.3]#make install



然后下载ntfs-3g源码,下载地址为:http://www.ntfs-3g.org/,最新版本应该是ntfs-3g-1.2216.tgz

[root@sounix01 ~]#wget http://www.ntfs-3g.org/ntfs-3g-1.2216.tgz
[root@sounix01 ~]#tar zxf ntfs-3g-1.2216.tgz
[root@sounix01 ~]#cd ntfs-3g-1.2216
[root@sounix01 ntfs-3g-1.2216]#./configure
[root@sounix01 ntfs-3g-1.2216]#make
[root@sounix01 ntfs-3g-1.2216]#make install


安装完成之后会生成命令/bin/ntfs-3g,安装就完成了。

可用命令。使用比较简单,用

[root@sounix01 ~]#mount -t ntfs-3g /dev/hda5 /d

或者

[root@sounix01 ~]#ntfs-3g /dev/hda5 /d

2个命令都可以挂载。挂载之后默认的权限是777,可以任意读写,并且对中文支持非常好,简直就是完美的支持软件。

3).
自动挂载:
如何让系统开机自动挂载/dev/hda5/d呢?

[root@sounix01 ~]#vi /etc/fstab
加 入:/dev/sda5           /d             ntfs-3g        defaults        0 0

 

 24Windows访问Linux分区用软件ext2ifs,感觉这个软件非常不错,确切的说应该是一款ext2的驱动,当然也是支持ext3,而且支持中文、读写、可修改设置挂在盘符等,算是比较完美的一个ext2驱动了。
 
25linux查看硬盘空间: df, mount 不需参数
su
显示当前目录的使用情况,每个子目录使用空间的大小.
 su  -s
只显示当前目录总的已使用空间
26Linux系统在Oracle用户下可以用ps -ef|grep ora查看,是否有Oracle的进程,如果有,大多数情况说明启动了,为了更进一步验证,可以登录一下,或查看alert日志 
 
如果没启动,就可以在Oracle用户下执行以下命令
 
单机有两种:12 
 
1sqlplus sys/passwd as sysdba,
startup
2sqlplus /nolog 
conn / as sysdba
startup
 
查看监听的方法
lsnrctl stat 
启动监听
lsnrctl start
 
27delphi 5中查看oracle
\orant\bin 中把ora805.dll 改为 ora73.dll
                        BDEoracle中,把vendorinit 改为ora73.dll
28、查找ORACLE_SID /etc/oratab 中可查出
 
29oracle 客户端字符不正确:

 

 

 

1. NLS_LANG 参数组成
NLS_LANG
参数由以下部分组成:
NLS_LANG=_.

NLS_LANG各部分含义如下:
LANGUAGE
指定:
-Oracle
消息使用的语言
-
日期中月份和日显示
TERRITORY
指定
-
货币和数字格式
-
地区和计算星期及日期的习惯
CHARACTERSET:
-
控制客户端应用程序使用的字符集
通常设置或者等于客户端(Windows)代码页
或者对于unicode应用设置为UTF8

 
Linux中查看数据库当前字符集参数设置
SELECT * FROM v$nls_parameters;

select * from nls_database_parameters

select userenv(‘language’) from dual;
显示NLS_LANGCHARACTERSET两个内容,然后在windows中的oracle 注册表中改为NLS_LANG. CHARACTERSET就可以了
 

30oracle增加用户

这段时间在学oracle,终于把公司的数据库成功导入到我自己的数据库里了。

create
用户
sql
代码

1.

Sql代码

  1. SQL> create user visiontv identified by visiontv default tablespace visiontv quota 10m on users;    

 SQL> create user visiontv identified by visiontv default tablespace visiontv quota 10m on users; 



grant privilege
sql
代码

1.

Sql代码

  1. SQL> grant connect,resource to visiontv;   

SQL> grant connect,resource to visiontv;



create tablespace
sql
代码

Sql代码

  1. 1. SQL> create tablespace visiontv datafile 'D:\DBServer\oracle\oradata\oradb01\vis      
  2. 2. iontv.ora' size 100m reuse default storage(initial 500k next 500k pctincrease 20      
  3. 3. );    

   1. SQL> create tablespace visiontv datafile 'D:\DBServer\oracle\oradata\oradb01\vis  

   2. iontv.ora' size 100m reuse default storage(initial 500k next 500k pctincrease 20  

   3. ); 





import
后就可以用了。

//

建立用户到用户建表的步骤:
Server
建立:create user 用户名 identified by "密码";
授权:grant create session to 用户名;
grant create table to
用户名;
grant create tablespace to
用户名;
grant create view to
用户名;

Client

建立表空间(一般建N个存数据的表空间和一个索引空间)
create tablespace
表空间名
datafile '
路径(要先建好路径)\***.dbf ' size *M
tempfile '
路径\***.dbf ' size *M
autoextend on --
自动增长
--
还有一些定义大小的命令,看需要
default storage(
initial 100K,
next 100k,
);
Server:
授予用户使用表空间的权限:
alter user
用户名 quota unlimited on 表空间;
alter user 用户名 quota *M on 表空间;
自此,才大功告成可以随意建表,运行SQL脚本!

//1
.建表空间

Sql代码

  1. create tablespace OSDB datafile 'F:\oracle\oradata\glsqjz\OSDB.ora' size 100m reuse default storage(initial 500k next 500k pctincrease 20);  

create tablespace OSDB datafile 'F:\oracle\oradata\glsqjz\OSDB.ora' size 100m reuse default storage(initial 500k next 500k pctincrease 20);


2
.建用户

Sql代码

  1. create user OSUSER identified by OSUSER  

create user OSUSER identified by OSUSER

;//identified by 后面的是密码,前面的是用户名

3
.用户授权

Sql代码

  1. grant resource,connect,RECOVERY_CATALOG_OWNER to OSUSER ;   
  2.   
  3. grant create table to OSUSER ;   
  4.   
  5. alter user OSUSER quota unlimited ON OSDB;   
  6.   
  7. alter user OSUSER default tablespace OSDB;  

grant resource,connect,RECOVERY_CATALOG_OWNER to OSUSER ;

 

grant create table to OSUSER ;

 

alter user OSUSER quota unlimited ON OSDB;

 

alter user OSUSER default tablespace OSDB;


4
.删除表空间

Sql代码

  1. DROP TABLESPACE TableSpaceName INCLUDING CONTENTS AND DATAFILES;  

DROP TABLESPACE TableSpaceName INCLUDING CONTENTS AND DATAFILES;


5
.删除用户

Sql代码

  1. DROP USER User_Name CASCADE  

DROP USER User_Name CASCADE



6
.删除表的注意事项

在删除一个表中的全部数据时,须使用

Sql代码

  1. TRUNCATE TABLE 表名  

TRUNCATE TABLE 表名

;因为用DROP TABLEDELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROPDELETE操作后,该TABLESPACE上百兆的空间就被耗光了。

 
311.以oracle用户在终端执行dbca,就可以建立数据库了,呵呵!如下图所示:
2
.等待一下,弹出dbca的欢迎界面:
3
.点击"Next"进行下一步:
4
.选择"Create a database"来创建数据库,点击"Next",继续:
5
.选择"New Database",点击"Next"来创建新的数据库:
6
.输入数据库的全局名称和SID名称,Global Database Name可以输入如:"ora9204.oracle.com,SID:ora9204.也可以输入一同个名称。完成后点击"Next"继续:
7
.默认选择,点击"Next"继续:
8
.这里同样也是默认选择,点击"Next"继续:
9
.设定Oracle9iR2数据库初始参数,初始参数设定的优劣直接影响数据库的执行性能,
这里你也可以选择"Archive"标签,把数据库设成为"存档模式"
10
.选择"Character Sets"进行数据库字符集设定,点击"Next"前往下一步:
10.
直接点击"Next"进行下一步:
11
.你可以钩选"Save as a Database Template""Generate Databse Creation Scripts",然后点击"Browse"按钮将DBCA所做的设定储存为一个新数据库模版和创建数据库时的脚本保存到一个目录下,以便将来建立数据库时可以直接使用。然后点击"Finish"继续。
12
"数据库配置助理"最后会将所有配置设定值整理出一张清单,按下"OK"后就会开始创建数据库。
13
.要有耐心的等待特别漫长的一段时间后就会进入数据库建库完成的阶段:)。
14
.出现上面的窗口时就大功告成了!请您自行指定SYSSYSTEM这两个系统管理员的密码。设定完毕后按下"OK",就会回到安装成功的画面。
15
.恭喜恭喜了!点击"Next"退出安装程序,后会跳出OEM的画面。
16
.好不容易将Oracle9i数据库系统安装完毕,接着来验收一下成果吧!
17
.在终端输入ps - ef | grep ora_ 命令来确认Oracle9i数据库的后台进程已经正常启动。继续:
18
. 接着利用Oracle9i数据库的客户端工具SQL*Plus登录数据库,并利用scott(密码为tiger)登录数据库,试着执行指令查询emp表。 就象你看见到上图emp表的数据,就表示Oracle9i数据库运作无误!好了,现在检查一下实际安装Oracle9i数据库后硬盘使用的情况.
如果出现
$sqlplus
bash:sqlplus:command not found
1
、检查ORACLE_HOMEPATH设置是否正确
2
LN -S $ORACLE_HOME/BIN/SQLPLUS /USR/BIN/
32dmp文件转入数据库:
  Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 
            利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
             
             
            执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
             DOS中可以执行时由于 在oracle 8i   安装目录\ora81\BIN被设置为全局路径,
             该目录下有EXP.EXEIMP.EXE文件被用来执行导入导出。
             oraclejava编写,SQLPLUS.EXEEXP.EXEIMP.EXE这两个文件有可能是被包装后的类文件。
             SQLPLUS.EXE调用EXP.EXEIMP.EXE所包裹的类,完成导入导出功能。
             
            下面介绍的是导入导出的实例。
            数据导出:
             1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp
               exp system/manager@TEST file=d:\daochu.dmp full=y
             2 将数据库中system用户与sys用户的表导出
               exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
             3 将数据库中的表inner_notifynotify_staff_relat导出
                exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp 
            tables=(inner_notify,notify_staff_relat) 
             4 将数据库中的表table1中的字段filed1"00"打头的数据导出
               exp system/manager@TEST file=d:\daochu.dmp tables=(table1) 
            query=\" where filed1 like '00%'\"
              
              上面是常用的导出,对于压缩,既用winzipdmp文件可以很好的压缩。
              也可以在上面命令后面 加上 compress=y 来实现。 
            数据的导入
             1 D:\daochu.dmp 中的数据导入 TEST数据库中。
               imp system/manager@TEST  file=d:\daochu.dmp
               imp aichannel/aichannel@HUST full=y  file=file= 
            d:\data\newsmgnt.dmp ignore=y 
               上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
               在后面加上 ignore=y 就可以了。
             2 d:\daochu.dmp中的表table1 导入
             imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) 
             
             基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
             
            注意:
             操作者要有足够的权限,权限不够它会提示。
             数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。 
            附录一:
             给用户增加导入数据权限的操作
             第一,启动sql*puls
             第二,以system/manager登陆
             第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
             第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
               DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
                  DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字 
             第五, 运行-cmd-进入dmp文件所在的目录, 
                  imp userid=system/manager full=y file=*.dmp
                  或者 imp userid=system/manager full=y file=filename.dmp 
             执行示例:
             F:\Work\Oracle_Data\backup>imp userid=test/test full=y 
            file=inner_notify.dmp 
            屏幕显示
            Import: Release 8.1.7.0.0 - Production on 星期四 2 16 16:50:05 2006
            (c) Copyright 2000 Oracle Corporation.  All rights reserved. 
            连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
            With the Partitioning option
            JServer Release 8.1.7.0.0 - Production 
            经由常规路径导出由EXPORT:V08.01.07创建的文件
            已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
            导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
            . 正在将AICHANNEL的对象导入到 AICHANNEL
            . . 正在导入表                  "INNER_NOTIFY"          4行被导入
            准备启用约束条件...
            成功终止导入,但出现警告。 
 
            附录二:
             Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
              先建立import9.par,
              然后,使用时命令如下:imp parfile=/filepath/import9.par
               import9.par 内容如下:
                    FROMUSER=TGPMS        
                    TOUSER=TGPMS2     
            (注:把表的拥有者由FROMUSER改为TOUSERFROMUSERTOUSER的用户可以不同)           
                    ROWS=Y
                    INDEXES=Y
                    GRANTS=Y
                    CONSTRAINTS=Y
                    BUFFER=409600
                    file==/backup/ctgpc_20030623.dmp
                    log==/backup/import_20030623.log
 
 
33dmp转入oracle时字符集有问题处理方法:
  1 @@@ 、什么是oracle字符集
  Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 
支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
  影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:
  NLS_LANG = language_territory.charset
  它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中:
  Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ 
AMERICA. ZHS16GBK
  从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
  二、如何查询Oracle的字符集
  很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle 
client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。
  1、查询oracle server端的字符集
  有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(language) 
from dual;
  结果类似如下:AMERICAN _ AMERICA. ZHS16GBK
  2、如何查询dmp文件的字符集
  用oracleexp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第23个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
  SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
  ZHS16GBK
  如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(unix主机上):
  cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
  然后用上述SQL也可以得到它对应的字符集。
  3、查询oracle client端的字符集
  这个比较简单。在windows平台下,就是注册表里面相应OracleHomeNLS_LANG。还可以在dos窗口里面自己设置,比如:
  set nls_lang=AMERICAN_AMERICA.ZHS16GBK
  这样就只影响这个窗口里面的环境变量。
  在unix平台下,就是环境变量NLS_LANG
  $echo $NLS_LANG
  AMERICAN_AMERICA.ZHS16GBK
  如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
  三、修改oracle的字符集
  上文说过,oracle的字符集有互相的包容关系。如us7ascii就是zhs16gbk的子集,us7asciizhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)
  一旦数据库创建后,数据库的字符集理论上讲是不能改变的。因此,在设计和安装之初考虑使用哪一种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。如果两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会导致很多不可测的后果,可能会严重影响数据库的正常运行,所以在修改之前一定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,我们不建议修改oracle数据库server端的字符集。特别说明,我们最常用的两种字符集ZHS16GBKZHS16CGB231280之间不存在子集和超集关系,因此理论上讲这两种字符集之间的相互转换不受支持。
  1、修改server端字符集(不建议使用)
  在oracle 
8之前,可以用直接修改数据字典表props$来改变数据库的字符集。但oracle8之后,至少有三张系统表记录了数据库字符集的信息,只改props$表并不完全,可能引起严重的后果。正确的修改方法如下:
  $sqlplus /nolog
  SQL>conn / as sysdba;
  若此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:
  SQL>STARTUP MOUNT;
  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  SQL>ALTER DATABASE OPEN;
  SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
  SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
  SQL>SHUTDOWN IMMEDIATE;
  SQL>STARTUP
  2、修改dmp文件字符集
  上文说过,dmp文件的第23字节记录了字符集信息,因此直接修改dmp文件的第23字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCIIWE8ISO8859P1ZHS16CGB231280ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。
  具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;
  0354
  然后将dmp文件的23字节修改为0354即可。 
作者: vstonet
另外导入备份时出现了 imp-00016的错误:所是做的字符集转换(类型850  
852)不被支援,出现数据集问题时候,将HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANG改为nls_lang=american_america.zhs16cgb231280即可
 
 
 
 
2@@@@@在不同数据库做数据迁移、同其它系统交换数据等,常常因为字符集不同而导致迁移失败或数据库内数据变成乱码。现在我将oracle字符集相关的一些知识做个简单总结
一、什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 
支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中: Language 指定服务器消息的语言,territory 
指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK 
NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
二、如何查询Oracle的字符集很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel 
server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。
1、查询oracle server端的字符集有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL>select userenv(‘language’) from dual;
结果类似如下:AMERICAN _ AMERICA. ZHS16GBK
2、如何查询dmp文件的字符集用oracleexp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第23个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;    ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(unix主机上): cat exp.dmp 
|od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。
3、查询oracle 
client端的字符集这个比较简单。在windows平台下,就是注册表里面相应OracleHomeNLS_LANG。还可以在dos窗口里面自己设置,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。在unix平台下,就是环境变量NLS_LANG $echo $NLS_LANG    
AMERICAN_AMERICA.ZHS16GBK
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
 
3@@@@@现在有一个备份文件A.DMP,采用的字符集是AMERICAN_AMERICA.WE8ISO8859P1 
 
            我想在安装有SIMPLIFIED CHINESE_CHINA.ZHS16GBK字符集的数据库中恢复,请问
 
            怎样做?要注意什么?
 
 
 
            步骤。
            1SQL>CONNECT SYSTEM/MANAGER
 
            SQL>UPDATE SYS.PROPS$ SET VALUE$='WE8ISO8859P1' WHERE NAME LIKE 
            'NLS_CHAR%';
            2.修改注册表,NLS_LANG的值为AMERICAN_AMERICA.WE8ISO8859P1
            3。重新启动数据库。
            IMP USER/PA WD FILE=ADMP FULL=Y LOG = A.TXT
            ok! 
            --------------------------------------------------------------------------------------------------
            1. 2服务器指定字符集与客户字符集相同,与加载数据字符集不一致。 
 
            ---- 
            这类问题一般发生在ORACLE版本升级或重新安装系统时选择了与原来服务器端不同的字符集,而恢复加载的备份数据仍是按原字符集卸出的场合,以及加载从其它使用不同字符集的ORACLE数据库卸出的数据的情况。这两种情况中,不管服务器端和客户端字符集是否一致都无法显示汉字。解决办法见2.2 
 
 
            2.2 强制加载数据字符集与服务器端字符集一致 
 
            ---- 假设要加载数据从原ORACLE数据库卸出时的字符集为US7ASCII,当前ORACLE服务器字符集为WE8ISO8859P1 
 
 
            ---- 下面提供三种解决方法: 
 
            ---- 1) 服务器端重新安装ORACLE 
 
            ---- 在重新安装ORACLE 时选择与原卸出数据一致的字符集(本例为US7ASCII)。 
 
            ---- 加载原卸出的数据。 
 
            ---- 这种情况仅仅使用于空库和具有同一种字符集的数据。 
 
            ---- 2)强行修改服务器端ORACLE当前字符集 
 
            ---- 在用imp命令加载数据前,先在客户端用sql*plus登录system 
            DBA用户,执行下列SQL语句进行当前ORACLE数据库字符集修改: 
 
            SQL > create database character set US7ASCII 
            * create database character set US7ASCII 
            ERROR at line 1: 
            ORA-01031: insufficient privileges 
            ---- 
            你会发现语句执行过程中,出现上述错误提示信息,此时不用理会,实际上ORACLE数据库的字符集已被强行修改为US7ASCII,接着用imp命令装载数据。等数据装载完成以后,shutdown 
            数据库,再startup 数据库,用合法用户登录ORACLE数据库,在sql>命令提示符下,运行select * from 
            V$NLS_PARAMETERS,可以看到ORACLE数据库字符集已复原,这时再查看有汉字字符数据的表时,汉字已能被正确显示。 
 
            ---- 3)利用数据格式转储,避开字符集限制 
 
            ---- 这种方法主要用于加载外来ORACLE数据库的不同字符集数据。其方法如下: 
 
            ---- 先将数据加载到具有相同字符集的服务器上,然后用转换工具卸出为foxbase 
            格式或access格式数据库,再用转换工具转入到不同字符集的ORACLE数据库中,这样就避免了ORACLE字符集的困扰。目前数据库格式转换的工具很多,power 
            builder5.0以上版本提供的pipelineMicrosoft 
            Access数据库提供的数据导入/导出功能等。转换方法参见有关资料说明。.
 
 
4@@@@@$ cat aa.dmp | od -x | head
0000000 0303 5445 5850 4f52 543a 3156 2e30 3230
 
 
dmp文件已用winhex打开
 
 
下面介绍的是导入导出的实例。
数据导出:
 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp
   exp system/manager@TEST file=d:\daochu.dmp full=y
 2 将数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
 3 将数据库中的表inner_notifynotify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) 
 
 4 将数据库中的表table1中的字段filed1"00"打头的数据导出
   exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
  
  上面是常用的导出,对于压缩,既用winzipdmp文件可以很好的压缩。
  也可以在上面命令后面 加上 compress=y 来实现。 
 
数据的导入
 1 D:\daochu.dmp 中的数据导入 TEST数据库中。
   imp system/manager@TEST  file=d:\daochu.dmp
   imp aichannel/aichannel@HUST full=y  file=file= d:\data\newsmgnt.dmp ignore=y 
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
 2 d:\daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) 
 
 基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
 
注意:
 操作者要有足够的权限,权限不够它会提示。
 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
 
 
 
例如:
SQL> edit
Wrote file afiedt.buf
 
  1* select  nls_charset_id('WE8ISO8859P1')  from dual
  2  /
 
 
NLS_CHARSET_ID('WE8ISO8859P1')
------------------------------
                            31  转为十六进制1F dmp  00 1F
 
 
 
NLS_CHARSET_ID('WE8ISO8859P9')
------------------------------
                            39  转为十六进制 27 dmp中为  00 27
 
SQL> edit
Wrote file afiedt.buf
 
  1* select  nls_charset_id('ZHS16GBK')  from dual
SQL> /
 
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
                       852        转为十六进制354 dmp中为 03 54
实际操作:我的oracle 中为AMERICAN_AMERICA.WE8ISO8859P1,但是dmpAMERICAN_AMERICA.WE8ISO8859P9exp出,所以有在windows oracle 注册表中改为AMERICAN_AMERICA.WE8ISO8859P1,再用winhex打开dmp文件,改第2,3位为00 27 改为00 1F ,然后再用inp转入目标oracle 则中文显示正确。
原文地址:https://www.cnblogs.com/hssbsw/p/1220979.html