【數據庫部分】
1、連接登陸數據庫
sqlplus system/elpdb_1Pwd@wizbank
2、如果lms用戶及表空間已經存在則使用以下命令刪除lms用戶和表空間:
drop user lms cascade;
drop tablespace LMS including contents;
drop tablespace LMS_IND including contents;
3、重新使用以下命令來創建lms用戶和表空間:
CREATE TABLESPACE LMS
DATAFILE 'D:\app\jimmy\oradata\yitai\LMS.DBF' SIZE 5120M reuse autoextend on next 10m
DEFAULT STORAGE (
INITIAL 2000K
NEXT 2000K
MINEXTENTS 1
MAXEXTENTS unlimited
PCTINCREASE 0)
ONLINE;
CREATE TABLESPACE LMS_IND
DATAFILE 'D:\app\jimmy\oradata\yitai\LMS_IND.DBF' SIZE 500M reuse autoextend on next 10m
DEFAULT STORAGE (
INITIAL 200K
NEXT 200K
MINEXTENTS 1
MAXEXTENTS unlimited
PCTINCREASE 0)
ONLINE;
4、創建lms賬號及oracle密碼
CREATE USER LMS IDENTIFIED BY oracle
DEFAULT TABLESPACE LMS
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON LMS;
5、賦予lms賬號權限
GRANT connect,resource TO LMS;
grant dba to lms;
6、oracle 11g 設置其值爲false 對其以後導入的表,無論其表爲空表還是非空表 都分配segment
alter system set deferred_segment_creation=false scope=both;
7、密碼無限期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
8、執行quit命令退出。
還原數據庫語句
imp system/oracle@yitaigroup fromuser=lms touser=lms file=E:\datebase_bak\yitai1020\yitai1020.dmp log=E:\datebase_bak\yitai1020\yitai1020.log
imp system/oracle@yitaigroup fromuser=lms touser=lms full=y ignore=y file=D:\yitai1020\yitai1020.dmp log=D:\yitai1020\yitai1020.log
備份數據庫語句
exp lms/oracle@yitaigroup file=D:\yitai1020\yitai1025.dmp owner=lms log=D:\yitai1020\yitai1025.log statistics=none
exp lms/[email protected]:1521:gedibbyh file=E:\gedibak\gedi1121.dmp owner=lms log=E:\gedibak\gedi1121.log statistics=none
查詢表空間大小
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;
=================================================
oracle11g的新特性,數據條數是0時不分配segment,所以就不能被導出。
解決方法:
1插入一條數據(或者再刪除),浪費時間,有時幾百張表會累死的。
2創建數據庫之前
使用代碼:
Sql代碼
alter system set deferred_segment_creation=false;
調整再建表
這兩種方都不好
下面是終極方法:
先查詢一下哪些表是空的:
Sql代碼
select table_name from user_tables where NUM_ROWS=0;
下面我們通過select 來生成修改語句:
Sql代碼
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
然後就在結果窗口裏面生成了下面那些東西:
Sql代碼
alter table E2USER_STATE allocate extent;
alter table ENTERPRISE_E2USER allocate extent;
alter table ENTERPRISE_INFO_TYPE allocate extent;
alter table ENTERPRISE_MAPMARK allocate extent;
alter table ENTERPRISE_NEEDTASK allocate extent;
alter table ENTERPRISE_PICTURE allocate extent;
alter table ENTERPRISE_REPORT allocate extent;
alter table ENTERPRISE_REPORT_TYPE allocate extent;
alter table ENTERPRISE_TEAM allocate extent;
alter table FROMUSER_ADJUNCT_TARGET allocate extent;
alter table FROMUSER_OFFER allocate extent;
alter table CALENDAR_TYPE allocate extent;
ok 執行上面那些sql,之後再exp吧,那就是見證奇蹟的深刻。
建議:
以後新建數據庫,最好設置deferred_segment_creation 參數
設置deferred_segment_creation 參數
該參數值默認是TRUE,當改爲FALSE時,無論是空表還是非空表,都分配segment。修改SQL語句:
alter system set deferred_segment_creation=false scope=both;
需注意的是:該值設置後對以前導入的空表不產生作用,仍不能導出,只能對後面新增的表產生作用。如需導出之前的空表,只能用第一種方法。