Oracle(11g)建库、建表空间、建用户并授权、导入导出数据表
参考博客 http://blog.csdn.net/sindyintel/article/details/55272261
http://www.cnblogs.com/smartvessel/archive/2009/07/06/1517690.html
Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库。
对于初学者来说,为了避免麻烦,可以用'Database Configuration Assistant'向导来创建数据库。
下面是创建数据库用户的具体过程:
0.确认Oracle的service和Listener 服务正常运行
1.创建数据库
2.创建表空间(临时表空间、数据表空间):
3.创建用户并指定表空间
4.授权给新建的用户
5.创建表、使用表
oracle 11g常用命令
1.监听
启动监听 lsnrctl start
停止监听 lsnrctl stop
查看监听状态 lsnrctl status
2.启动
用oracle用户进入(linux) su - oracle用户名
运行sqlplus,nolog参数表示不登录 sqlplus /nolog
以管理员模式进入 conn /as sysdba
启动数据库 startup;
停止数据库 SHUTDOWN IMMEDIATE
远程连接数据库
sqlplus /nolog
conn sys/sys@IP:1521/orainstance as sysdba
===========================================================================================================
SYS用户在CMD下以DBA身份登录:
在CMD中打sqlplus/nolog //匿名登录
然后再conn/as sysdba //以dba身份登录
oracle创建表空间
create tablespace 表空间名
datafile ' 路径(要先建好路径)\***.dbf'
size 表空间大小(以M为单位)
tempfile ' 路径\***.dbf ' size 表空间大小(以M为单位)
autoextend on --自动增长
--还有一些定义大小的命令,看需要
default storage(
initial 100K,
next 100k);
-- 查看当前用户的缺省表空间 (如果迁移数据库,表空间名要一致)
SQL>select username,default_tablespace from user_users;
//创建临时表空间
create temporary tablespace 临时表空间名 tempfile 'd:\oracle\oradata\临时表空间名.dbf' size 数值m autoextend on next 50m maxsize 20480m extent management local;
例子:create temporary tablespace user_temp tempfile 'B:\Software\Myoracle\oracle\oradata\ZHISHIKU\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
例子:create temporary tablespace user_temp tempfile '/usr/local/oracle/oradata/ZHISHIKU/user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
//创建数据表空间
create tablespace 表空间名 logging datafile 'd:\oracle\oradata\表空间名.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
例子:create tablespace TBS_ZHISHIKU logging datafile 'B:\Software\Myoracle\oracle\oradata\ZHISHIKU\TBS_ZHISHIKU.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
//查看数据表空间
select tablespace_name from dba_data_files;
//也可以再给这个表空间再增加表空间文件(一个表空间文件不够的情况下)。
alter tablespace TBS_ZHISHIKU add datafile 'B:\Software\Myoracle\oracle\oradata\ZHISHIKU\TBS_ZHISHIKU_ADD.dbf size 256M autoextend on next 100M maxsize unlimited;
//删除表空间
drop tablespace 表空间名 including contents and datafiles [cascade constraints];
-- including contents 删除表空间的内容,如果删除表空间之前表空间中有内容,而未加此参数,表空间删不掉
-- cascade constraints 同时删除tablespace中表的外键参照
//创建用户[并指定(默认)表空间]
create user 用户名 identified by 密码 [default tablespace 表空间名 temporary tablespace 临时表空间名];
例子:create user zhishiku identified by z9z7w7w8 default tablespace TBS_ZHISHIKU temporary tablespace user_temp;
//修改用户口令
alter user 用户名 identified by 新密码;
//删除用户命令
drop user 用户名 cascade;
//给用户授予用户使用表空间的权限
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, imp_full_database[,dba] to 用户名1 [,用户名2]...;
Oracle(11g)建库、建表空间、建用户并授权、导入导出数据表以后以该用户登录,创建的任何数据库对象都属于user_temp和user_data表空间,这就不用在每创建一个对象给其指定表空间了
//撤权:
revoke 权限... from 用户名;
//改变用户使用表空间的权限:
alter user 用户名 quota unlimited on 表空间;
或 alter user 用户名 quota *M on 表空间;
DOS/终端 导出
表方式:指定表的数据导出
exp 用户名/密码[@IP:1521/数据库] file=d:/导出文件名.dmp log=d:/导出文件名.log tables=表1[,表2,表3...]
默认为当前主机IP 默认端口;所导出的表必须是此用户的表
例子:exp zhishiku/z9z7w7w8@ZHISHIKU file=d:/ZHISHIKU.dmp tables=INSTRUCTION,ORIGIN ;
例子:将数据库中的表table1 、table2导出
exp system/manager@ZHISHIKU file=d:\database_out.dmp tables=(table1,table2)
用户方式:指定用户的所有对象及数据导出
exp 用户名/密码[@IP:1521/数据库] file=d:/outFile.dmp log=d:/logFileName.log
默认为当前主机IP 默认端口; 不指定表,就是导出的是当前用户的所有表,当前用户如果有DBA的权限,则导出所有数据!
例子:exp zhishiku/z9z7w7w8@ZHISHIKU file=c:/QuanKu_170706.dmp log=c:/outLog.log;
将数据库中system用户与sys用户的表导出(dba登录操作)
exp system/manager@ZHISHIKU file=d:database_out.dmp owner=(system,sys)
库方式:将数据库中所有对象及数据导出(dba登录操作)
exp 用户名/密码[@IP:1521/数据库] file=d:/outFile.dmp log=d:/logFileName.log full=y
默认为当前主机IP 默认端口; 管理员登录操作; full=y(全库=yes)
例子:exp SYS/z9z7w7w8@ZHISHIKU file=C:/QuanKu717.dmp log=C:/QuanKu717outLog.log full=y;
其他导出参数、例子
导出时还可以加上 compress=y 就可以进行文件压缩
将数据库中的表table1中的字段field1以“00”开头的数据导出
exp system/manager@ZHISHIKU file=d:\database_out.dmp tables=(table1) query=\" where filed1 like '00%'\" -- "\"不一定要加吧!
导出数据库到其他服务器磁盘上
exp 用户名/密码@数据库 file=\\10.213.22.175\nw\%date:~0,10%.dmp OWNER=用户名 -- 没用过,不知道好不好用
DOS/终端 导入(我一般将表彻底删除,然后导入)
表方式:指定表的数据导入
imp 用户名/密码[@IP:1521/数据库] file=d:/infile.dmp log=d:/logFileName.log tables=表1,表2[,表3...] [fromuser=数据来源用户名 touser=用户名] commit=y [ignore=y];
默认为当前主机IP 默认端口;所导入的表必须是此 用户 的表;同名用户之间的数据导入不用写formuser tuser; commit=y(导完提交事务=yes) ignore=y(忽略错误并继续=yes);
例子:imp zhishiku/z9z7w7w8@ZHISHIKU file=d:/zcdb.dmp log=d:/inLog.log tables=emp,dept fromuser=zhishiku touser=back commit=y ignore=y;
imp zhishiku/z9z7w7w8@111.222.54.80:1521/ZHISHIKU file=c:/ZHISHIKU.dmp tables=FY_PRESCRIPTION
用户方式:指定用户的所有对象及数据导入
imp 用户名/密码[@IP:1521/数据库] file=d:/infile.dmp log=d:/logFileName.log fromuser=数据来源用户名 touser=用户名 commit=y [ignore=y];
默认为当前主机IP 默认端口; ignore=y(忽略错误并继续=yes)(导入的数据时,不存在与备份是名称一致的表空间,会导入到当前用户的默认表空间)
例子:imp zhishiku/z9z7w7w8@ZHISHIKU file=d:/QuanKu_170706.dmp log=d:/inLog.log fromuser=zhishiku touser=zhishiku ignore=y;
不同名用户之间的数据导入(dba权限用户操作)
imp system/z9z7w7w8@ZHISHIKU fromuser=user1 touser=user2 file=c:\orabackup.dmp log=c:\orabackup.log;
库方式:将数据库中所有对象及数据导出(管理员登录操作)
imp 用户名/密码[@IP:1521/数据库] file=d:/导入文件名.dmp [log=d:/导入文件名.log] full=y ignore=y destroy=y;
默认为当前主机IP 默认端口; 管理员登录操作; full=y(全库=yes) ignore=y(忽略错误并继续=yes) destroy=y(表已存在,干掉,导入)
例子:imp username/password@orcl file=d:/ZHISHIKU.dmp log=d:/outLog.log full=y;
sql语句
插入表数据 来自查询其他表的语句
insert into 表名(sno,user_sno,user_name) (select id as sno,code as user_sno ,username as user_name from ou_user);
oracle 从一张中更新另外一张表字段
update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b where a.id=b.id) where a.name<>b.name or a.address<>b.address
创建表,数据来自查询其他表的语句
create table TB as SELECT r.* FROM FY_RECOMMEND_PRESCRIPTION r,FY_PRESCRIPTION p WHERE r.prescription_id=p.id AND p.illness_id in ('xxx','yyy')
向表中插入数据,数据来自查询其他表的语句
INSERT INTO TB as SELECT r.* FROM FY_RECOMMEND_PRESCRIPTION r,FY_PRESCRIPTION p WHERE r.prescription_id=p.id AND p.illness_id in ('xxx','yyy')
oracle 查询结果输出到文件
spool d:/test.txt
SELECT COUNT(p.id),p.illness_id FROM FY_RECOMMEND_PRESCRIPTION r,FY_PRESCRIPTION p WHERE r.prescription_id=p.id AND p.med_istatus='2' AND r.sort is null GROUP BY p.illness_id ;
spool off;
oraclet替换字段部分内容 函数
REPLACE(要操作的字段,'原内容'[,'要替换为的字段']) -- 不写第三个参数,执行结果是把 字段 中的 原内容 删除
update (select * from fy_medicine_direction t where MAIN_CONTAIN like '%/medicine/userfiles/1/images/photo/%') t set t.MAIN_CONTAIN=REPLACE(t.MAIN_CONTAIN,'/medicine/userfiles/1/images/photo/','http://139.xxx.xxx.80/medicine/userfiles/1/images/photo/');
---------------------------------------------------
多个项目 用同一个ORACLE数据库 数据隔离:可以为每个项目创建不同的表空间、创建不同的Oracle用户(同时指定表空间)