美文网首页
Oracle数据库操作

Oracle数据库操作

作者: MrGago | 来源:发表于2018-05-29 11:30 被阅读0次

    一、建立用户/表空间/分配权限/删除表空间

    1)注意表空间存放目录

    2)/*分为四步 */

    /*第1步:创建临时表空间  */

    create temporary tablespace yuhang_temp

    tempfile 'D:\oracledata\yuhang_temp.dbf'

    size 50m 

    autoextend on 

    next 50m maxsize 20480m 

    extent management local; 

    /*第2步:创建数据表空间  */

    create tablespace yuhang_data 

    logging 

    datafile 'D:\oracledata\yuhang_data.dbf'

    size 50m 

    autoextend on 

    next 50m maxsize 20480m 

    extent management local; 

    /*第3步:创建用户并指定表空间  */

    create user yuhang identified by yuhang 

    default tablespace yuhang_data 

    temporary tablespace yuhang_temp; 

    /*第4步:给用户授予权限  */

    grant connect,resource,dba to yuhang;

    对于不使用的表空间要彻底删除

    drop tablespace TS_DATA_DB_ZZWK including contents and datafiles;

    二:导出oracle的dmp遇到空表的情况

    昨天晚上按徐大姐要求给开发导一份测试库,在导测试库的过程中遇到了一个情况是,oracle11g,在使用

    export时候不支持导出空表,以下是一个简单的办法:

    1、导出前查询一下有多少张空表

    SELECT TABLE_NAME FROM USER_TABLES WHERE NUM_ROWS=0,如下18张

    2、oracle11g不给空表分片Segment(段,自己百度看下),那么我们就给这些空表分配

    Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

    将执行结果导出为tsv文件,如下:

    3、将tsv中的语句复制,在sql窗口中执行,然后再导出dmp文件。如下:

    再点击工具栏Tools—Export tables ,打开如下对话框:

    三、exp导出dmp

    如果oracle的plsql中不能使用export tables命令。那么可以打开cmd窗口,输入:

    2) 导出一张表,如:

    Exp bzsf/iflytek2015@BZSF  file=D:/T_RYJBXX.dmp  tables=(T_RYJBXX)

    3) 导出多张表,如:

    exp bzsf/iflytek2015@BZSF  file= D:/T_RYJBXX.dmp  tables=(T_RYJBXX, T_CLJBXX)

       3)导出表中某些值,如:

    将数据库中的表t_uaac_organization中的字段code含有"34180"打头的数据导出

     exp gsb_test/passwd!@sgy file=E:\xuancheng.dmp tables=(t_uaac_organization) query=\" where code like '%3418%' \"

    4) 导出某一个用户下所有对象,要用超级管理员

    exp  workflow_test/123456@192.168.57.180:1521/sgy  file=d:/work.dmp owner=workflow_test

    四、导出遇到特殊字符

    比如密码中含有@符号。或者/符号

    五、imp导入dmp

    1)可以直接通过plsql工具导入。

    2)imp workflow_test/123456@192.168.78.121:1521/zzora  file=d:/work.dmp  full=y  ignore=y

    六、查看mysql表的详细信息

    登陆mysql服务器,进入mysql数据库,输入:

    Mysql>Show table status like 'mytable'

    Name: mytable #表名

    Engine: InnoDB #存储引擎伟InnoDB

     Version: 10 #mysql版本

    Row_format: Compact #行格式。有Dynamic,fixed,Compact等格式。Dynamic是动态行,表字段里面宝航varchar,BloB等不定长字段。fixed是定长行。Compact是行压缩。

     Rows: 0 #表中的行数

    Avg_row_length: 0 #平均每行的字节数

    Data_length: 16384 #整个表的数据量(字节)

    Max_data_length: 0 #表最大的容量。0表示无限

    Index_length: 0 #索引数据占用磁盘空间的大小

    Data_free: 10485760 #表示已分配但还未被使用的空间大小。Auto_increment: NULL #下一个AUto_increment的值

    Create_time: 2011-08-0622:39:46 #创建时间

    Update_time: NULL #更新时间

    Check_time: NULL #使用check table等命令时的检查时间

    Collation: utf8_general_ci #默认字符集和字符列排列顺序

     Checksum: NULL #如果启动,则表示整个表的校验和Create_options: max_rows=4294967295avg_row_length=32 #表创建时的选项 Comment: 1 row inset (0.00 sec)

    七、oracle复制表结构和数据

    Oracle:

    复制表结构及其数据:create table table_name_new as select * from table_name_old

    只复制表结构:create table table_name_new as select * from table_name_old where 1=2;

    八、查看oracle表空间使用查看

    SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

      D.TOT_GROOTTE_MB "表空间大小(M)",

      D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

      TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') || '%'"使用比",

      F.TOTAL_BYTES "空闲空间(M)",

      F.MAX_BYTES "最大块(M)"

      FROM (SELECT TABLESPACE_NAME,

      ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

      ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

      FROM SYS.DBA_FREE_SPACE

      GROUP BY TABLESPACE_NAME) F,

      (SELECT DD.TABLESPACE_NAME,

      ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

      FROM SYS.DBA_DATA_FILES DD

      GROUP BY DD.TABLESPACE_NAME) D

      WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

      ORDER BY 1;

    使用情况

    Select

    total.tablespace_name,

      round(total.MB, 2) as Total_MB,

      round(total.MB - free.MB, 2) as Used_MB,

      round((1 - free.MB / total.MB) * 100, 2) || '%'as Used_Pct

    from

    (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

      from dba_free_space

      group by tablespace_name) free,

      (select tablespace_name, sum(bytes) / 1024 / 1024 as MB

      From dba_data_files

    Group by tablespace_name) total

    Where free.tablespace_name = total.tablespace_name;

    九、登录oracle数据提示异常:表空间问题

    扩大表空间:

    更改system表空间的数据文件SYSTEM.dbf分配空间

    alter database datafile ‘/u04/oradata/truth/system.dbf’ resize 2048M

    十、linux 下启动Oralce

       a、root用户关闭防火墙  service iptables stop

       b、oracle用户开启监听 :

     su - oracle ;

    lsnrctl start;

        c、开启数据库:

         sqlplus "/as sysdba" ; 

    startup ; 

    exit ;

    十一、查看oracle字符集、版本、修改字符集

    select version from v$instance;

    select userenv('language') from dual;--服务端字符集

    client字符集修改:在 /home/oracle与 /root用户目录下的.bash_profile中添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句;

    修改数据库字符集为UTF-8

    1.以DBA登录

    2.执行转换语句:

    复制代码 代码如下:

    SHUTDOWN IMMEDIATE;

    STARTUP MOUNT EXCLUSIVE;

    ALTER SYSTEM ENABLE RESTRICTED SESSION;

    ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    ALTER DATABASE OPEN;

    ALTER DATABASE NATIONAL CHARACTER SET UTF8;

    SHUTDOWN IMMEDIATE;

    STARTUP;

    十二、添加表空间大小

    先查看表空间当前情况:

    select tablespace_name, file_id, file_name,

    round(bytes/(1024*1024),0) total_space

    from dba_data_files

    order by tablespace_name

    重设大:1:

    alter database datafile  '\oracle\oradata\anita_2008.dbf' resize 4000m

    重设大小2:

    alter tablespace ESPS_2008 add datafile '\oracle\oradata\anita_2010.dbf' size 1000m

    十三、数据库启动 startup报错,

    启动的时候提示郑:MEMORY_TARGET not supported on this system

    请看:http://www.linuxidc.com/Linux/2012-12/76976.htm 进行学习

    vi /etc/fstab 调整内存:

    十四、oracle自启动设置

    请看

    http://jingyan.baidu.com/article/b2c186c8fe4306c46ef6ff16.html

    十五、导入和导出dmp操作

    imp workflow_test/123456@192.168.78.121:1521/zzora file=d:/work.dmp full=y

    exp workflow_test/123456@192.168.57.180:1521/sgy file=d:/work.dmp owner=workflow_test

    十六、表空间名字错了,修改表空间名字

    Alter tablespace XX rename to YY

    十七、oracle执行select提示如下

    grant select on v_$statname to yztv1_test;

    grant select on v_$sesstat to yztv1_test;

    grant select on v_$session to yztv1_test;

    grant select on v_$mystat to yztv1_test;

     十八、一个用户yztv1_test查询另一个用户workflow_test的表

    grant select on workflow_test.wfworkitem to yztv1_test;

    grant select on workflow_test.wfwiparticipant to yztv1_test;

    十九、数据库回滚日志文件UNDOTBS01.DBF太大了

     以SYS用户登录Oracle 自带的SQL*PLUS的方法:

    1-- 创建一个新的小空间的UNDO TABLESPACE

    CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'D:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF' SIZE 100M REUSE AUTOEXTEND ON;

     2-- 设置新的表空间为系统UNDO_TABLESPACE

    ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;

    3—在配置文件中修改undo_tablespace的设置                                  

    D:\oracle\product\10.1.0\db_1\database\initoracle.ora

    将其中的undo_tablespace=UNDOTBS1 改为 UNDOTBS2

    4—重启数据库                                                               

    采用命令SHUTDOWN IMMEDIATE 关闭数据库,然后再采用命令STARTUP 重新开启数据库;

    二十、建立表空间遇到的问题,权限不足问题

    解决方法 对要创建文件的目录执行 “chown -R oracle:oinstall 目录”,

    比如chown -R oracle:oinstall /u01所以这个命令的作用是:

    把/u01目录下的所有文件和目录的拥有者改为oracle 。

    二十一、oracle数据库日志归档满了

    登陆数据库,弹出如下提示框:

    办法:登陆oracle数据库服务器

    Su - oracle

    rman

    connect target /;

    crosscheck archivelog all;

    delete expired archivelog all;

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

    二十二、低效率sql语句(时间长)

    select *

     from (select v.sql_id,

     v.child_number,

     v.sql_text,

     v.elapsed_time,

     v.cpu_time,

     v.disk_reads,

     rank() over(order by v.elapsed_time desc) elapsed_rank

     from v$sql v) a

     where elapsed_rank <= 10;

    二十三、占用CPU高的sql

    select *

    from (select v.sql_id,

    v.child_number,

    v.sql_text,

    v.elapsed_time,

    v.cpu_time,

    v.disk_reads,

    rank() over(order by v.cpu_time desc) elapsed_rank

    from v$sql v) a

    where elapsed_rank <= 10;

    二十四、锁表查询

    --锁表查询(用超级管理)

    SQLSELECT object_name, machine, s.sid, s.serial#

    FROM gv$locked_object l, dba_objects o, gv$session s

    WHERE l.object_id = o.object_id

    AND l.session_id = s.sid;

    找到被

    ALTER system kill session '23, 1647'锁定的表,解锁:

    二十五、导出表和表结构

    导出表:export tables是一个dmp文件

    导出表结构:export users object是一个sql文件

    选择要导出的表名称。

    对于一个sql文件再导入时候,可以点击File—New—Command Window,

    弹出框中,输入@,选择导入的sql文件名称。

    二十六、从开发那里导出的dmp文件导入测试库提示XX表空间不存在

    1)请让开发导出dmp的时候,不要勾选表空间。

    相关文章

      网友评论

          本文标题:Oracle数据库操作

          本文链接:https://www.haomeiwen.com/subject/hliojftx.html