oracle数据库如何把表从一个表空间移到另一个表空间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库如何把表从一个表空间移到另一个表空间相关的知识,希望对你有一定的参考价值。

1、打开Toad For Oracle数据库工具。

2、输入数据库管理员账号密码连接数据库<因为管理员有权限看见不同用户的表及表空间,这样比较方便>。

3、点击 Database Browser 图标。

4、展开数据库,找到Tablespaces,点击Tablespaces,在右边就会看见当前数据库的所有表空间。


5、选择需要扩展的表空间文件,点击 Alter Datafile 按钮。

参考技术A 首先,使用下面的命令移动:
alter table table_name move tablespace tablespace_name;
然后,如果有索引的话必须重建索引:
alter index index_name rebuild tablespace tablespace_name;

当然,可以使用spool来帮助实现多个表的操作.
set header off;
spool /export/home/oracle/alter_tables.sql;
select 'alter table ' || object_name || ' move tablespace users'
from dba_object
where owner = 'XXX' and object_type = 'TABLE';
spool off;
之后执行此sql脚本即可.
同样对于index也做同样的操作.
参考技术B -------------------对表进行表空间移动操作---------------------------

如果有一张表ACCOUNTS存放在表空间EXAMPLE下

现在要把表ACCOUNTS移动到表空间DEMO下,该怎么操作?

操作语句如下:

ALTER TABLE ACCOUNTS MOVE TABLESPACE DEMO;

COMMIT;

ACCOUNTS表的结构和数据会一起被移动到表空间demo下。

如果要把表空间example下的所有表全部移动到表空间demo下该怎么操作?

操作语句如下:

SELECT 'ALTER TABLE '||TABLE_NAME||' MOVE TABLESPACE DEMO;

COMMIT;' FROM USER_TABLES WHERE TABLESPACE_NAME='EXAMPLE';

请参考:http://blog.csdn.net/M_ChangGong/archive/2009/06/18/4279109.aspx
参考技术C alter table tab_name move tablespace new_tbs;

C# - 如何将单个 Excel 工作表从一个工作簿复制到另一个工作簿?

【中文标题】C# - 如何将单个 Excel 工作表从一个工作簿复制到另一个工作簿?【英文标题】:C# - How to copy a single Excel worksheet from one workbook to another? 【发布时间】:2011-04-18 00:38:05 【问题描述】:

我需要将工作表从一个工作簿复制到另一个工作簿,但我有点卡住了。前提是我有一个“主”工作簿,其中存储了许多报告的模板,然后我需要创建特定工作表的空白副本并将其添加到新工作簿中。

这是我目前所拥有的:

private void CreateNewWorkbook(Tables table)

    Excel.Application app = null;
    Excel.Workbook book = null;
    Excel.Worksheet sheet = null;

    try
    
        string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
        string filePath = System.IO.Path.Combine(startPath, "sal1011forms.xls");
        Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();

        app = new Excel.Application();
        book = app.Workbooks.Open(filePath);
        sheet = (Excel.Worksheet)book.Worksheets.get_Item((int)table + 1);

        sfd.AddExtension = true;
        sfd.FileName = table.ToString() + ".xls";
        sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        if (sfd.ShowDialog() == true)
        
            sheet.SaveAs(sfd.FileName);
        
    
    finally
    
        if (book != null)
        
            book.Close();
        
        if (app != null)
        
            app.Quit();
        
        this.ReleaseObject(sheet);
        this.ReleaseObject(book);
        this.ReleaseObject(app);
    

目前我遇到的唯一问题是,当我在工作表上调用 .Save() 时,它会将原始工作簿中的所有工作表保存到新工作簿中。有关如何纠正此问题的任何想法?

提前致谢, 桑尼

【问题讨论】:

您好,您在脚本组件中使用了哪些引用? 【参考方案1】:

您也可以使用Sheet.Copy() 方法。

基本上,Sheet.copy 复制工作表,同时会自动创建一个新工作簿。

在您致电Worksheets.get_Item 之后,尝试将以下几行添加到您的代码中:

// Copies sheet and puts the copy into a new workbook
sheet.Copy(Type.Missing, Type.Missing);

// Sets the sheet variable to the copied sheet in the new workbook
sheet = app.Workbooks[2].Sheets[1];

这里也是Copy() 函数的参考: MSDN Link

【讨论】:

【参考方案2】:

我意识到这是一个有点晚的回复,但我对此感到很挣扎,所以我想我会发布我的解决方案,以便它可以帮助遇到这个问题的其他人。

有一张你想多次填写的模板:

    public void test()
    

        Excel.Application excelApp;

        string fileTarget = "C:\target.xlsx";
        string fileTemplate = "C:\template.xlsx";
        excelApp = new Excel.Application();
        Excel.Workbook wbTemp, wbTarget;
        Excel.Worksheet sh;

        //Create target workbook
        wbTarget = excelApp.Workbooks.Open(fileTemplate);

        //Fill target workbook
        //Open the template sheet
        sh = wbTarget.Worksheets["TEMPLATE"];
        //Fill in some data
        sh.Cells[1, 1] = "HELLO WORLD!";
        //Rename sheet
        sh.Name = "1. SHEET";


        //Save file
        wbTarget.SaveAs(fileTarget);

        //Iterate through the rest of the files
        for (int i = 1; i < 3; i++)
        
            //Open template file in temporary workbook
            wbTemp = excelApp.Workbooks.Open(fileTemplate);

            //Fill temporary workbook
            //Open the template sheet
            sh = wbTemp.Worksheets["TEMPLATE"];
            //Fill in some data
            sh.Cells[1, 1] = "HELLO WORLD! FOR THE " + i + ".TH TIME";
            //Rename sheet
            sh.Name = i + ". SHEET";

            //Copy sheet to target workbook
            sh.Copy(wbTarget.Worksheets[1]);
            //Close temporary workbook without saving
            wbTemp.Close(false);
        

        //Close and save target workbook
        wbTarget.Close(true);
        //Kill excelapp
        excelApp.Quit();
    

【讨论】:

【参考方案3】:

我想对这个问题给出一个答案,即使它被问到已经一年多了。我自己在开发一个项目时也遇到了同样的问题,我花了一段时间才找到答案。我将使用 VB.NET 代码而不是 C# 发布,因为我不熟悉最后一个。

这里是交易,为了在 Excel 工作簿之间复制工作表,绝对需要只使用一个 Excel 应用程序对象,然后使用该单个应用程序打开两个工作簿,然后我们可以使用已知的 Worksheet.Copy 方法并简单地指定该工作表是在其他工作簿中的工作表之后或之前复制的。

Private Sub ThisWorkbook_Startup() Handles Me.Startup
    Me.Application.Workbooks.Open(filePath)
    Me.Application.Workbooks(2).Worksheets("Reporte"). _
          Copy(After:=Me.Application.Workbooks(1).Worksheets("Hoja1"))
    Me.Application.Workbooks(2).Close()
    Me.Application.DisplayAlerts = False
    Globals.Hoja1.Delete()
    Me.Application.DisplayAlerts = True
End Sub

在这种情况下,我使用的 Excel 应用程序是运行我的 Excel 工作簿项目的应用程序,但这也可以:

Dim xlApp As New Excel.Application
Dim book1 As Excel.Workbook
Dim book2 As Excel.Workbook
book1 = xlApp.Workbooks.Open(filePath1)
book2 = xlApp.Workbooks.Open(filePath2)

book1.Worksheets("Sheet to be copied").Copy(After:=book2.Worksheets(1))

当然,Excel 应用程序会显示两个工作簿,因此在完成复制后,如果您不打算显示源工作簿(或至少时间不足以让用户执行任何操作),则应关闭源工作簿。

xlApp.Workbooks(1).Close()

这是我可以做到的方式,用户会看到一个闪烁的新工作簿弹出然后关闭,这不是很整洁,但到目前为止我不知道该怎么做(或者做这个复制过程以不可见的方式)

我希望这仍然有一些价值。最好的问候。

【讨论】:

以上是关于oracle数据库如何把表从一个表空间移到另一个表空间的主要内容,如果未能解决你的问题,请参考以下文章

oracle 11g 如何将表从一个表空间移动到另一个表空间

oracle中怎样把表、表空间导入或导出?

oracle数据库中怎么把表移到新建用户下

oracle 中如何将一张500万数据的表从一个库快速转移到另外一个库

MySQL可传输表空间:将一个表从一个实例拷贝到另一个实例

将多个表从一个数据库复制到另一个