日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sql-表空间

發(fā)布時(shí)間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql-表空间 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

表空間

?編輯
表空間是數(shù)據(jù)庫(kù)的邏輯劃分,一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫(kù)。所有的數(shù)據(jù)庫(kù)對(duì)象都存放在指定的表空間中。但主要存放的是表, 所以稱作表空間。 Oracle數(shù)據(jù)庫(kù)中至少存在一個(gè)表空間,即SYSTEM的表空間。 SQL Server數(shù)據(jù)庫(kù)與Oracle數(shù)據(jù)庫(kù)之間最大的區(qū)別要屬表空間設(shè)計(jì)。Oracle數(shù)據(jù)庫(kù)開(kāi)創(chuàng)性地提出了表空間的設(shè)計(jì)理念,這為Oracle數(shù)據(jù)庫(kù)的高性能做出了不可磨滅的貢獻(xiàn)。可以這么說(shuō),Oracle中很多優(yōu)化都是基于表空間的設(shè)計(jì)理念而實(shí)現(xiàn)的。 中文名
表空間
外文名
tablespaces
軟件類型
數(shù)據(jù)庫(kù)
所屬軟件
Oracle數(shù)據(jù)庫(kù)
優(yōu)????勢(shì)
表空間的設(shè)計(jì)理念
面向領(lǐng)域
服務(wù)器

目錄

  • 1?表空間的典型應(yīng)用
  • 2?建立表空間與建立用戶的順序關(guān)系
  • 表空間的典型應(yīng)用

    編輯 典型應(yīng)用一:控制用戶所占用的表空間配額。 在一些大型的數(shù)據(jù)庫(kù)應(yīng)用中,我們需要控制某個(gè)用戶或者某一組用戶其所占用的磁盤空間。這就好像在文件服務(wù)器中,需要為每個(gè)用戶設(shè)置磁盤配額一樣,以防止硬盤空間耗竭。所以,在數(shù)據(jù)庫(kù)中,我們也需要限制用戶所可以使用的磁盤空間大小。為了達(dá)到這個(gè)目的,我們就可以通過(guò)表空間來(lái)實(shí)現(xiàn)。 我們可以在Oracle數(shù)據(jù)庫(kù)中,建立不同的表空間,為其設(shè)置最大的存儲(chǔ)容量,然后把用戶歸屬于這個(gè)表空間。如此的話,這個(gè)用戶的存儲(chǔ)容量,就受到這個(gè)表空間大小的限制。 典型應(yīng)用二:控制數(shù)據(jù)庫(kù)所占用的磁盤空間。 有時(shí)候,在Oracle數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行過(guò)程中,可能運(yùn)行不止一個(gè)服務(wù)。除了數(shù)據(jù)庫(kù)服務(wù)器外,可能還有郵件服務(wù)器等應(yīng)用系統(tǒng)服務(wù)器。為此,就需要先對(duì)Oracle數(shù)據(jù)庫(kù)的磁盤空間作個(gè)規(guī)劃,否則,當(dāng)多個(gè)應(yīng)用程序服務(wù)所占用的磁盤空間都無(wú)限增加時(shí),最后可能導(dǎo)致各個(gè)服務(wù)都因?yàn)橛脖P空間的耗竭而停止。所以,在同一臺(tái)服務(wù)器上使用多個(gè)應(yīng)用程序服務(wù)時(shí),我們需要先為各個(gè)應(yīng)用服務(wù)規(guī)劃分配磁盤空間,各服務(wù)的磁盤空間都不能夠超過(guò)我們分配的最大限額,或者超過(guò)后及時(shí)地提醒我們。只有這樣,才能夠避免因?yàn)榇疟P空間的耗竭而導(dǎo)致各種應(yīng)用服務(wù)的崩潰。 典型應(yīng)用三:靈活放置表空間,提高數(shù)據(jù)庫(kù)的輸入輸出性能。 數(shù)據(jù)庫(kù)管理員還可以將不同類型的數(shù)據(jù)放置到不同的表空間中,這樣可以明顯提高數(shù)據(jù)庫(kù)輸入輸出性能,有利于數(shù)據(jù)的備份與恢復(fù)等管理工作。因?yàn)槲覀償?shù)據(jù)庫(kù)管理員在備份或者恢復(fù)數(shù)據(jù)的時(shí)候,可以按表空間來(lái)備份數(shù)據(jù)。如在設(shè)計(jì)一個(gè)大型的分銷系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)的時(shí)候,我們可以按省份建立表空間。與浙江省相關(guān)的數(shù)據(jù)文件放置在浙江省的表空間中,北京發(fā)生業(yè)務(wù)記錄,則記錄在北京這個(gè)表空間中。如此,當(dāng)浙江省的業(yè)務(wù)數(shù)據(jù)出現(xiàn)錯(cuò)誤的時(shí)候,則直接還原浙江省的表空間即可。很明顯,這樣設(shè)計(jì),當(dāng)某個(gè)表空間中的數(shù)據(jù)出現(xiàn)錯(cuò)誤需要恢復(fù)的時(shí)候,可以避免對(duì)其他表空間的影響。 另外,還可以對(duì)表空間進(jìn)行獨(dú)立備份。當(dāng)數(shù)據(jù)庫(kù)容量比較大的時(shí)候,若一下子對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行備份,顯然會(huì)占用比較多的時(shí)間。雖然說(shuō)Oracle數(shù)據(jù)庫(kù)支持熱備份,但是在備份期間,會(huì)占用比較多的系統(tǒng)資源,從而造成數(shù)據(jù)庫(kù)性能的下降。為此,當(dāng)數(shù)據(jù)庫(kù)容量比較大的時(shí)候,我們就需要進(jìn)行設(shè)置多個(gè)表空間,然后規(guī)劃各個(gè)表空間的備份時(shí)間,從而可以提高整個(gè)數(shù)據(jù)庫(kù)的備份效率,降低備份對(duì)于數(shù)據(jù)庫(kù)正常運(yùn)行的影響。 典型應(yīng)用四:大表的排序操作。 我們都知道,當(dāng)表中的記錄比較多的時(shí)候,對(duì)他們進(jìn)行查詢,速度會(huì)比較慢。第一次查詢成功后,若再對(duì)其進(jìn)行第二次重新排序,仍然需要這么多的時(shí)間。為此,我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,針對(duì)這種容量比較大的表對(duì)象,往往把它放在一個(gè)獨(dú)立的表空間,以提高數(shù)據(jù)庫(kù)的性能。 典型應(yīng)用五:日志文件與數(shù)據(jù)文件分開(kāi)放,提高數(shù)據(jù)庫(kù)安全性。 默認(rèn)情況下,日志文件與數(shù)據(jù)文件存放在同一表空間。但是,這對(duì)于數(shù)據(jù)庫(kù)安全方面來(lái)說(shuō),不是很好。所以,我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)的過(guò)程中,往往喜歡把日志文件,特別是重要日志文件,放在一個(gè)獨(dú)立的表空間中,然后把它存放在另外一塊硬盤上。如此的話,當(dāng)存放數(shù)據(jù)文件的硬盤出現(xiàn)故障時(shí),能夠馬上通過(guò)存放在另一個(gè)表空間的重做日志文件,對(duì)數(shù)據(jù)庫(kù)進(jìn)行修復(fù),以減少企業(yè)因?yàn)閿?shù)據(jù)丟失所帶來(lái)的損失。 當(dāng)然,表空間的優(yōu)勢(shì)還不僅僅這些,企業(yè)對(duì)于數(shù)據(jù)庫(kù)的性能要求越高,或者數(shù)據(jù)庫(kù)容量越大,則表空間的優(yōu)勢(shì)就會(huì)越大。

    建立表空間與建立用戶的順序關(guān)系

    編輯 在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,我們建議數(shù)據(jù)庫(kù)管理員按如下順序設(shè)置表空間。 第一步:建立表空間。 在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,首先需要設(shè)計(jì)表空間。我們需要考慮,是只建立一個(gè)表空間呢,還是需要建立多個(gè)表空間,以及各個(gè)表空間的存放位置、磁盤限額等等。 到底設(shè)計(jì)多少個(gè)表空間合理,沒(méi)有統(tǒng)一的說(shuō)法,這主要根據(jù)企業(yè)的實(shí)際需求去判斷。如企業(yè)需要對(duì)用戶進(jìn)行磁盤限額控制的,則就需要根據(jù)用戶的數(shù)量來(lái)設(shè)置表空間。當(dāng)企業(yè)的數(shù)據(jù)容量比較大,而其又對(duì)數(shù)據(jù)庫(kù)的性能有比較高的要求時(shí),就需要根據(jù)不同類型的數(shù)據(jù),設(shè)置不同的表空間,以提高其輸入輸出性能。 第二步:建立用戶,并制定用戶的默認(rèn)表空間。 在建立用戶的時(shí)候,我們建議數(shù)據(jù)庫(kù)管理員要指定用戶的默認(rèn)表空間。因?yàn)槲覀冊(cè)诶肅REATE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,如數(shù)據(jù)庫(kù)表的時(shí)候,其默認(rèn)是存儲(chǔ)在數(shù)據(jù)庫(kù)的當(dāng)前默認(rèn)空間。若不指定用戶默認(rèn)表空間的話,則用戶每次創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象的時(shí)候,都要指定表空間,顯然,這不是很合理。 另外要注意,不同的表空間有不同的權(quán)限控制。用戶對(duì)于表空間A具有完全控制權(quán)限,可能對(duì)于表空間B就只有查詢權(quán)限,甚至連連接的權(quán)限的都沒(méi)有。所以,合理為用戶配置表空間的訪問(wèn)權(quán)限,也是提高數(shù)據(jù)庫(kù)安全性的一個(gè)方法。

    ?

    ?客戶要求用pgsql,所在服務(wù)器裝了一下pgsql,我出了一個(gè)pgsql的分類,看這篇文章前,把這個(gè)分類下的文章都可以看一下,這是我熟悉pgsql的一套流程。以前搞過(guò)一次pgsql,很早了。

    1,查看數(shù)據(jù)庫(kù)

    查看復(fù)制打印?
  • playboy=>?\l???????????????????????//\加上字母l,相當(dāng)于mysql的,mysql>?show?databases;??
  • ????????List?of?databases??
  • ???Name????|??Owner???|?Encoding??
  • -----------+----------+----------??
  • ?playboy???|?postgres?|?UTF8??
  • ?postgres??|?postgres?|?UTF8??
  • ?template0?|?postgres?|?UTF8??
  • ?template1?|?postgres?|?UTF8??
  • ??
  • playboy=>?select?pg_database_size('playboy');????//查看playboy數(shù)據(jù)庫(kù)的大小??
  • ?pg_database_size??
  • ------------------??
  • ??????????3637896??
  • (1?row)??
  • ??
  • playboy=>?select?pg_database.datname,?pg_database_size(pg_database.datname)?AS?size?from?pg_database;????//查看所有數(shù)據(jù)庫(kù)的大小??
  • ??datname??|??size??
  • -----------+---------??
  • ?postgres??|?3621512??
  • ?playboy???|?3637896??
  • ?template1?|?3563524??
  • ?template0?|?3563524??
  • (4?rows)??
  • ??
  • playboy=>?select?pg_size_pretty(pg_database_size('playboy'));??????//以KB,MB,GB的方式來(lái)查看數(shù)據(jù)庫(kù)大小??
  • ?pg_size_pretty??
  • ----------------??
  • ?3553?kB??
  • (1?row)??
  • 2,查看多表

    查看復(fù)制打印?
  • playboy=>?\dt??????????????????????//相當(dāng)于mysql的,mysql>?show?tables;??
  • ????????List?of?relations??
  • ?Schema?|?Name?|?Type??|??Owner??
  • --------+------+-------+---------??
  • ?public?|?test?|?table?|?playboy??
  • (1?row)??
  • 3,查看單表

    查看復(fù)制打印?
  • playboy=>?\d?test;?????????????????//相當(dāng)于mysql的,mysql>?desc?test;??
  • ????????????Table?"public.test"??
  • ?Column?|?????????Type??????????|?Modifiers??
  • --------+-----------------------+-----------??
  • ?id?????|?integer???????????????|?not?null??
  • ?name???|?character?varying(32)?|??
  • Indexes:?"playboy_id_pk"?PRIMARY?KEY,?btree?(id)??
  • ??
  • playboy=>?select?pg_relation_size('test');???//查看表大小??
  • ?pg_relation_size??
  • ------------------??
  • ????????????????0??
  • (1?row)??
  • ??
  • playboy=>?select?pg_size_pretty(pg_relation_size('test'));???//以KB,MB,GB的方式來(lái)查看表大小??
  • ?pg_size_pretty??
  • ----------------??
  • ?0?bytes??
  • (1?row)??
  • ??
  • playboy=>?select?pg_size_pretty(pg_total_relation_size('test'));???//查看表的總大小,包括索引大小??
  • ?pg_size_pretty??
  • ----------------??
  • ?8192?bytes??
  • (1?row)??
  • 4,查看索引

    查看復(fù)制打印?
  • playboy=>?\di??????????????????????//相當(dāng)于mysql的,mysql>?show?index?from?test;??
  • ????????????????List?of?relations??
  • ?Schema?|?????Name??????|?Type??|??Owner??|?Table??
  • --------+---------------+-------+---------+-------??
  • ?public?|?playboy_id_pk?|?index?|?playboy?|?test??
  • (1?row)??
  • ??
  • playboy=>?select?pg_size_pretty(pg_relation_size('playboy_id_pk'));????//查看索大小??
  • ?pg_size_pretty??
  • ----------------??
  • ?8192?bytes??
  • (1?row)??
  • 5,查看表空間,以及大小

    查看復(fù)制打印?
  • playboy=>?select?spcname?from?pg_tablespace;?????????//查看所有表空間??
  • ??spcname??
  • ------------??
  • ?pg_default??
  • ?pg_global??
  • (2?rows)??
  • ??
  • playboy=>?select?pg_size_pretty(pg_tablespace_size('pg_default'));???//查看表空間大小??
  • ?pg_size_pretty??
  • ----------------??
  • ?14?MB??
  • (1?row)??
  • ?

    ?

    在數(shù)據(jù)庫(kù)運(yùn)維工作中,經(jīng)常會(huì)有數(shù)據(jù)目錄使用率較高需要調(diào)整的情況,通常會(huì)給數(shù)據(jù)庫(kù)建立多個(gè)表空間,
    并分別位于不同的盤上,這時(shí)需要做的工作就是調(diào)整庫(kù)中現(xiàn)有表和索引的表空間,下面簡(jiǎn)單總結(jié)下這塊維護(hù)
    工作的內(nèi)容,以下都是基于 PostgreSQL 9.0.1 做的測(cè)試。


    一? 查詢某個(gè)表所在表空間的簡(jiǎn)單方法
    ???
    ???? PostgreSQL 提供類似" \ "命令很方便得到相關(guān)信息,命令如下:

    skytf=> \d test_2
    ??????????? Table "skytf.test_2"
    ?Column |???????? Type????????? | Modifiers?
    --------+-----------------------+-----------
    ?id???? | integer?????????????? |?
    ?obj_id | integer?????????????? | not null
    ?name?? | character varying(64) |?
    Indexes:
    ??? "idx_hash_name" hash (name)
    ??? "idx_test_2" btree (id, obj_id)
    Tablespace: "tbs_skytf_idx"

    ?? 備注:如果這個(gè)表的表空間為當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)表空間,那么上面則不會(huì)顯示 Tablespace 信息,
    ???????????? 相反,則會(huì)顯示這張有的表空間,例如上面的表 test_2 的表空間為 tbs_skytf_idx,而
    ???????? ?? 表空間 "tbs_skytf_idx" 不是數(shù)據(jù)庫(kù) skytf 的默認(rèn)表空間, 那么如何查詢數(shù)據(jù)庫(kù)的默認(rèn)
    ?????????? ? 表空間呢,可以通過(guò)以下命令查詢。
    ?????????
    ?????????
    --1.1 查詢數(shù)據(jù)庫(kù)的默認(rèn)表空間?????????
    skytf=> select datname,dattablespace from pg_database where datname='skytf';
    ?datname | dattablespace?
    ---------+---------------
    ?skytf?? |????? 14203070
    (1 row)

    skytf=> select oid,spcname from pg_tablespace where oid=14203070;
    ?? oid??? |? spcname??
    ----------+-----------
    ?14203070 | tbs_skytf
    (1 row)?????????

    ?? 備注:通過(guò)以上查出數(shù)據(jù)庫(kù) skytf 的默認(rèn)表空間為? tbs_skytf。


    ????
    二 批量查詢數(shù)據(jù)庫(kù)表和索引的表空間
    --2.1 查詢表和索引所在的表空間
    select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)), tb.spcname
    ? from pg_class a, pg_tablespace tb
    ?where a.reltablespace = tb.oid
    ?? and a.relkind in ('r', 'i')
    ?order by a.relpages desc;?

    ?
    ??
    ?備注:上面只取了部分結(jié)果,這個(gè)查詢能夠查詢表和索引所處的表空間,但是有一點(diǎn)需要注意,這個(gè)查詢
    ????????? ?僅顯示表空間不是數(shù)據(jù)庫(kù)默認(rèn)表空間的數(shù)據(jù)庫(kù)對(duì)像,而我們通常需要查出位于數(shù)據(jù)庫(kù)默認(rèn)表空間的
    ????????? ?對(duì)像,顯然上面的查詢不是我們想要的,接下來(lái)看另一個(gè)查詢。


    --2.2 查詢位于默認(rèn)數(shù)據(jù)庫(kù)表空間的對(duì)像
    select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner
    from pg_class a
    where a.relkind in ('r', 'i')
    and reltablespace='0'
    ?order by a.relpages desc;
    ?

    ???????????????????
    ?? 備注:這個(gè)查詢加入限制條件 reltablespace='0',即可查找出位于當(dāng)前數(shù)據(jù)庫(kù)默認(rèn)表空間的
    ?????????????數(shù)據(jù)庫(kù)表和索引。 通常這才是我們想要的結(jié)果,接下來(lái)可以把部分表轉(zhuǎn)移到其它表空間上去,轉(zhuǎn)移
    ???????????? 的方法可以用 "ALTER TABLE table name move tablespace ?tablespace_name"或者重建索引移表空間等方法,這里不詳細(xì)介紹。

    --2.3 查詢?cè)谀硞€(gè)表空間上的對(duì)像

    select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner
    from pg_class a, pg_tablespace tb?
    where a.relkind in ('r', 'i')
    and a.reltablespace=tb.oid
    and tb.spcname='tablespace_name'
    order by a.relpages desc;

    ?


    --2.4?手冊(cè)上對(duì)于 pgclass 視圖的 reltablespace 字段解釋
    ???? The tablespace in which this relation is stored. If zero, the database is default tablespace is?

    implied. (Not meaningful if the relation has no on-disk file.)??

    ?

    ?select?pg_database.datname,?pg_database_size(pg_database.datname)?AS?size?from?pg_database;????//查看所有數(shù)據(jù)庫(kù)的大小?

    ?

    ?

    ?

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/tank-/p/7222129.html

    總結(jié)

    以上是生活随笔為你收集整理的sql-表空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。