Oracle(11g)建库、建表空间、建用户并授权、导入导出数据表

时间:2022-09-15 08:38:15
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;


//删除表空间
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, 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/');
---------------------------------------------------