oracle字符集、创建表空间、导出导入、表空间使用、执行计划

111 阅读3分钟

oracle登录

sqlplus / as sysdba  // cmd下先登录数据库界面

select name from v$database;  // SQL查询当前的数据库,确定数据库已创建和配置成功

字符集转换

  • AMERICAN_AMERICA.AL32UTF8
  • SIMPLIFIED CHINESE_CHINA.ZHS16GBK

查看数据库的字符集

select * from v$nls_parameters;
select * from nls_database_parameters;

Oracle数据库的字符集更改

[SQL> conn / as sysdba     // 需要使用SYSDBA帐户
SQL>  startup mount
SQL>  shutdown immediate;   // 停止数据库
SQL>  startup mount;         // 启动数据库到 mount 状态
SQL> alter session set sql_trace=true;
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 AL32UTF8; --修改字符集AL32UTF8->ZHS16GBK
SQL> shutdown immediate;        // 再次关闭数据库
SQL> STARTUP;            // 启动数据库

drop  user 用户名 cascade;

Oracle11g创建表空间语句

分为四步:

  • 第1步:创建临时表空间
create temporary tablespace jack_temp
tempfile 'D:\oracledata\jack_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
  • 第2步:创建数据表空间

    --查看已有表空间
    select * from dba_data_files
    

2020-04-24093920.png

create tablespace jack_data
logging
datafile 'D:\oracledata\jack_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
  • 第3步:删除临时表空间或者表空间

     DROP TABLESPACE jack_data INCLUDING CONTENTS AND DATAFILES;
    

    jack_data 为要删除的表空间名;

  • 第4步:创建用户并指定表空间

create user jack identified by jack
default tablespace jack_data
temporary tablespace jack_temp;
  • 第5步:给用户授予权限
grant connect,resource,dba to jack;

用户默认表空间查询

select username, default_tablespace from dba_users order by username;

oracle 修改用户的默认表空间

 DROP TABLESPACE jack_data INCLUDING CONTENTS AND DATAFILES;
 
 alter table tcmpi move tablespace jack_data;
 
 alter user tcmpi default tablespace jack_data;
 
 alter user tcmpi default tablespace jack_data temporary tablespace jack_temp;

实现oracle的dmp文件导出导入

先处理没有记录的表,防止无法导出表

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

常用导出,以jack为例

exp jack/jack@127.0.0.1/orcl file=c:\tmp\jack.dmp owner=jack
imp jack/jack@127.0.0.1/orcl file=c:\tmp\jack.dmp fromuser=jack touser=jack2 IGNORE=Y LOG=i.log

根据配置文件进行导出

og=/tmp/plsexp.log
file=mystuff.dmp
userid=jack/jack@127.0.0.1/orcl
buffer=4096
tables=(mytable)
compress=yes
consistent=no
grants=no
indexes=yes
rows=yes
triggers=yes
constraints=yes
exp parfile=plsexp.par

非dba用户导出,创建用户,并授权

create user jack IDENTIFIED BY jack123;
GRANT EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO jack;

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         oracle 表空间使用情况             "最大块(M)"
FROM   (SELECT TABLESPACE_NAME,oracle 表空间使用情况
               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 tablespace_name, count(*) AS extends,round(sum(bytes) / 1024 / 1024, 2) AS MB,sum(blocks) AS blocks from dba_free_space group BY tablespace_name;

查询表空间的总容量

select tablespace_name, sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;

查询表空间使用率

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查看执行计划

表名:Opt_Record_Doc

explain plan for 
select * from Opt_Record_Doc where DCID='9760f12eacec32d2' 

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Oracle 查表数量

SELECT COUNT(1) FROM Opt_Record_Doc t WHERE t.DCID IS NOT null ORDER BY t.DCID DESC;

Oracle 查表索引

select * from user_ind_columns where table_name = upper('Opt_Record_Doc') 

查询所有表及表中的数据量

--查询所有表及表中的数据量
select u.TABLE_NAME,u.NUM_ROWS from user_tables u order by u.NUM_ROWS desc