Oracle11gXE SJIS化、impdp、他
Oracle11gXEのインストールで作成されるDBはUTF-8です。
SJIS(JA16SJISTILDE)に変更する必要がありました。
環境
Windows7 64bit
Oracle11gXE
SJISへの変更
SQLコマンドラインの実行。
データベースをDROPします。
connect / as sysdba SQL> shutdown immediate SQL> startup restrict mount SQL> drop database; SQL> quit
表領域、ユーザー、スキーマの作成
connect / as sysdbaで接続、起動
SQL>startup
表領域の作成
SQL>create tablespace DATA_01 datafile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\DATA_01.DBF' size 100m AUTOEXTEND ON NEXT 10M MAXSIZE 10000M; SQL>create temporary tablespace TEMP_01 tempfile 'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\TEMP_01.DBF' size 100m;
ユーザー・スキーマの作成
SQL>create user USER_1 identified by USER_1 default tablespace DATA_01 temporary tablespace TEMP_01 quota unlimited on DATA_01; SQL>grant dba to USER_1;
impdpのためのディレクトリの作成
impdpにはディレクトリをインスタンスに作成する必要がある。インスタンスとDBの用語の使い分けは良くわかっていない
ディレクトリの作成
SQL>CREATE OR REPLACE DIRECTORY tmp AS 'c:\tmp'; SQL>grant read on directory tmp to USER_1; SQL>grant write on directory tmp to USER_1;
xlsを製品版から持ってくる、読み込む
製品版から持ってくるかググるとOracleディレクトリが全世界公開されているかわいそうなサーバーがあるのでそこから。
kualter.xslとかで検索する。
持ってきてC:\oraclexe\app\oracle\product\11.2.0\server\rdbms\xml配下に展開
SQL> execute sys.dbms_metadata_util.load_stylesheets;
impdp
コマンドプロンプトを管理者権限で開き
>impdp USER_1/USER_1 directory=tmp dumpfile=DB.DMP とか >impdp USER_1/USER_1 directory=tmp dumpfile=DB.DMP include=table:\"like \'M_%\'\" とか >impdp USER_1/USER_1 directory=tmp dumpfile=DB.DMP tables=USER_1.TABLE1 とか
XEのデータ容量上限を何とかするためのいろいろなコマンドとか
SQL>ALTER TABLESPACE DATA_01 COALESCE; SQL>ALTER TABLE USER_1.TABLE1 enable row movement; SQL>ALTER TABLE USER_1.TABLE1 SHRINK SPACE;
使用量を表示するSQLとか
select ddf.TABLESPACE_NAME, ddf.BYTES, ddf.BYTES-DFS.BYTES "BYTES_USED", round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) "PERCENT_USED", dfs.BYTES "BYTES_FREE", round((1-((ddf.BYTES-dfs.BYTES)/ddf.BYTES))*100,2) "PERCENT_FREE" from (select TABLESPACE_NAME, sum(BYTES) bytes from dba_data_files where autoextensible='NO' group by TABLESPACE_NAME) ddf, (select TABLESPACE_NAME, sum(BYTES) bytes from dba_free_space group by TABLESPACE_NAME) dfs where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME order by ((ddf.BYTES-dfs.BYTES)/ddf.BYTES) desc;
set linesize 1000 set pagesize 1000 col OWNER format A20 col s_bytes format 999,999,999,999 select TABLESPACE_NAME,OWNER,sum(BYTES) s_bytes from dba_segments group by OWNER,TABLESPACE_NAME order by TABLESPACE_NAME,OWNER;
SELECT table_name, TO_NUMBER( extractvalue( xmltype( dbms_xmlgen.getxml('SELECT COUNT(*) c FROM '||table_name)) ,'/ROWSET/ROW/C')) rec_ccount, trunc(bytes/1024,0) tablesize FROM user_tables join user_segments on user_segments.segment_name = user_tables.table_name ORDER by tablesize asc;
startup
なお、データベースを作り直した後はWindows起動とともにインスタンスが起動することはなくなる。
Windows起動のたびにインスタンスを起動する必要がある。
やりかたはあるのだろうが、とりあえず。。
SQLコマンドラインの実行を起動し、
connect / as sysdbaで接続します。
startup
を行い、インスタンスを起動。
参考
インターネットをいろいろ検索した。