Separating a database onto multiple servers

We are working on a product that uses a set of SQL Server databases that are currently all in one instance and on one server. Now that we are growing, we need more processing power/space. So we want to move the databases onto multiple servers.
So we would not need to "shard", we created separate databases (with the same schema) for each company that purchased the product. We could readily put different company databases onto the different servers.
The question is this, how to we handle the routing to the different servers?
If we would have "sharded" the data in one database with different keys, SQL Server tools would have handled the routing for us. Because we actually separated the databases, do we have to do the routing manually? (That is, do we need to figure
out that when company A logs in that they need to go to database server aa.aa.aa while compay B needs to go to server bb.bb.bb?) Or is there a product that can help us with the routing?
Thanks!
www.insteptech.com ;
msmvps.com/blogs/deborahk
We are volunteers and ask only that if we are able to help you, that you mark our reply as your answer. THANKS!

Hello,
Based on your description, it seems that you want to copy all schema from a "Shared" database into other servers and separate data into the tables based on the company name.
If I understand correctly, you can try to use the
SQL Server Import and Export Data Wizard to copy data from table or view to destination server and specify query to restrict data  for copy. Or you can use linked server and
SELECT INTO statement with condition to move the data.
As per my understanding about the "Handling routing", balancing capability. In order to meet your requirement, you have to load balance through your application's design.
Regards,
Fanny Liu
If you have any feedback on our support, please click here.
Fanny Liu
TechNet Community Support

Similar Messages

  • Update of databases via multiple servers

              Hi all.
              I want to build a scenario like the one in section 17.2.3. of EJB 2.0 spec: one ejb
              in one weblogic accessing other ejb in another weblogic but in a single transaction.
              To achieve this I have configured tx pools with the JDriver (I'm using Oracle 9i),
              and have configured the ejbs transaction as "required" in the deployment descriptor.
              I want to use container managed transaction.
              Do I need anything else to accomplish this scenario? (say.. have clustering?) ?
              I'm using both Weblogic 6.1.
              The problem I'm having is that first ejb have problems commiting the transaction
              once the second return is situation.
              Thanks in advanced for any ideas or pointers for documentation.
              Tiago
              

    I finally found it here but it just shows "silent installation" that works on the local computer which is pretty senseless as you still need to log in to the client where you want to update the JRE.

  • Best practice approach for seperating Database and SAP servers

    Hi,
    I am looking for a best practice approach/strategy for setting up a distributed SAP landscape i.e separating the database and sap servers. If anyone has some strategies to share.
    Thanks very much

    I can imagine the most easiest way:
    Install a dialog instance on a new server and make sure it can connect nicely to the database. Then shut down the CI on the database server, copy the profiles (and adapt them) and start your CI on the new server. If that doesn't work at the first time you can always restart the CI on the database server again.
    Markus

  • How to set up  Planning on Multiple Servers

    Hi,
    1) I am trying to install a Finance Planning application so that it runs on one Planning Web Server and the other operations Planning application on another Planning 9.3.1 web server. Is that possilbe?
    2) May be unrelated question:
    HP_Windows_Install.pdf has only a few lines explaining how to set up Planning on Multiple Servers. Is it as simple as that?
    Here are the "few lines" from install.pdf:
    Perform the same installation and configuration process on your secondary servers, making sure to choose
    Planning Web Server component for any secondary server.
    Make sure you select Reuse existing tables when prompted during the Configure a Database task
    in the Configuration utility.

    Tomcat.
    But it will be nice to know the steps for Weblogic too - as Weblogic will be bundled "free" with future releases of Planning.

  • Determining wether to implement on a single database or multiple databases.

    Good Day Mentors,
    Our company will be migrating from 2004B to 8.81. We currently have 2 databases. We wanted to know what are the things to consider before choosing wether to go one or multiple database. We are in F&B. The 2 databases purchase and sell the same items for most of the inventory.
    I've already checked these links:
    [Merge multiple separate companies (databases) into one]
    [Re: Multiple companies in one database vs. multiple databases]
    [Re: Setting up two companies on one database]
    After reading those posts, I've listed these questions(this I'll be asking the users/management):
    1.) Are the 2 databases, 2 business/legal entities?
    2.) Is the Tax files separately for each subsidiary/company?
    3.) Are the reports(P/L, balance sheet, etc) usually consolidated?
    4.) Is it ok that the people can see all the BP's, GL accounts, Pricelists etc?
    Are there till things I need to ask the management in order to make a wise decision on the matter?
    Are there still pros/cons I need to raise up?
    Thanks in advance!
    Sean Yu

    Hello,
    1.) Are the 2 databases, 2 business/legal entities?
    It will 2 business /Legal entities when you have registered your company in two different tax registration no.(PAN)
    2.) Is the Tax files separately for each subsidiary/company?
    Totally depend on how you registered your company in tax department .means if you have saparate tax reg no then it might be.
    3.) Are the reports(P/L, balance sheet, etc) usually consolidated?
    this option in optional it may be or may not be .
    4.) Is it ok that the people can see all the BP's, GL accounts, Pricelists etc?
    No, because data will very huge then user become confuse at the time of data entry(but we have solution for same without SDK)
    Means totally depend that both company register in same tax no or two different tax no.
    Thanks
    Manvendra Singh Niranjan

  • Export DB Names over Multiple Servers into csv file

    Hi,
    I am a Junior DBA at my company and I am looking at running a query onto specific servers that pulls out the Database Name.  I have managed to run that query. 
    However our company has 50 different Host Servers each with a number of databases on each.  What I am looking to do is find a way that I can pull out the database names of all the 50 servers, without going into each individual server.  Is this
    possible?
    I have sa on all of the Databases.
    Regards,
    Jon Ditchfield

    and run select Server Name from sys.databases, it says there is no such column.  Am I able to use this column?
    Hello Jon,
    SSMS adds the server name, but you can get a similiar result with:
    SELECT @@SERVERNAME, *
    FROM sys.databases
    Olaf Helper
    [ Blog] [ Xing] [ MVP]

  • Agents for database and application servers

    hi all,
    I have to go to a client site this week to install Gagents onto some database servers, some will be RAC and some application servers. it is on AIX. are there different agents for database and applications? In a RAC cluster do I need an agent per node?
    rgds
    alan

    When installing agents in a cluster (read - RAC), during the installation, on one of the screens, you will have the option of picking up all the nodes in the cluster. Else, if you are using a push or agent deploy method, you just have to pass the correct flag (can't remember) and then list all the nodes in the cluster.
    To your other questions, you do not need different agents for database, and app servers etc. The only time you would need different agents is when you are installing on different platforms.

  • Managing multiple servers

    Not sure what i am looking for at the moment but we have 6 * solaris 9 servers, 5 * solaris 10, about 30 zones and it's only going to get bigger.
    it's become a real pain to manage(add,remove,keep track) users across multiple server/zones. How do other people go about managing multiple servers i for one don't want to log into each box/ zone and create a user accout which is currently what we do.
    Guess what i am looking for is some way of managing all of our boxes from a central point.

    Using a directory service like NIS or LDAP will allow user accounts for many hosts to be created and managed centrally. LDAP is what Active Directory is based on. Sun's implementation is called iPlanet. Sun One Directory Server, or Java Directory service, depending on the phases of the moon.
    For spotting problems on servers (disk full, host down, &c), we use nagios. It's fantastic.
    My employer also spent a good deal of money on opsware, but shall we say the benefits of it are not yet obvious.

  • Network drives fail (drives used to share databases among multiple computers)​.

    I am using databases on multiple computers to store test results for a production line. The computers share info from thier databases with each other using dsn's made with the ODBC Windows XP Admin Tool (Control Panel). This works well most of the time but occasionally one of the network drives fails - I have to disconnect and then use ODBC to make a new connection (a new dsn). Why are the network drives failing? Should I use somenthing else that is more reliable? datasocket? Shared Variable? [email protected]

    Gary MavSysInc,
    When you say that your program fails, are you referring to the same thing as your LabVIEW Application that is reterieving data? If so, what do you mean by it fails? Is there an error message? Does it Crash? What happens when it "fails"?
    Ben Sisney
    FlexRIO V&V Engineer
    National Instruments

  • Folder Comparison from multiple servers

    I need to compare folders from multiple servers which do not have direct connection so i was trying to generate a text file with command dir /b /s >c:\server1.txt and feed them to script to compare. 
    my desired output is csv file in the following format
    File name,Server1,server2,server3,is it missng file?
    File1,yes,yes,yes,No
    file2,Yes,Yes,No,Yes
    File3,Yes,No,Yes,Yes
    File4,No,Yes,Yes,Yes
    these folders contains few hundred thousand files and the script is taking 4 to 5 hours to run the comparison. i thought threads will help to run fast using parallel processng but did not help. i have no expreience with threads and after searching for examples
    and implementing it was even slower than normal. 
    i probably am doing something wrong. Any help is much appreciated. 
    The following is the script so far and it works fine but its taking long time.
    [array]$contentArray = @()
    [array]$allfileslist = @()
    [array]$uniquefileslist = @()
    [array]$allfilesSRVlist = @()
    [array]$srvlist = @()
    $FolderName = Split-Path -parent $MyInvocation.MyCommand.Definition
    $reportName = $FolderName + "\ComparisonReport3.csv"
    $ListOfFiles = get-childitem $FolderName
    $List = $ListOfFiles | where {$_.extension -ieq ".txt"}
    $list.count
    $index = 0
    foreach($listitem in $List){
    $listfilename = $listitem.FullName
    $listname = $listitem.Name
    $listname = $listname.replace(".txt","")
    $srvlist = $srvlist + $listname
    write-host $listfilename
    #$StrContent = get-content $listfilename
    $StrContent = [io.file]::ReadAllLines($listfilename)
    $contentArray += ,@($StrContent)
    $StrContent.count
    $contentArray[$index].count
    $index = $index + 1
    for($i = 0;$i -lt $index;$i++){
    $allfileslist = $allfileslist + $contentArray[$i]
    $allfileslist.count
    $uniquefileslist = $allfileslist | sort-object | get-unique
    $Stroutline = "File Name,"
    foreach($srvlistitem in $srvlist){
    $Stroutline = $Stroutline + $srvlistitem.ToUpper() + ","
    $Stroutline = $Stroutline + "Is it Missing file?"
    Write-Output $Stroutline | Out-File "$reportName" -Force
    foreach($uniquefileslistitem in $uniquefileslist){
    $Stroutline = ""
    $missingfile = "No"
    $Stroutline = $uniquefileslistitem + ","
    for($i=0;$i -lt $index;$i++){
    if($contentArray[$i] -contains $uniquefileslistitem){
    $Stroutline = $Stroutline + "Yes,"
    else{
    $Stroutline = $Stroutline + "No,"
    $missingfile = "Yes"
    $Stroutline = $Stroutline + $missingfile
    Write-Output $Stroutline | Out-File "$reportName" -Force -Append
    $j++
    Following is the script i modified using threads example. this is running even slower.
    [array]$contentArray = @()
    [array]$allfileslist = @()
    [array]$uniquefileslist = @()
    [array]$allfilesSRVlist = @()
    [array]$srvlist = @()
    $FolderName = Split-Path -parent $MyInvocation.MyCommand.Definition
    $reportName = $FolderName + "\ComparisonReport3.csv"
    $ListOfFiles = get-childitem $FolderName
    $List = $ListOfFiles | where {$_.extension -ieq ".txt"}
    $list.count
    $index = 0
    #$contentArray = New-Object 'object[,]' $xDim, $yDim
    foreach($listitem in $List){
    $listfilename = $listitem.FullName
    $listname = $listitem.Name
    $listname = $listname.replace(".txt","")
    $srvlist = $srvlist + $listname
    write-host $listfilename
    #$StrContent = get-content $listfilename
    $StrContent = [io.file]::ReadAllLines($listfilename)
    $contentArray += ,@($StrContent)
    $StrContent.count
    $contentArray[$index].count
    $index = $index + 1
    for($i = 0;$i -lt $index;$i++){
    $allfileslist = $allfileslist+ $contentArray[$i]
    $allfileslist.count
    #$uniquefileslist = $allfileslist | select –unique
    get-date
    $uniquefileslist = $allfileslist | sort-object | get-unique
    $uniquefileslist.count
    get-date
    $Stroutline = "File Name,"
    foreach($srvlistitem in $srvlist){
    $Stroutline = $Stroutline + $srvlistitem.ToUpper() + ","
    $Stroutline = $Stroutline + "Is it Missing file?"
    Write-Output $Stroutline | Out-File "$reportName" -Force
    $j = 1
    $count = $uniquefileslist.count
    $stroutput = ""
    $maxConcurrent = 50
    $results= ""
    $PauseTime = 1
    $uniquefileslist | %{
    while ((Get-Job -State Running).Count -ge $maxConcurrent) {Start-Sleep -seconds $PauseTime}
    $job = start-job -argumentList $_,$contentArray,$index -scriptblock {
    $StrArgFileName = $args[0]
    $ArgContentArray = $args[1]
    $ArgIndex = $args[2]
    $Stroutline = ""
    $missingfile = "No"
    $Stroutline = $StrArgFileName + ","
    for($i=0;$i -lt $ArgIndex;$i++){
    if($ArgContentArray[$i] -contains $StrArgFileName){
    $Stroutline = $Stroutline + "Yes,"
    else{
    $Stroutline = $Stroutline + "No,"
    $missingfile = "Yes"
    $Stroutline = $Stroutline + $missingfile
    $Stroutline
    While (Get-Job -State "Running")
    Start-Sleep 1
    $results = Get-Job | Receive-Job
    $results
    $stroutput = $stroutput + "`n" + $results
    Remove-Job *
    Write-Output $stroutput | Out-File "$reportName" -Force -Append
    Thank you very much!
    Vamsi.

    no i am not comparing the number of lines.. count i used was only for my information... it has nothing to do with the compare. here is the script with out count... 
    [array]$contentArray = @()
    [array]$allfileslist = @()
    [array]$uniquefileslist = @()
    [array]$allfilesSRVlist = @()
    [array]$srvlist = @()
    $FolderName = Split-Path -parent $MyInvocation.MyCommand.Definition
    $reportName = $FolderName + "\ComparisonReport3.csv"
    $ListOfFiles = get-childitem $FolderName
    $List = $ListOfFiles | where {$_.extension -ieq ".txt"}
    $index = 0
    foreach($listitem in $List){
    $listfilename = $listitem.FullName
    $listname = $listitem.Name
    $listname = $listname.replace(".txt","")
    $srvlist = $srvlist + $listname
    $StrContent = [io.file]::ReadAllLines($listfilename)
    $contentArray += ,@($StrContent)
    $index = $index + 1
    for($i = 0;$i -lt $index;$i++){
    $allfileslist = $allfileslist+ $contentArray[$i]
    $uniquefileslist = $allfileslist | sort-object | get-unique
    $strfinal = "File Name,"
    foreach($srvlistitem in $srvlist){
    $strfinal = $strfinal + $srvlistitem.ToUpper() + ","
    $strfinal = $strfinal + "Is it Missing file?"
    foreach($uniquefileslistitem in $uniquefileslist){
    $missingfile = "No"
    $Stroutline = $uniquefileslistitem + ","
    for($i=0;$i -lt $index;$i++){
    if($contentArray[$i] -contains $uniquefileslistitem){
    $Stroutline = $Stroutline + "Yes,"
    else{
    $Stroutline = $Stroutline + "No,"
    $missingfile = "Yes"
    $Stroutline = $Stroutline + $missingfile
    $strfinal = $strfinal + "`n" + $Stroutline
    Write-Output $strfinal | Out-File "$reportName" -Force -Append
    if you want to test it... just create two text files and put them in the same folder as the script. 
    server1.txt will have the following content
    filename1
    filename2
    filename3
    server2.txt will have the following content
    filename1
    filename2
    filename4
    it should generate the csv file ComparisonReport3.csv
    filename,server1,server2,Is it Missing file?
    filename1,yes,yes,no
    filename2,yes,yes,no
    filename3,yes,no,yes
    filename4,no,yes,yes

  • Multiple Servers for Development Team in WLI2.1 on wlidomain

    Has anyone tried to create multiple servers so that a development team can share
    the resources of a domain with WLI 2.1? If so, how did it work. I have done this
    with WLS but would like to try it with WLI.
    I tried to create multiple servers, but, had difficulty as there seems to many
    resources that are tied to the server name and default port. Also, I tried to
    change the port and that caused alot of problems on the myserver.

    Thanks John.
    I was not looking for something which is scaling out Hyperion Planning(via load balancer)/Horizontal clustering.
    But was looking for some thing like Vertical clustering(multiple JVMs/nodes of Hyperion Planning within a single planning server) which was applicable in 11.1.1.3.
    Came to know that with 11.1.2.2 vertical clustering not more supported.
    Thanks

  • Multiple servers to one APEX install.

    At the moment, I'm in the position of having APEX running on the site using the internal Oracle server. This was the initial plan as there aren't many IT resources on site, so maintaining the more complex setups was not really an option. However, I'd like to spend a little time investigating the Apache based setup and especially the APEX Listener (as that sounds as though it'll end up supporting NTLM).
    The question is, is it possible to have multiple servers, all connected to the APEX install, serving correctly (spotting subtle issues would probably be beyond my ability to spot quickly)?
    The aim for this is to find a method of running multiple access methods simultaneously, enabling efficient migration from one to another should the benefits of running with a particular method (such as APEX Listener) become overwhelmingly strong.

    James,
    yes, no problem, you can run multiple different connection methods (apex listener, mod_plsql, epg) parallel.
    brgds,
    Peter
    Blog: http://www.oracle-and-apex.com
    ApexLib: http://apexlib.oracleapex.info
    Work: http://www.click-click.at
    Training: http://www.click-click.at/apex-4-0-workshops

  • T-SQL Code to backup database with multiple files - Syntax error

    Hello,
    I'm trying to backup a database into multiple files but I'm getting a syntax error.
    Here is the code:
    declare @DBName varchar(100)
    declare @DBFileName varchar(256)
    declare @FolderName varchar(256)
    declare @Path varchar(100)
    set @Path = '\\Backup-Server\Test\'
    set @DBName = 'DayNite'
    set @DBFileName = 'DayNite-Full' + '-' + (SELECT CONVERT(char(10), GetDate(),110)) + '-' + 'P'
    set @FolderName =(SELECT CONVERT(char(10), GetDate(),110))
    set @Path = @Path + @FolderName + '\'
    EXEC master.dbo.xp_create_subdir @Path
    --Calculate broken files for BACKUP DATBASE Function
    /*declare @dbsize int
    set @dbsize = (SELECT ((size*8)/1024)/1000 as SizeGB FROM sys.database_files WHERE file_id = '1')
    set @dbsize = @dbsize / 4
    print @dbsize*/
    EXEC
    BACKUP DATABASE [test] TO
    DISK = @Path + @DBFileName + '1.bak',
    DISK = @Path + @DBFileName + '2.bak',
    DISK = @Path + @DBFileName + '3.bak',
    DISK = @Path + @DBFileName + '4.bak',
    DISK = @Path + @DBFileName + '5.bak',
    DISK = @Path + @DBFileName + '6.bak',
    DISK = @Path + @DBFileName + '7.bak',
    DISK = @Path + @DBFileName + '8.bak',
    DISK = @Path + @DBFileName + '9.bak',
    DISK = @Path + @DBFileName + '10.bak',
    DISK = @Path + @DBFileName + '11.bak',
    DISK = @Path + @DBFileName + '12.bak',
    DISK = @Path + @DBFileName + '13.bak'
    WITH INIT , NOUNLOAD , NAME = 'DayNite Full Backup', NOSKIP , NOFORMAT

    Made some slight modifications to your script and it should work(worked when tested).. if you wnat more complete solution -- google  -OLA Hallengren backups  -- you should get some good scripts..
    declare @DBName varchar(100)
    declare @DBFileName varchar(256)
    declare @FolderName varchar(256)
    declare @Path varchar(100)
    set @Path = '\\Backup-Server\Test\'
    set @DBName = 'DayNite'
    set @DBFileName = 'DayNite-Full' +''+ '-' +''+ (SELECT CONVERT(char(10), GetDate(),110)) +''+ '-' +''+ 'P'
    set @FolderName =(SELECT CONVERT(char(10), GetDate(),110))
    set @Path = @Path +''+ @FolderName +''+ '\'
    EXEC master.dbo.xp_create_subdir @Path
    --Calculate broken files for BACKUP DATBASE Function
    /*declare @dbsize int
    set @dbsize = (SELECT ((size*8)/1024)/1000 as SizeGB FROM sys.database_files WHERE file_id = '1')
    set @dbsize = @dbsize / 4
    print @dbsize*/
    select @Path,@DbFileName
    declare @SQL nvarchar(2000)
    Set @SQL ='Backup DATABASE [DAYNITE] TO DISK = '''+@Path +''+ @DBFileName +''+ '1.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '2.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '3.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '4.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '5.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '6.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '7.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '8.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '9.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '10.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '11.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '12.bak'',
    DISK = '''+@Path +''+ @DBFileName +''+ '13.bak''
    WITH INIT , NOUNLOAD , NAME = ''DayNite Full Backup'', NOSKIP , NOFORMAT '
    print @SQL
    exec (@SQL)
    Hope it Helps!!

  • How to stop sql services and sql agent services on multiple servers

    Looking for a t-sql/powershell script to stop/start sql services on multiple servers. Plan is to execute script from centralized server.
    Rahul

    see
    http://www.databasejournal.com/features/mssql/article.php/3644906/Automatically-Stopping-and-Restarting-SQL-Server.htm
    http://sqlpowershell.wordpress.com/2013/04/11/powershell-check-start-and-stop-sql-services-of-a-remote-servers/
    Please Mark This As Answer if it helps to solve the issue Visakh ---------------------------- http://visakhm.blogspot.com/ https://www.facebook.com/VmBlogs

  • Capture performance metrics across multiple servers

    Hello. I'm still very new to Powershell but anyone know of a good Powershell v.3 -4 script that can capture performance metrics across multiple servers with an emphasis on HPC (high performance computing) and gen up a helpful report, perhaps in HTML or Excel
    format?
    Closest thing I've found and used is this line of powershell:
    http://www.microsoftpro.nl/2013/11/21/powershell-performance-monitor-on-multiple-remote-computers/
    Maybe figure out a way to present that in better format, such as HTML or Excel.
    Also, if someone can suggest some performance metrics to look at with an HPC perspective. For example, if a CPU is running at 100 utilization, figure out if which cores are running high, see how many threads are queued waiting for CPU time, etc...

    As far as formatting is concerned,
    ConvertTo-HTML is a basic HTML output format, but you can spice it up as much as you like:
    http://technet.microsoft.com/en-us/library/ff730936.aspx
    Out-Grid is very functional and pretty simple:
    http://powertoe.wordpress.com/2011/09/19/out-gridview-now-has-a-passthru-parameter/
    Here's an example with Excel:
    Excel
    Worksheets Example
    This might be a good reference for HPC, I don't have access to an HPC environment so I can't offer much advice there.
    http://technet.microsoft.com/en-us/library/ff950195.aspx
    It might be better to keep unrelated questions separate, so a thread doesn't focus on one question and you lose time getting an answer to another.
    I hope this post has helped!

Maybe you are looking for

  • Audio on keynote exported quicktime videos cuts out at 50 seconds?

    It just started!  When I export my keynote into a Quicktime file, the audio cuts out at 50 seconds.  I have been creating videos a long time with this method and never had problems before.

  • Photoshop update error U44M1P7

    I'm receiving this error when I try to update Photoshop: U44M1P7. Can anyone help me? I'm using windows 8 on a laptop.

  • Changing Report Subject in Developer 6i.

    Hello Everyone, Can anyone help me in changing subject of the Report like for example we recive report by same subject like "Report Sent from Report Builder" we need to change this while sending from person to person..Thanks Regards,,,

  • Puttin url parameters into a map

    Hi guys, I have to put all the parameters from a url query string into a map, and I was wondering if anybody knows some library (apache commons, or something like that to do it). I know it is not hard to do it from scratch, but I want something that

  • Instanceof vs. enumeration

    Which is considered to be better: using instanceof to determine a type of object at runtime or some sort of enumeration? Thank you.