由于公司最近来了台Linux系统的服务器(CentOS6.4版),所以也就顺便学习了下,在Linux系统下Oracle数据库的各种操作。
数据库数据也要导入到Linux环境下,下面把自己在工作中遇到的问题整理下:
首先,在Linux环境下把数据库表空间、用户实例等配置好:
先补充下Linux下进入Oracle数据库的命令:
这个就推荐一下他人的经验了,就不在自己写了https://www.cnblogs.com/ldybky/p/5176996.html 这里边的常用命令对于初学者还是很有帮助的。本人进入数据库环境还是喜欢一步步来
#sqlplus
#输入用户名
# 密码(非明文,一定要输入正确)
一、创建临时表空间
--查询临时表空间文件的绝对路径。如果需要的话,可以通过查询来写定绝对路径。一般用${ORACLE_HOME}就可以了
select name from v$tempfile;
create temporary tablespace NOTIFYDB_TEMP tempfile '${ORACLE_HOME}\oradata\NOTIFYDB_TEMP.bdf' size 100m reuse autoextend on next 20m maxsize unlimited;
二、创建表空间
其中tablename是根据自己的需求命名的
create tablespace tablename datafile '/home/admin/app/admin/oradata/orcl/tablename.dbf' size 100M reuse autoextend on next 40M maxsize unlimited default storage(initial 128k next 128k minextents 2 maxextents unlimited);
三、 创建用户并授权
1、username 自定义的用户(之后程序连接数据库时需要的用户)
2、password 自定义用户密码
3、tablename 第二步创建的表空间的名字
create user username identified by password default tablespace tablename;
-- 授权
grant dba to tablename;
alter user username quota unlimited on tablename;
四、 导入数据
导入数据是关键了,说明下导入不需要在sql下进行了,输入exit; 回车退出。(不要忘记分号;)
导入的命令时imp
1、newuser 第三步中创建的用户名(就是要导入到哪个用户下)
2、newpw newuser的密码
3、orcl 是你创建数据库时候的数据库实例
4、fromuser 新用户newuser的数据是从哪个旧用户导入的
5、touser 导入到哪个新用户下
6、file 要导入的数据库数据文件,绝对路径下
7、log 把导入的过程及结果记录下来
imp newuser/newpw@orcl fromuser=olduser touser=newuser file=/home/backup/backup.dmp ignore=y log=/home/backup/log.txt ;
五、修改Oracle字符集
其实这个是我的实际操作顺序了,但是发现数据库字符集是不对的,下面就修改下Oracle字符集设置
SQL> conn /as sysdba;
SQL>select userenv('language') from dual;
SQL>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 INTERNAL_USE US7ASCII;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
SQL>select userenv('language') from dual;
按着敲命令就ok了。
六、删除用户
很多时候天不遂你愿,改变了字符集,之前导入的数据还是乱码,那就只能是删除用户,重新再导入一次数据了,那么删除用户命令:
drop user username cascade;
当然了,直接使用这个命令时,经常会出现很多错误,最常见就是无法删除当前正在运行中的用户。那就只有先停止进程了。
1、查看用户的连接状况
--1、先查看用户连接情况
select username,sid,serial# from v$session;
--2、找到要删除用户的sid,和serial,并删除
alter system kill session '105,1398';
--3、删除用户
drop user username cascade;
--4、如果在drop 后还提示ORA-01940:无法删除当前已链接的用户,说明还有连接的session,可以通过查看
--session的状态来确定该session是否被 kill 了,如下语句查看:
select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
status 为要删除用户的session状态,如果还为inactive,说明没有被kill掉。
七、重新导入
删除成功后就在进行之前的步骤在来一次。
总结:其实后来的第六步和第七是可以避免的,只怪自己考虑的不够全面,导致做了很多无用功。任何一个软件,在安装过程中和安装成功后都要先考虑好字符编码的设置!!