The 60-39 vote marked the third time in as many days Democrats have posted a supermajority needed to advance the legislation. Final passage, set for about dawn on Thursday, was a certainty, and will clear the way for talks with the House on a final compromise. Those negotiations likely will stretch into February.
The Senate has met for 24 consecutive days to debate the legislation, the second-longest such stretch in history, and Democrats held a celebratory press conference.
"We stand at on the doorstep of history," said Majority Leader Harry Reid of Nevada, who painstakingly pieced together the bill - and the now-controversial deals with wavering lawmakers that made its passage possible.
The measure would extend coverage to an estimated 31 million who lack it, while banning the insurance industry from denying benefits or charging higher premiums on the basis of pre-existing medical conditions. The Congressional Budget Office predicts the bill will reduce deficits by $130 billion over the next 10 years, an estimate that assumes lawmakers carry through on hundreds of billions of dollars in planned cuts to insurance companies and doctors, hospitals and others who treat Medicare patients.
Obama has also said he wants legislation that slows the rate of growth in medical spending nationwide, but the CBO said it has not determined whether that is the case with the bill.
Unlike the House, the Senate measure omits a government-run insurance option, which liberals favored to apply pressure on private insurers but Democratic moderates opposed as an unwarranted federal intrusion into the health care system.
In an interview with PBS, Obama signaled he will sign a bill even if it lacks the provision.
"Would I like one of those options to be the public option? Yes. Do I think that it makes sense, as some have argued, that, without the public option, we dump all these other extraordinary reforms and we say to the 30 million people who don't have coverage, `You know, sorry. We didn't get exactly what we wanted?' I don't think that makes sense."
Outnumbered Senate Republicans stubbornly played out a losing hand. They launched several last-minute attacks that Democrats swatted aside, then rejected calls to move the final vote up a day in deference to a snowstorm that threatened to prevent lawmakers from reaching home on Christmas Eve.
"Tomorrow the Senate will vote on a bill that makes a bad situation worse," said Sen. Charles Grassley, R-Iowa. "This bill slid rapidly down the slippery slope to more and more government control of health care."
Even before the bill passed, it was spinning off legal controversies at a remarkable rate.
Republican attorneys general in seven states discussed a court challenge to part of the bill that singles out Nebraska for special treatment, a concession made by the White House and Reid to lock in the state's Democratic Sen. Ben Nelson as the 60th vote for the legislation.
Under the provision, the federal government will permanently pick up the state's entire cost for an expansion of Medicaid, while paying the full tab for the other 49 states for only three years.
Nelson, who has strongly defended the provision, told reporters, "The governor said take care of it. I did." Asked whether the governor, Republican Dave Heineman, had said he didn't want the money, Nelson replied, "He hasn't said it to me."
That underscored the potential political dilemma facing Republicans in Washington who oppose additional funding that governors of their own party may want.
Senate Republicans also laid out two other avenues for a court challenge.
Sen. John Ensign, R-Nev., argued the measure was unconstitutional, saying Congress lacks authority to require Americans to purchase insurance. Democrats defeated his attempt to derail the bill, 60-39, but other critics of the bill were already speaking of a court challenge based on the same point.
Sen. Kay Bailey Hutchison of Texas, who is running for governor, said the bill improperly usurps the authority of the states to regulate insurance. She lost in a Senate vote, but that argument, too, is ripe for a court challenge.
In one concession to the season and the weather, Republicans agreed to move up the vote on final passage by one hour, to 7 am. Thursday. When Sen. Patrick Leahy, D-Vt., asked if they were willing to push up the vote even more, a hush fell over the Senate chamber before the Republican leader, Sen. Mitch McConnell of Kentucky, indicated they were not prepared to do so.